Holiday Light Display - There's Gotta be a Better Way
2022-11-22 | By Zach Hipps
License: General Public License
Everyone has that one house in their neighborhood during the holidays. You know which one I’m talking about; the one that goes all out with a fancy light display set to music. The trees are beautifully decorated and there are arches of dancing lights and snowflakes that light up. It draws crowds of people and lines of cars every December. It’s magnificent! Meanwhile, I can barely manage to find that box in my garage with Christmas lights. The box is falling apart, and the 2 strings of lights my parents gave me all those years ago are tangled. I’m not even sure how many of the bulbs still work. By some miracle, I haphazardly throw them on my bushes just in time for Christmas. Once mid-January comes around, I find myself yanking them off the bushes and bunching them up as I throw them back into the tattered box from whence, they came. I do this because I know I won’t have to think about them for 11 more months.
If anything about my experience putting up holiday lights sounds a little too familiar, this article is for you! I’m sure most of us don't necessarily want to be the house with a million lights and loud music, but every time I see a house like that, I catch the holiday light bug and want to do more to bring joy to my family and the people around me. I was talking to my neighbor, and he wants to put permanent lights up on his house. We were commiserating about how lights are too difficult to put up, just to take them down again a few weeks later. He showed me a permanent light installation across the street, but apparently, they paid $5k to have them professionally installed! He was resigned to the fact that a permanent installation was just too expensive and out of reach. That is until I showed him photos of the DIY version I put up on my previous house. He was blown away by how simple my process was and how cheap it was to build. Instead of paying thousands of dollars for permanent holiday lights, my DIY version only costs a couple hundred dollars. Here’s how I did it:
Requirements for this Project:
I want to be able to leave the lights up year-round. They need to look nice enough to blend in.
The lights need to be able to change color based on which holiday I’m celebrating. Red for Valentine’s Day, green for St. Patrick’s Day, orange and purple for Halloween, etc. These will be up all year, so why not use them to be more festive on other holidays?
The lights need to be on an automatic schedule. I don’t want to have to remember to turn them on and off at night, nor do I want to have to reprogram the colors for different holidays. I want to set it and forget it.
While solid colors are nice, it would be cool to have the lights do various animations and effects. Also, nice to have would be the option to sequence the lights to music. This is more of a “nice to have” as opposed to a requirement.
Materials Required for this Project:
The first thing I bought were individually addressable RGB LEDs with an ingress protection rating of at least IP67. These are rated for outdoor use in all types of weather. They typically come in strings that run on either 5V or 12V DC. There is an input side and an output side for the data signal so when I connect more than one string, I’ll need to be mindful of the orientation. I bought a 10-pack of the 5V variety, and this should easily cover 100 feet of roofline.
The next thing I needed was a power supply for all the lights. With the color set to white and the brightness at the max level, each LED could draw up to 300mW (0.3W) of power. In the worst-case scenario if all my lights were set to white at full brightness, I would need a unit capable of supplying that much power. If I use the Ohm’s Law calculator on DigiKey’s website, I can determine that 500 LEDs at 0.3W each would require a 150W power supply. But I also want a safety factor so it’s better to get one that’s oversized. I bought a 300W power supply which means it can supply up to 60A at 5V. If I had chosen 12V LEDs, I would need to make sure and get a 12V power supply.
The LEDs are sort of dumb on their own, they need something to tell them what to do. I could use an Arduino board, but I would need to get one with WiFi since that is one of my requirements. A raspberry pi would also work, but it’s overkill for this project. The middle ground is using an ESP8266 microcontroller. It has all the functionality I need, is very affordable, and is well-documented. Plus, as I’ll show you later, there is an awesome open-source firmware called WLED that’s already been written for ESP-based microcontrollers, and it does exactly what I’m trying to do!
These three parts are the basic components to get started, but I’ll need a few more things to help me along the way. Because I chose 5V LEDs I need to be aware of stringing too many of these lights in series. The wire they come with is very small, somewhere around 24AWG so the resistance is high which may cause a voltage drop over long distances. I might measure 5V at the beginning of the string, closest to the power supply, but only 1V or 2V at the far end. This isn’t good as the LEDs won’t have enough voltage to produce all the colors. In addition, the small wire also doesn’t have a ton of current carrying capacity, so I’ll need to inject 5V at various points along the strings. I’ll need some heavier gauge wire, like 16AWG and connectors, to run it along the strings in parallel. I don’t want the power supply or microcontroller(s) to be exposed to the elements, so I’ll want to get an ingress-protected outdoor enclosure with some cable glands to make sure everything stays dry. I may live in Arizona, but we do get rain occasionally! With all these components in hand, I’m ready to start assembling my light display.
How Do I Hang the Lights on my House?
I could get on a ladder and use a staple gun to attach the strings directly to my roof, and depending on the look I’m going for, that may very well be the best thing. However, I don’t want the lights to be facing in all directions with varied spacing between them. I want the lights to all be pointing in the same direction with even spacing between them, so I’ll need to attach them to something. I’m trying to keep the cost down, so I went to my hardware store looking for long lengths of material that is both durable and cheap, and I landed on using some ¾” PVC pipe. There aren’t many materials if any, that compare to PVC when it comes to price/ft. The pipe comes in 10-foot lengths, and I want to butt them up against each other along the roofline of my house. If I want to put a string of 50 LEDs along one 10’ length of PVC pipe I need to drill ½” holes that are spaced 2.4” apart from one another. That will ensure that the spacing remains constant when I daisy chain more than one string together. So, how do I drill holes that are spaced exactly 2.4” apart? It’s not like there is a mark on my tape measure every 2.4”, and it’s not a nice round number if I convert it to metric, so what do I do? Well, I could make a story stick to lay out these repetitive holes, but I am lucky enough to have access to a CNC machine. I drew out the spacing in the software and drilled pilot holes exactly where they needed to be along the whole length of all 10 pipes! The result was much more accurate than I could have done by hand, but if the CNC wasn’t an option, I still could have done it by hand. With pilot holes drilled, I used a step bit to enlarge the holes to ½” which will be a snug fit for the LEDs. This took quite a bit of time and patience, but a jig on my drill press made it much easier.
How to Assemble the LED Strings and Power Injection Cable
At this point, I was ready to start assembling the LED strings, but before I pushed each light through the holes I drilled, I fed some 16AWG wire down through each pipe. This will be the wire I will use to inject 5V and GND at each PVC connection point. This ensures a clean and reliable 5V supply along the whole length of lights. Once the power injection cable was running through the PVC, I inserted an LED into each of the 50 holes I drilled, being careful to remove the twist in the wire as I went along. There are different types of LED strings available. Some have different types of connectors at each end to facilitate daisy chaining multiple strings together. Most of them use a 3 pin JST-SM connector which doesn’t have an ingress protection rating, so they aren’t the best to use outside in the weather. The upside is that this style usually has little pigtail wires that are intended for power injection so that is really convenient. Recently I found some LED strings that come with Xconnect style connectors which have an IP65 rating which is significantly better than the JST-SM connectors, but I don’t think they have the power injection pigtails. At any rate, I need to connect my 16AWG power injection cable to the power and ground wires on the terminating end of the string. I do this by striping a short length of the wire and using solder-sealed heat shrink connectors. I could inject power at both ends, but if I’m connecting two strings, that would mean two injection points close together and that would be unnecessarily redundant. Just injecting power at the terminating end of each string means that it can inject power for itself or any strings that come after it.
Time to Install the LED Strings to my House
When I installed these LEDs on my previous house, I learned a valuable lesson. I was using a style of PVC clip that slips over the pipe and screws into the roof. This meant that I needed to hold the pipe with one hand and try to drill and screw in the bracket with the other, and it was very difficult. This time around I found a style of PVC bracket that can be installed first, and then the PVC pipe is snapped into (or out of) place without disturbing the bracket. This simplifies installation tremendously! Once I installed the brackets, I snapped the first LED PVC pipe in place. From there I went one by one around the roofline of my house installing LED strings until it was complete. As I mentioned before the LED strings need to be installed in a certain direction. There is an input side and an output side for the data signal, and they must be connected in the right orientation otherwise they will not work.
Hub and Spoke Model
I planned ahead to determine where all my LED strings were going to start and stop. I tried to have a central hub from which strings will travel outward. My central hub happened to be near my front door, which is also the location of the only power outlet, so that worked out nicely. From there, I have 3 LED segments, one over my garage, one over the roof of my entry, and one over the right side of my house. Each segment has multiple strings with hundreds of LEDs and each segment has a power injection cable running the whole length. I took note of how many LEDs were in each segment because I’ll need to know that information when I set up the ESP8266 D1 mini controllers. Speaking of which, it's time to do that now! I recommend using one controller per segment and keeping the controllers close to the ground so I can access them later if I need to. The ESP8266 microcontrollers can, in theory, control up to 3 different segments. Although controlling more than two is not recommended. In my case, I actually put my entry segment on the same controller as my garage segment because I didn’t want to put a controller way up high on my roof where it would be hard to access. In order to connect the controller to the LED strings, all I needed to do was solder a 3-pin JST SM connector to the 5V, GND, and D4 pins on the board.
Setting Up the Power Supply
Each segment will need to be connected to 5V and GND of the power supply. It’s best to use some crimp connectors when interfacing with the screw terminals on the power supply. Even though my power supply will be under the covered porch, I put everything inside a weatherproof enclosure to protect it from the elements. I used panel mount connectors and cable glands to make everything look nice. With all the segments getting power now, the last thing I need to do is set up the controllers so they can tell the LED strings what to do.
Using WLED for Addressable LEDs
I could have sat down for several days and tried to write firmware to do all the things I want my holiday light display to do, but I didn’t have to, thanks to the work of a developer named Aircookie. They have created a whole custom firmware called WLED, complete with a web server, and everything I could possibly want. It is a very mature and well-documented project and is the go-to firmware for addressable LEDs. I went through the getting started wiki and was up and running in just a few minutes. Seriously. MINUTES! I didn’t have to open the Arduino IDE or anything to flash the firmware. It was dead simple. I got my controllers connected to my wifi and opened up a web browser. All I needed to do was put in the IP address of each controller and a beautiful web interface pops up! Alternatively, I can use the mobile app to see the same interface. After I connected my two controllers to my LED segments I was in business! My whole house lit up for the first time and it was glorious! I spent a good 30 minutes playing around with all the color pallets and various effects found in the WLED interface. Once I settled down from all the excitement, I went into the scheduling interface and set up presets for all the different holidays that I want the lights to come on. This firmware does it all! It will literally apply my Halloween preset on October 1st and turn it off on November 1st. It can do the same for Christmas and New Year’s Eve! Pretty cool! If I wanted to take it a step further, I can use a light show sequencer such as XLights to control my segments. I could, for example, write a sequence where the lights coordinate with a song. There is enough here for me to play with and build upon for years. And that’s the fun thing about this project. I’m having fun even with a basic setup. Over time, I can add things to this display as my budget allows. Yes, this is a DIY solution that may take some tinkering, but you wouldn’t be reading this article if you didn’t like to tinker and make things. Plus, you wouldn’t get the same satisfaction or bragging rights if you went the route of buying an off-the-shelf solution.
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum