Loading 3D model… large boards can take a moment.
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.
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).
This is mainly an electronics/firmware project. However, some mechanical work was done in SolidWorks.
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
I've designed a base for the PCB, so it can stand on a table.
Printable model: pcb_tray.STEP
The firmware runs on a Raspberry Pi Pico 2 (RP2350) and is built with PlatformIO on the Arduino framework (earlephilhower core).
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.
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.
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 (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).
The button on the PCB cycles through the built-in animations (it skips live mode, so the cube never looks dead standalone).
No comments yet. Be the first to ask about this board.