2015 was our first year of automating our Christmas Lights to music. We spent a lot of time learning about the hardware and software involved and ended up with the following setup.
2015 Show Videos
We have 6 strands (309 feet, 1200 bulbs) of white medium bulb LED lights (used on the roof lines and around the windows), 11 strands (180 feet, 550 bulbs) of colored small bulb LED lights (used on the tree trunk and branches), 3 strands (174 feet, 675 bulbs) of white small bulb LED lights (used in the tree canopy), and 8 strands of traditional white small bulb lights (7 used on the dwarf pine trees and 1 to backlight the sign).
One thing that hopefully sets our light display apart from others is the use of RGB wash lights (188 LED DMX-controlled par cans we picked up on Ebay several years ago) to backlight the 3 front windows of our house. We hung thin white shower curtains (or shear drapes) in the windows and set the lights so that they fully fill the window. The curtains help diffuse the light so that from the outside it looks like a brilliant box of color in each window.
This year’s show is 8:53 seconds long and runs every half hour. When the show is not running, we have a relatively static display (all lights on with the RBG window wash lights doing a slow color fade). We made the decision to not run the show continuously primarily out of consideration for our neighbors and to not have constant blinking in their windows.
For the show, we play the following songs:
- Christmas Eve (Sarajevo) | Trans-Siberian Orchestra
- Handel’s Messiah | Relient K
- We Wish You a Merry Christmas | Relient K
- Deck the Halls | Relient K
- Have Yourself a Merry Little Christmas | Relient K
During the ~21 minute interlude between shows, we play the following songs:
- O Come All Ye Faithful [acoustic guitar solo] | Trans-Siberian Orchestra
- Celebrate the Day | Relient K
- Joy to the World [piano solo] | Jim Brickman
- In Like A Lion (Always Winter) | Relient K
- Christmas Pipes | Celtic Woman
- God Rest Ye Merry Gentleman [acoustic guitar solo] | Trans Siberian Orchestra
- I Saw Three Ships [Celtic instrumental] | Rivertribe
Rose handmade the “listen to the lights” sign out of pvc pipe for the legs, a 1×3 board for the frame, a thin piece of wood for the back, the glass from an old picture frame (hooray Goodwill), and a white poster board with black foam adhesive numbers and letters. A single strand of Christmas lights inside the box backlights the white poster board and provides great contrast in both daytime and at night for reading the sign. The sign says, “Tune to 97.7. Shows on the half hour from 5 to 9 pm until Dec 31”
Our display has 8 channels with on/off relay control (plus 1 channel for the lighted sign) and 18 channels to control the 3 RGB par cans. For the relay-controlled lights, we assigned them as follows:
- High roof line
- Left-side roof line
- Low roof line
- Left front window outline
- Right front window outline
- 2 dwarf pine trees
- Front tree trunk/branches
- Front tree canopy
Working on a budget and with a large supply of random electronics parts already in hand from some of Philip’s old projects, we decided to build our own light controller and relay boards rather than buying one of the pre-built solutions. While this took a lot longer, we also learned a lot and it was a lot more fun.
We used an Arduino Pro Mini ($10 from SparkFun) to drive 9 Schrack 5V relays. The relays were already mounted on custom PCBs from a failed DMX receiver project Philip attempted 5 years ago, and with some trial-and-error, we were able to get them functioning (well, we originally had 10 relays but one died somewhere along the way). Due to a miscalculation in the current required to drive the relays, we originally tried driving them directly off of the output pins of the Arduino. This actually worked pretty well, until we tried to turn on all the relays at once. After several frustrating hours trying to understand why we were seeing very inconsistent behavior, we finally figured out that the relays were exceeding the max current draw for the Arduino. Purchasing some N-channel MOSFET transistors and putting them between the Arduino and the relays solved our problem. See schematic for relay board below.
The DMX wash lights are daisy-chained together with microphone cable (gotta love having cable running up the stairs for a month and a half) and controlled from a USB-to-DMX converter (USB-COM485-PLUS1 from FTDI).
The display is driven from a Raspberry Pi. The Raspberry Pi communicates to the Arduino using a 3-wire serial connection from the General Purpose IO (GPIO) header.
We used Vixen Lights to program our display and run the display from the Raspberry Pi using Falcon Pi Player (FPP). We originally tried to run the display from various laptops but ran into multiple problems with things working consistently. We traced some of the problems to fragile drivers with Windows 10, but we ultimately gave up on the laptop solution in favor of the $35 Raspberry Pi.
We ran into a few problems with FPP but were able to work around all of them. Most frustrating is our inability to run the show in local time. Instead, we have to run in UTC and make sure that no scheduled show crosses the midnight boundary. Our experience has been that if a show runs across midnight, then it won’t stop repeating at the appropriate time.
We currently have to run an ethernet cable to the Raspberry Pi outside. Next year, we will either find a way to move the Pi indoors or will go wireless.
After some frustrating failed attempts at modifying a cheap car FM transmitter, we finally splurged ($40 or so) on a legitimate transmitter and have not regretted that decision. The music quality of the Signstek 0.2W Portable Stereo FM Transmitter is more than adequate and even on the lowest power setting gives us sufficient range in front of our house. On the second-lowest setting, the range reaches for several blocks.
In lieu of fancy waterproof enclosures, we elected to buy a $5 tote box with a quasi-sealable lid and put all of the electronics inside. We did our best to keep power and audio cables separated to avoid cross-talk noise. Just to be safe, we throw a clear tarp over the box if moisture is anticipated and this solution seems to be holding up just fine.