Radiant Mural is a personal project where I created a large LED matrix grid with an animated audio visualization on it.

The LED matrix is built from a 5m RGB LED strip containing 160 LEDs. The strip is split into 7 rows of 24 LEDs, with the exception of the top and bottom rows which only have 20 each.

The LEDs are placed into an enclosure made of acrylic, with the most important part being the interlocked grid that creates the well-defined pixel cells around the LEDs. The "screen" is made of translucent white acrylic, while the other exterior parts are black. The interior parts have a "mirror" finish to make the light in each cell appear more even.

On the rear edge there is electret microphone which allows the design to be sound-sensitive. An ExtraCore board inside executes a fast fourier transform on the microphone input and the sound input is translated into dots on the grid which are then subject to the rules of Conway's Game of Life. The game of life cells fade through 32 shades of blue after they "die" to create a more fluid, pulsating feel.

Design

The full dimensions of this contraption are about 70cm by 30cm by 3cm, with the LED strips laying along the long dimension. The vertical grid walls are designed with channels in the bottom to accommodate the thickness of the LED strips.

Due to the very repetitive nature of this design I opted to generate the design files programmatically, rather than hand-drawing them in a CAD program. To enable this I created a Python library called cadoodle which provides a Logo-like interface to generating a DXF file.

Firmware

The firmware is a relatively-simple C++ program, except for the core FFT implementation which is an AVR assembly program written by someone who is simply credited as "ChaN".

The AVR's analog-to-digital converter is configured in free-run mode to capture samples on a predictable basis, signalling via interrupts each time a sample is complete. The main loop updates the Game Of Life simulation once for each sample.

The code is implemented in terms of the Alambre library, which ended up becoming a prototype of my programming language project Alamatic.

Lessons Learned

A hard and humiliating lesson I learned from this project is that precision calipers are important: I built this before I invested in some calipers and my ruler-based measurements were 0.5mm off per cell, which really added up across the width and led to one column of LEDs being obscured under the frame.

This was also my first experiment with laser cutting and I now realize that due to my unfamiliarity I made a bad choice of material: acrylic is quite flimsy and temperamental, and so the construction isn't a sturdy as I would've liked. Originally my intent was for it to hang on a wall, but due to lack of structural integrity combined with the weight this wasn't practical in the end.

What's Next?

This was very much an experimental, "artsy" project and so the resulting piece doesn't have any practical purpose. However, once I realized that it could not be hung on a wall without considerable rework and materials expense I concluded that a flat form-factor would be more appropriate.

Therefore when time allows I plan to investigate incorporating the design into the surface of a table, protected by a layer of a stronger material like glass. This may also permit more interaction possibilities like buttons in addition to the sound-sensitivity currently present, which may in turn allow switching between multiple light effects.

Component Sources