Christmas Light Show

From TonyWiki
Jump to navigation Jump to search

I'm known for having fun with AV/Production and electronics. In 2015, I did a DIY Christmas Lights Show, since it's a great combo of the 2.


I used Vixen 2 for the main controls. After experimenting with a DIY program, QLC and hardcoding it, I discovered the Vixen suite. There are 2 main versions, Vixen 2 and Vixen 3. I had trouble getting Vixen 3 to communicate over serial, and ended up using Vixen 2. Most of the source code is available. One of the downsides of Vixen is (at the time) was that it only ran on Windows, so I used my old Pentium T4400 laptop to run the show.

The main reason I used Vixen was support for a variety of hardware, namely, the ability to send the control for all of the lights over serial. (Also that it's free).


I needed something cheap for my setup, and would work with our existing lights, so fancy DMX systems and WS2812B LEDs were out of the question.

I used an Arduino Mega 2560 for it's sheer number of IO ports. My initial plan was to use I2C/SPI PWM pin expanders off something like an Arduino Micro, but settled for the convenience of the Mega. No need to pay $50 for a legit Mega, any cheap $10 clone should keep up for what we're doing.

I used the StandardFirmata sketch, which just forwards the serial input to the pins, since I didn't need to do any other remapping.

For controlling the lights, I used 16 OMRON Solid State relays, connected to pins 2-18 on the Mega. I first used regular mechanical relay's, but turns out switching mechanical relays on and off 20 times a second is a great way to break them. After testing with 4 mechanical relays (and busting one of them), I switched to 2x 8 channel solid state relay boards with OMRON solid state relays I got off ebay. I wired them to outlets we got from home depot to make them safer then loose 120V wires.

After seeing the mechanical relay's die, I decided to keep 2 of the 16 channels as spares, so I could hot-swap to them if some of the other relays died during the week. (So I had 14 channels to work with).

For audio, I used a cheap amplifier connected to a HiFi speaker. I kept the show looping until 2am or so, but shut off the amp at 11PM. I would recommend using an FM transmitter so curious ppl can listen to it at a desirable volume. To not disturb the neighbors, I had the volume very quiet, you'd have to be by our front door to hear it.

Setting it up

In the Vixen projects, I added the Arduino as a serial input. I initially tested the setup on a Breadboard (the demo of this is available on my YouTube channel for Wizards in Winter).

After picking some songs off YouTube and forums, I got started sequencing. I set aside channels as

  • 1x for roof
  • 2x for red/green floods
  • 8x for the main channels that I would "animate"
  • 2x for branches of a tree
  • 1x for base of tree (that I repurposed to blue flood)
  • 2x for spares/hot swaps

I sequenced them just thinking of geometric patterns for the animated channels. I synchronized the floodlights and roof perimeter to the beat (with exceptions for some tracks). I ended up sequencing 4 tracks. The patterns were set so they looped on beats. It's not perfect since I did everything manually, so setting up each song took many hours or tediously marking the channels on and off.

I had also initially planned for dimming with PWM, but I skipped it due to safety and time. I'll say this now: NEVER EVER PWM AN AC ELECTRONICS SIGNAL! Since the current isn't steady, you'll end up flickering the circuit at different positions in the sine wave cycle and arc or break something. If you want to dim an AC signal, use phase control dimmers designed for AC workloads! They use triacs and will cut the signal in the right part.

I had sequenced all the tracks to have a few channels on at a time, but I should have overlapped the times (especially the animation). This is because I used incandescent lights, and after you give them power, they take a bit to warm up and get to full brightness. None the less, it worked well with the lights I was using, probably because the bulbs are so small.


I have made my sequences from 2015 public. They are available here under the GPL license.

Individual files are as follows:

I can not legally make the music available to you as it would be copyright infringement, however, all the tracks are available on Spotify/platform of your choice. You just need to align it to start at the same time when you load it to Vixen. I used the YouTube versions for testing purposes for my first demo, before switching to the official audio. This project should be safe under the Canadian Copyright User Rights, to create non-commercial transformative works (in this case, all of the lighting synchronization).


You can watch the full show here: I've overlayed the audio, but I had a speaker outside running quietly as well.

Future expansion

If I do this in the future, I want to replace the 8 animated channels with RGB plain LED strips (3258 or 5050), WS2812B on the roof, a uDMX with 2 par cans as floods, etc. I think Vixen 3 supports RGB and pixel based shows, so it would be possible to set it up.