Infinity Mirror Coffee Table

In this project, I made a programmable "infinity mirror" coffee table for my parents with almost 600 individually programmable LEDs. This project greatly expanded my knowledge of Arduino programming and the limitations of using Arduinos for similar projects. The final product turned out amazing, I was really happy with the results and even managed to make the table wifi controlled using the open-source WLED mobile app. To my welcome surprise, I also had my 15 minutes of fame when a video of the table went viral on Reddit

I built the table using stained oak for the frame, a 5V power supply, 583 WS2812b LEDs, an Arduino Mega, a mirror, and a one-way mirror. The wiring was fairly simple, I used three rolls of LED strips and made sure to link the +5v and ground lines together in the corner in parallel to stop the LEDs from flickering due to voltage drop across the strips. More built details are available here

Gluing the frame

Preliminary wiring. I 3D printed mounts for all the electronics on the bottom of the table

To program the LEDs I originally used an Arduino running FastLED however I quickly found that there were some fundamental limitations to using an Arduino. The first was the RAM, however, the 8kB on the Arduino Mega turned out to be just enough for the project.

The other major limitation was the Arduino CPU. With 583 LEDs and a write time of ~30 nanoseconds per LED the upper limit to the refresh rate is ~50fps. This leaves ~15ms of computing time per frame without dropping below 20-24 fps after which most animations become hard to watch. This limitation was perfectly fine for some animations such as the rainbow because it just reads colors off a pre-generated table. More computation heavy animations such as the fire had lower refresh rates. 

I was able to work around the limited CPU to make some cool animations but ultimately decided to buy a faster microcontroller. More animations and code are available here.  

Fire 2012 by Mark Kriegsman
Matrix mode

The microcontroller I bought was an ESP8266 microcontroller. In addition to being dirt cheap, it had way more than enough computing power for any animation and also had wifi capabilities. I integrated the custom animations into the WLED code which let me tweak or change animations and brightness over wifi. I also wrote a better rainbow animation that added a bias to R, G, or B so that I could make the red and other warm colors more prominent. 

What the table looks like off

So what's next? At some point, it would be interesting to add speakers and have the LEDs react to music. I also had some ideas for other animations that I never implemented. I may implement these in the future, but the table is usually off and covered in books and magazines (like most coffee tables) so it's probably not worth doing.