Skip to the content
PCBKitNew board
2 layers102 × 86 mmPoppyIO, the printed circuit board in 3D

A budget PLC-like board for controlling 24V DC equipment.

Size
102 × 86 mm
Copper layers
2
Thickness
1.6 mm
Parts
255
Nets
195
Pads
782
Tracks, vias
1,395, 279
Pours
4
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
7 Aug 2022
Updated
18 May 2024

Overview

PoppyIO is an open-source printed circuit board by Rahix, from the Rahix/Poppy-Logic-Controller repository on GitHub. It is a 2-layer board of 102 × 86 mm with 255 parts on 195 nets, routed with 1,395 tracks and 279 vias.

It is built around the PCA9538PW, 74HC14 and ULN2003AD, with the PTS645, SKL14 and SS14 among its other parts. Its parts include 89 resistors, 34 diodes, 33 capacitors, 16 fuses and 13 ICs. It belongs with the RP2040 boards of this library.

Main components

7

README

README.md

Poppy Logic Controller

Poppy Logic Controller

The Poppy Logic Controller is a budget PLC (Programmable Logic Controller). Importantly, it is only an I/O board without any PLC programming environment (so far). It isn't designed to be super robust but instead to use minimal components while still staying compatible with standard industrial 24V DC control systems.

I release the Poppy Logic Controller as open hardware in hopes that others who need a cheap solution for controlling industrial 24V DC equipment find it useful. This is not a commercially viable PLC alternative.

If you want to know more about the background of this project and details of the design, you might be interested in the blog post I wrote about it: Poppy Logic Controller

Features

  • Designed for 24V DC systems as most commonly found in modern controls applications.
  • 16 DI (digital inputs) in a Sinking Input configuration.
  • 16 DO (digital outputs) in a Sinking Output configuration.
  • Firmware stubs in Rust, MicroPython, and IEC 61131-3 Structured Text.

Learn more about sinking/sourcing I/O here and here or from my blog-post about this project.

Non-Features

  • I/Os are not galvanically isolated. Honestly, the isolators would probably be more expensive than the MCU so there is not much incentive to implement isolation anyway.
  • The board currently does not have any communication interfaces apart from the Pico's USB port. If you need to interface with anything, you might need to either update the board design or connect an additional mod onto the J12 header.

Building Your Own

Rendered versions of the schematic and BOM can be found here:

Parts

Supplier for almost all parts of this project was Reichelt Elektronik (no affiliation or sponsorship here, purely personal choice). I've tried reconstructing the BOM with all the Reichelt SKUs so you can painlessly get all you need from one place if you so desire. There is a column in the BOMs linked above with all the information you need.

Additional Components

Beyond the PCB's BOM, you will need a few more components. After all, you probably want the nice feeling of mounting your controller on a DIN-rail, don't you?

  1. The enclosure, which is an APRA-NORM 449-360-65 (Reichelt APRA DB6 OBK)
  2. Optionally, a lid for the enclosure, like APRA-NORM 449-360-12 (Reichelt APRA 449-360-12). Also available in other colors.
  3. A few (2) jumpers (Reichelt JUMPER 2,54 SW)
Hardware Revisions

In the design files, you'll find the latest revision D. I suggest using that one although it is not exactly the version I have built. My (2) boards are built from revision B with one populated like revision C and one populated like revision D. You can read the changelog for details of the differences.

Programming It

This repository contains a bare-bones firmware in Rust and MicroPython to get started. Or, if you have a background in automation, you can program the Poppy Logic Controller in ST (Structured Text) using the IEC 61131-3 firmware. Check the READMEs for more info on that:

Not using the Pico

If you need a different microcontroller, you can drop the Raspberry Pi Pico and instead solder the J12 header. You can then connect whatever controller you desire and use the I²C bus (and interrupt lines) to interact with the I/O.


If you want to build your own but you are unsure or you have questions about anything, feel free to contact me to get it sorted out!

License

  • The hardware design files (everything in Hardware/) are licensed under the CERN-OHL-W.
  • The firmware stubs (everything in Firmware-*/) are licensed under MIT.

Parts

255
QtyValueFootprintReferences
36TestPoint_SmallTestPoint:TestPoint_Pad_D1.5mmTP1, TP2, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19, TP20, TP21, TP22, TP23 +20
321kResistor_SMD:R_0603_1608MetricR13, R14, R15, R16, R25, R26, R27, R28, R37, R38, R39, R40, R49, R50, R51, R52 +16
32GreenLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderD10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25 +16
2010kResistor_SMD:R_0603_1608MetricR3, R4, R69, R70, R74, R75, R76, R77, R78, R79, R80, R81, R82, R83, R84, R85 +4
161nCapacitor_SMD:C_0805_2012MetricC8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23
163.3k 250mWResistor_SMD:R_1206_3216MetricR5, R6, R7, R8, R17, R18, R19, R20, R29, R30, R31, R32, R41, R42, R43, R44
1630V 300mAFuse:Fuse_1210_3225Metric_Pad1.42x2.65mm_HandSolderF1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16
16820 250mWResistor_SMD:R_1206_3216MetricR9, R10, R11, R12, R21, R22, R23, R24, R33, R34, R35, R36, R45, R46, R47, R48
10100nCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC4, C5, C6, C7, C24, C25, C26, C27, C28, C29
9SolderJumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP3, JP4, JP5, JP6, JP7, JP8, JP9, JP10, JP11
8WAGO 233-504PoppyLogicController:WAGO_233-204J1, J2, J3, J4, J5, J6, J7, J8
410uCapacitor_SMD:C_1210_3225MetricC1, C30, C32, C33
474HC14Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU9, U10, U11, U12
4PCA9538PWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU2, U3, U4, U5
30RResistor_SMD:R_0603_1608MetricR1, R2, R73
3ULN2003ADPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU6, U7, U8
24.7kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR71, R72
2MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2
2TestPointTestPoint:TestPoint_Pad_D1.5mmTP37, TP38
2~Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC2, C3
2~Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1, JP2
110uCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC31
1Conn_02x07_Odd_EvenConnector_IDC:IDC-Header_2x07_P2.54mm_VerticalJ12
1LM78xxPoppyLogicController:TO-220-3_Vertical_ClearanceU13
1MKDS-1,5-2-5.08TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ10
1PTS645Button_Switch_SMD:SW_SPST_PTS645SW1
1PicoRPi_Pico:RPi_Pico_SMD_THU1
1SKL14Diode_SMD:D_SOD-123D1
1SS14Diode_SMD:D_SMAD2
1SYM_RahixPoppyLogicController:SYM_RahixSYM1
1TC2030-IDCConnector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_VerticalJ11

The 249 most common of 255 parts.

Questions

How big is the PoppyIO PCB?

It measures 102 × 86 mm and has 2 copper layers, 1.6 mm thick.

What parts does the PoppyIO use?

255 parts, built around the PCA9538PW, 74HC14, ULN2003AD and PTS645. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the PoppyIO KiCad files?

From the Rahix/Poppy-Logic-Controller repository on GitHub, at the commit this page was made from: the board is Hardware/PoppyIO/PoppyIO.kicad_pcb and its schematic Hardware/PoppyIO/PoppyIO.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PoppyIO design in my own project?

Its repository states no licence, so its author keeps all rights: ask Rahix before reusing the design.

Similar boards

  • 4 layers106 × 110 mmRearCircuitBoard 10, the printed circuit board in 3D

    RearCircuitBoard 10

    ssbingo/samba-solar-track

    Samba Solar Track – Solarnachführung mit Sturmschutz: Handbuch, Platine und Gehäuse für den Nachbau (10,1-Zoll-Version)

    329 parts
  • 2 layers230.5 × 60 mmEEZ DIB AUX PS, the printed circuit board in 3D

    EEZ DIB AUX PS

    eez-open/modular-psu

    EEZ Bench Box 3 (BB3) Modular T&M chassis

    101 parts394
  • 4 layers95.2 × 67.5 mm6xUSB PowMet, the printed circuit board in 3D

    6xUSB PowMet

    aleksejm/6xUSB-Power-Meter

    6 USB port Power Meter

    175 parts7
  • 2 layers87 × 47 mmNetclock, the printed circuit board in 3D

    Netclock

    dilshan/ntp-clock

    Ethernet base NTP clock panel driver

    91 parts11MIT
  • 2 layers74 × 83.8 mmPCB Board, the printed circuit board in 3D

    PCB Board

    RunningJoke/reactionButton

    ReactPod: ESP32-C3 reaction buzzers – firmware, Config App (PWA), tools, hardware

    70 parts
  • 4 layers94 × 50.8 mmUlx3s, the printed circuit board in 3D

    Ulx3s

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    235 parts744MIT
  • 4 layers165 × 107 mmSpla board, the printed circuit board in 3D

    Spla board

    khaydarian/spla

    SNES PPU Logic Analyzer

    290 parts32