A modular, 3D-printed split-flap display controllable over RS485 from a Raspberry Pi. Each module holds 64 characters and modules can be chained together to build a display of any width.
YouTube Build Video: https://www.youtube.com/watch?v=-C8_AtxEEQc
Each module contains:
- A 3D-printed drum that holds 64 individual flaps (one per character)
- A stepper motor driving the drum through a gear train
- A Hall effect sensor for homing
- A custom driver PCB (ATtiny1616 + RS485 transceiver + ULN2003 stepper driver)
Modules communicate over a shared RS485 bus. A Raspberry Pi running a Python web interface sends commands over USB-RS485 to each module individually by address.
cad/ - 3D printable parts (Bambu Lab profiles included)
flaps-generator/ - OpenSCAD code to automatically generate (custom) flaps
pcb/
driver-v2/ - Driver PCB KiCad project used in the video build
driver-v3/ - Updated driver PCB KiCad project, slightly cheaper to manufacture
bus-board/ - Bus board KiCad project
bus-board-5-module/ - 5-module variant of the bus board
firmware/ - Arduino firmware for the PCBs
frontend/ - Raspberry Pi Python web frontend
docs/datasheets/ - Component datasheets
BOM.md - Bill of materials
OnShape Model: https://cad.onshape.com/documents/87c916b33ca5d6492b457485/w/b3e5f0f05f6619e6e7931347/e/582ef2164e20b0aa994708ab
See BOM.md for the complete bill of materials, broken into three sections:
- PCB / Electronics — all SMD components with JLCPCB part numbers for easy ordering
- Module BOM — 3D printed parts and hardware per module, with quantities scaled to 45 modules
- Other Components — system-level parts (Raspberry Pi, power supply, C14 connector, etc.)
The driver board is designed to be ordered from JLCPCB with their PCB Assembly (PCBA) service so the SMD components arrive pre-soldered.
- Open the project in
pcb/driver-v2/ - In KiCad PCB editor, go to File → Fabrication Outputs → Gerbers
- Export to a folder, then zip the contents
- Also export the drill file from the same menu
Alternatively, pre-exported Gerber and PCBA files are already be present in the KiCad project folder.
- Go to jlcpcb.com and click Order Now
- Upload the Gerber zip file
- Set your desired quantity (minimum 5)
- Leave most settings at default; adjust PCB colour if desired
- Toggle PCB Assembly on
- Select Standard PCBA and set the assembly side to Top Side
- Click Confirm
- Upload the BOM file from the KiCad project folder — this maps component values to JLCPCB part numbers. The part numbers in
BOM.mdmatch what is in this file. - Upload the CPL (Component Placement List) file — this tells JLCPCB where each component sits on the board
- Review the component matches on the next screen. All parts should auto-match using the C-numbers in BOM.md. Confirm any that need manual review.
- Check the parts list — confirm quantities and part numbers match the BOM.md PCB section
- Proceed through the review screens and place your order
Note: A few through-hole parts (pin headers, JST connectors) are not included in PCBA. These are listed in the BOM and will need to be soldered by hand.
All printable files are in the cad/ folder. A Bambu Lab print profile is included in cad/64FlapsWithLetters (parts and bambu print profile)/ for the flaps. Print the flaps in the correct colour for each character — see the video for details on the full 64-character set.
Parts per module:
- Enclosure Body, Right Cover, Left Cover
- Drum Body, Drum Cap
- Motor Gear, Center Gear, Gear Plate
- DIN Rail Mount, Wire Retainer
- 64 Flaps
If you want to generate your own flaps, with your own font, size and characters, you can use the OpenSCAD script to automatically generate this.
Located in firmware/. The firmware is Arduino-based and targets the ATtiny1616.
- Flash via UPDI programmer (see https://github.com/SpenceKonde/AVR-Guidance/blob/master/UPDI/jtag2updi.md if you need to make one)
- Each module needs a unique address (0–44) stored in EEPROM. Be sure to edit this between flashes.
Located in frontend/. A Python web interface running on a Raspberry Pi sends display commands over USB-RS485 at 115200 baud.
Need a USB-serial dongle. I used this one: https://www.adafruit.com/product/5994
This project is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
You are free to share and adapt this project for non-commercial purposes, as long as you give appropriate credit to Adam G Makes and distribute any derivatives under the same license.