Bram Knaapen

Lunar Ambient Display

What is it?

Lunar is one of my latest hobby projects. I’ve always been on the look out for other ways to make more high-fidelity ambient displays for in the home. Displays with the primary objective to just be beautiful objects in their environment. You’ll find many of these in public areas or stadiums; but usually cost a lot of money and significant computing power to operate. Which is fine in a one-off high-end context. I wanted to build one myself using low-cost parts and open-source libraries.

The panel is made from a matrix of 3×6 LED panel with a 10mm LED pitch. I deliberately went for the biggest pitch I could find. Not only makes it a lot easier to make it large; but I also want to use the low res as a feature by designing patterns specifically for it. It’s not meant to be a high definition display.

Also made a little web app that you can use to connect to the device and tweak the effects. The panel can run different algorithms:

The pixelated mode is the most basic one; it will turn on or fade on LEDs in one color and fade them to another color. Multiple settings in how this is done can be set using the app.
Another example of the pixelated mode (with different settings)
This is the RainRadar mode. It downloads the latest radar image from the internet and displays it on the screen; the colorpalette was shifted to make it less obvious it was a rain radar image.
Also got a Christmas mode
On this screenshot of the web app you can see the different modes it can run in; as well as the different parameters that can be tweaked
Using Apple iOS Shortcuts it’s possible to launch an API call that automatically selects pre-sets from the lock-screen; no need to go into the web-app to switch modes!

How it’s made

The panel is made using a 3×6 matrix of RGB LED Matrix panels with 10mm pitched LEDs (you can find many variants by searching for : LED RGB Matrix P10 on AliExpress.

It uses a Raspberry Pi 3 as central computing unit.

The metal panel interconnects have been made using my CNC milling machine. The frame modules running around the perimeter were 3D printed.

I wanted to get some more Python experience; so I used that as the main platform. In hindsight this probably wasn’t the best choice due to lack of performance on the Pi to refresh the screen fast enough; yet being a bit creative it did eventually work out. I used a external library that would update the screen and I would use python to update an image that I would write to the buffer whenever it was updated.
I used Flask to create the API and used the integrated ninja templating to create the web app. It just runs the basic dev webserver that comes with Flask.

To run the display I used Henner Zeller’s fantastic RGB Matrix library. Be sure to check it out of you’d like to build something similar. He’s got a great write-up of all you need to get going here:
https://github.com/hzeller/rpi-rgb-led-matrix