I made an LED cube. It is roughly 136mm on a side (5⅜ inches), and each side is covered by thousands of RGB LEDs. A computer and a battery inside control the LEDs and can display graphics at full video rate.

Update 2019-09-05: Welcome [Hackaday]! The Github repository is ➡︎➡︎ HERE ⬅︎⬅︎.

The cube on its stand.

Why?

It all started in October, 2018 when Piotr sent me a prototype of his new FPGA development board, the iCEBreaker. He also sent along a handful of interface boards and a 64×64 LED panel.

I took that as a sign I needed to learn Verilog and digital design. I haven’t gotten very far in the latter, but I did get the LED panel to light up and do several interesting animations.

A short while later, I saw a video clip of Zzaurak’s LED cube. I immediately wanted one.

Prior Art

I believe Zzaurak was the first, but several people have built LED cubes. AFAIK, all of them are in Europe.

Zzaurak and Happy Teddy have made at least three generations of LED cubes, with 3D printed, machined, and injection molded chassis. They are currently working on producing them for sale. Their cubes have a Raspberry Pi and a battery pack inside. The first ones drove the LEDs directly from the Pi; later ones are using an iCEBreaker, and Zzaurak is working on new electronics that integrate power supply and FPGA on a single board.

Polyfloyd, Sebastius and Boekenwuurm each made cubes. Theirs have laser cut plywood chassis and connect to external power supplies. They also use a Raspberry Pi to drive the LEDs directly. Unfortunately, Sebastius’ cube was dropped. The chassis shattered, and it was never rebuilt.

@Ahmet made a cube with a laser cut plywood chassis. I don’t know much about it.

Lars Michelson also has a cube. His Twitter feed shows some interesting and unique animations.

vifino does not have a cube that I know of, but he has been making arrays of LED panels and writing software to drive them from Raspberry Pi and/or iCEBreaker FPGA.

tnt wrote the BCM LED driver that all iCE40-based cubes use.

George Ioakimedes also does not have a cube. But he provided invaluable help to both me and Zzaurak with the design of our cubes’ power supplies.

Esden created the iCEBreaker FPGA and the HUB75 adapter and got me interested in this. I gave him parts, and he constructed the second cube in my design. (There was a short-lived 3rd cube, but we did not have enough LED panels to finish it.)

There is also the PixxlCube. I don’t know much about it.

Mechanical

Most of these cubes are based on 64 by 64 P2.5 LED panels. P2.5 means the LEDs are spaced 2.5mm apart. So each panel is 160 by 160mm, plus a little for the thickness of the panels. The Pixxlcube appears to be 32 by 32, P5, which would also be 160 by 160mm. My cube is 64 by 64 P2. 2mm pitch, 128 by 128mm. My cube is small enough to easily palm; the others are a little too big.

Zzaurak and HappyTeddy pioneered the use of a hinged lid held down by magnetic clasps. I don’t know how the wooden-framed cubes open. Mine uses a simplified hinge and magnets, and it works very well.

My cube’s chassis is 3D printed in PLA. It started out very similar to HappyTeddy’s printed chassis, but the constraints of fitting everything into half the volume forced a lot of changes.

The four major components in my cube – battery, Raspberry Pi, power board, and iCEBreaker FPGA, are on removable carriers. The first three are spring loaded – the plastic deforms to allow removal. The FPGA board is held in place by the power board, so it doesn’t need a separate spring. Zzaurak’s injection molded cubes also have interior components that snap in and out.

Electronics

The LED panels use a HUB75 interface. Early cubes use a board and driver designed by Henner Zeller that allow a Raspberry Pi to drive HUB75 directly through its GPIO pins. Unfortunately the Pi has neither the realtime OS nor the dedicated bus bandwidth to drive a 30 MHz signal consistently.

Later cubes use an iCEBreaker FPGA board. The iCEBreaker connects to the Pi either via USB or SPI. It stores an entire video frame on-chip and generates all the HUB75 signals with rock solid timing.

I thought a cube made of PCBs would be a good Faraday cage, but it turns out that WiFi and bluetooth work just fine with the Raspberry Pi inside the cube.

Most of these cubes have an IMU inside to detect and respond to motion.

Software

tnt created gateware for driving LED panels from an iCE40. tnt also wrote an uncompressed video streaming App called stream.

Zzaurak has software called matrixserver. It has a client-server architecture; Clients generate pixels and write them to a socket. The server copies the pixels to the hardware. Matrixserver does CPU-based rendering.

Zzaurak also uses game controllers to make matrixserver clients interactive.

Polyfloyd created Shady and ledcat. Shady uses OpenGL fragment shaders to paint the pixels. Ledcat reads pixels from its standard input and writes them to a number of LED devices. He has a small collection of very nice shaders.

vifino does not have an LED cube, AFAIK, but he has lots of LED panels. He has written SLED, the Satanic LED controller. SLED has backends to drive many type of LEDs, and it has more demos than all the other packages combined. SLED uses CPU-based rendering, and AFAIK all of its apps assume LEDs are on a flat plane. Still, they generally look good wrapped around a cube.

My own contribution is Shaderboy. Shaderboy is a lot like Shady, but it is also scriptable in python for apps that don’t work as pure fragment shaders. Shaderboy is structured as a Python front end, a Python module, and a C library.

A Diverse Ecosystem

It looks like all the cool kids are making LED cubes. For some reason, almost all the cool kids are in Europe. There are lots of ideas and lots of experiments. It’s fun even when it isn’t blinking.