Automatic Light Show

Growing up I came to love all things that lit up, and Christmas lights were no exception. So when my Dad brought home some GE Color Effects G-35 lights, I was thrilled. Since their release years ago there have been quite a few hacks featuring these bulbs in creating awesome displays, and I wanted to try one as well.

The vision that I had in my mind was a light show that you adapted to any song or audio source in real time. While you can create some amazing timed displays, I decided on focusing on real time displays.

Using the popular MSGEQ7 IC chip, I was able to construct a circuit that would take in an aux input and create a state vector of 7 different spectrums of noise, sampled at about 33 hertz. In other words, I’m getting almost 2,000 data points per minute of music on the frequency of different audio spectrums.

With this data I would estimate the 7 derivatives for each channel, and use that to determine the brightness for each lightbulb. This essentially would dim or brighten the lights with the music. To determine cutoffs for the minimum and maximum brightness, I used a simple low pass filter.

If I were to continue the project, I would use either a moving average or an ARIMA model to better determine cutoffs for when the lights should be off or at full brightness. This would lead to much better performance in all genres of music and any additional audio sources.

Version 1

Built on top of GE’s Color Effects Christmas lights. Big thanks to a mentor of mine for helping me hack the data protocol on the lights to control them for my own nefarious blinky purposes. This was nothing more than setting certain thresholds for each audio band in the music. I would love to see if I could develop a deep learning model to predict what genre of music is playing based off of the audio signals, but that will have to wait for another day.

Version 2

Built with WS2812B LED strand, a bit easier to control thanks to Adafruits libraries.  Sadly you cannot individually dim each LED, so I had to change my algorithm a bit. I also stared to use some basic equations to estimate the derivative and how each band was changing over time. However each calculation was kept to minimal complexity – I still want a live audio show. Also, calculating the total power draw is important here, 144 pixels at full white can draw almost 10 amps of power!