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.
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?
- The enclosure, which is an
APRA-NORM 449-360-65
(ReicheltAPRA DB6 OBK
) - Optionally, a lid for the enclosure, like
APRA-NORM 449-360-12
(ReicheltAPRA 449-360-12
). Also available in other colors. - 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. Check their 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.