cubeeee_4x4x4_led_cube
PublicLoading 3D model… large boards can take a moment.
Cubeeee — 4x4x4 LED Cube
Project foundations
- Designing and fabricating a 4x4x4 multiplexed LED cube
- Simple, well-documented project
- Eventually a custom PCB
- Mechanical and electronics project
- Firmware development
PCB
The PCB connects the Pico 2 to the hand-soldered LED cube. The LED columns are driven directly from GPIO pins (only one LED is lit at a time), while the layers are switched through N-MOSFETs. A tactile button is added as a 'user interface'. An AUX header exposing GP0/GP1 is provided for future expansion, like sensors. There is also a power-in connector (feeding VSYS), but USB power should be sufficient. The board was designed in KiCad 10.0.
Fabrication
A standard 2-layer, 1.6 mm, 63 × 63 mm board. Gerbers are exported to PCB/cubeeee_PCB/gerbers/, with gerbers.zip ready for upload to a fab. JLCPCB was used as the fab (fits the $2 limits).
Mechanical
This is mainly an electronics/firmware project. However, some mechanical work was done in SolidWorks.
Soldering jig
I've designed a 3D-printed jig that helps with soldering each layer. The LEDs are just inserted, bent and soldered.
Printable model: soldering_jig.STEP
PCB tray
I've designed a base for the PCB, so it can stand on a table.
Printable model: pcb_tray.STEP
Assembly
Firmware
The firmware runs on a Raspberry Pi Pico 2 (RP2350) and is built with PlatformIO on the Arduino framework (earlephilhower core).
Building and flashing
Just use PlatformIO in VS Code to compile/flash it.
Note that firmware/webui/cube.html is embedded into the firmware image at build time and written to the cube's drive on every boot. The embedded copy is the authoritative one, so editing cube.html directly on the drive won't stick — it gets overwritten at the next reset. To work on the interface, edit the file in the repo and open that copy in the browser; it talks to the cube the same way.
Architecture
LED multiplexing runs on the first core of the RP2350. The second core handles animations and the 'user interface'.
The MCU enumerates as a USB composite device: a serial port for communication and a mass storage drive.
The drive holds cube.html — the user interface, which opens in a browser and connects to the board via serial.
Usage
Web UI
The vibe-coded web interface lets you connect to the cubeeee and control it. It supports drawing on the layers, switching between modes, setting the brightness, and it shows a live preview of the cube plus a log of the serial traffic.
Nothing has to be installed to use it. Plug the cube into a PC over USB and it shows up as a small drive holding cube.html. Open that file in a browser, click Connect and pick the cube's serial port — the page talks to the board over the Web Serial API. No drivers, no WiFi, no extra hardware.
Serial protocol
Serial protocol (115200 baud, one command per line):
ID -> identify
M <n> -> set mode (0=live, 1=sweep, 2=rain, 3=wave,
4=solid, 5=spin, 6=ripple, 7=twinkle,
8=bounce)
M? -> query current mode
F <16 hex digits> -> push a frame and switch to live mode
bit z*16+y*4+x, digit h = voxels h*4..h*4+3
B <n> -> brightness 1-16 (saved to flash, kept
across power cycles); B? queries it
C -> clear (all off, live mode)
S -> status (uptime, fs/drive state)
Commands are terminated by a newline. Every command replies OK or ERR ...; queries reply with their value.
The one exception is SAVED, which the firmware sends on its own after it writes the settings to flash (a second or so after the last brightness change).
Mode button
The button on the PCB cycles through the built-in animations (it skips live mode, so the cube never looks dead standalone).
Project TODO
- PCB Tray (in SW)
- Final check of the PCB
- Export final gerbers
- Fill out the docs
- Full SW assembly
- Finished cube images in README
- Order PCB
No comments yet. Be the first to ask about this board.