Introduction: Permanent Digital LED House Holiday Lighting V2

About: A Maker since childhood with all the classic symptoms, a robot builder, and an Internet software CTO/Tech Product Manager.

This project is a re-do of my previous permanent holiday lighting setup. After 5 years, we had our roof replaced, and I had to take down all the previous lighting. I was working with some WS2811 LED strands and liked their waterproofing and thicker wires for better power distribution, so I decided to switch to those.

I looked at a lot of projects for house LED lighting, and did not quite like the other techniques. The WS2812b strips in channels are very unobtrusive and neat, but require a lot of soldering right at the strips. I tried some of the plastic WS2811 strand holding strips, but for my project, I needed more rigidity since I am hanging them under the eaves. I was reluctant to use the PVC pipe system since these are more permanent.

So, I came up with a system that is easy to make and install using angle aluminum.

One huge advantage of this approach is that once all the holes are drilled, the LEDs quickly snap right into them.

I also tried to make the connections as simple as possible so it's easier to take down and fix any sections.

Programming is as before, although much simpler now. I had an Arduino Mega + WiFi shield five years ago, and that is all replaced with a single ESP8266 D1 Mini! You can also use modules like an Arduino Nano to do stand alone programs and just snap them in for the event or season.

Step 1: Parts

1" x 1" angle aluminum - with 2" LED spacing, you need 2" x the number of LEDs per section.

WS2811 LED strands. I used black wire ones since my roof line is black.

D1 Mini (or Arduino Nano for stand alone only. The D1 Mini can be used either way). The Nano link is setup for soldering, but for a no-solder approach for this project, see this Instructable. Note that the Nano will be limited to about 200 LEDs due to it's memory size - the D1 Mini has a lot more RAM.

JST connectors - since you will be cutting the strands, some new connectors may be needed.

330 ohm resistor. See the CPU step, but this is essential to prevent flickering - is used inline with the data pin on the CPU. You only need one of these.

5v Power Supply. There are many ways to do this. In my case, I had outlets at one end and in the middle, so I used (3) 10 amp ones, but many people use a single bigger one and power injection wiring. There are many discussions of power requirements for "Neopixels" (WS2811, WS2812b) online, but a 10 amp supply is good for at least 166 LEDs even with all of them on at full white.

1" Cup Hooks - these screw into the eaves to hang the sections. I had brass ones and painted them black, but these are already painted.

Screw eyes - these attach to the angle aluminum to hang the sections. I painted these black along with the sections.

Lever Nuts are not required, but make connecting wires very easy!

2.1mm CCTV connectors are not required, but are great for prototyping.

Step 2: Mechanical Assembly

I decided to use 2" spacing for the LED strands. That was close enough that the wires reached, and far enough to require less drilling. You could make them closer.

For each section (assuming the 2" spacing), you will need 2" x the number of LEDs of angle aluminum.

To make the holes:

- Mark the hole location with a tape measure, starting at 1" and going every 2". Since the sections start and end at 1", putting two sections side by side maintains that 2" spacing. I used a combination square to mark the centers of the holes from the sides. I started with the trick where you measure it from each side, then the center was in the middle, but found that adjusting it just right made the marking quicker.

- Punch the hole locations. I really like a spring punch for that - you just push and it snaps down.

- Drill the holes with a smaller drill bit - I used a 3/16" pilot point bit - that stays in the punched hole nicely.

- For the bigger holes, I very strongly recommend a step drill bit. If you try to use a large drill bit, it will tend to grab the material and make a dangerous mess. I used step drill that went up in 1/32" increments, so I marked the last 1/2" one with a black marker since I wanted to stop at 15/32" for the holes that the LEDs fit in. Technically, the LEDs fit in a 12mm hole, so you could also use a metric step drill.

- I used a deburring bit on the holes. I had to use it in a rotating fashion to have it work right.

I painted my sections black since the eaves on my house are black.

Step 3: Hanging the Strips

To hang the strips, I used cup hooks about every 4 feet. So, two in the shorter sections and three in the longer ones. I started by putting the cup hooks in the eaves, then marking on the sections where they go. I drilled a 7/16" hole and screwed the eye screw into the metal just a few turns. The screw eyes are steel, so they make their own threads in the softer angle aluminum. They seem to hold well enough.

The main trick is keeping the LEDs facing straight forward, and with the wires sticking out the back, drilling the hole for the screw eye as close to the front as possible helps. Even with that, they generally tilt slightly up, but are still very visible. Any tilt is unnoticeable from the street and yard. There is probably a better way to do this, but the cup hooks are easy to mount and make removal very easy.

Step 4: Power Injection

There are many discussions of LED Power Injection out there, so I will not go into too much detail. The gist is that there is some inherent voltage drop across the strips or strands. This makes the ones further from the power source dimmer. This is more noticeable with all the LEDs on, which is generally rare. If you are only using one color (red, green, or blue) at a time, or have less LEDs on at a time, the issue is much less apparent.

Note that lack of power generally just results in dimmer LEDs unless the power drop is really bad in some sections. If you see flickering, I found that to be more an issue of electronic ringing in the data line, and that fix is very easy - see the CPU step for that information.

The good news is that you can add more power wiring to improve that. Just take the output of the 5v supply and run extra wires to a couple points in the strand.

I decided to test the LEDs I had to see how obvious the power issues were. The WS2811 strands have 22 gauge wiring. I used 18 gauge power wiring (the white wires in the pictures).

In the pictures, each row is a 50 LED strand connected together, so there are 200 LEDs total in the first three pictures and 150 LEDs in the last one. For all the tests, the LEDs were driven to full on "white" - all three red, green, and blue LEDs on at once.

For the first picture, I only had power at the first LED - the lower right of the picture. You can see that they fade pretty quickly, and even look red at the end.

For the second picture, I connected the same power supply to the first and 100th LED. You can still see the fading at the end.

For the third picture, I connected power at the first and last (200th) LED. This is better, but there is some fading in the middle. Not pictured, but I added a third injection in the middle, and they all seemed fine.

The last picture is three strands powered at the beginning and end, and they all seem equally bright.

So, I divided up all the strands into subsets of 150 LEDs or less (mine were 129, 113, and 96), and powered them near the beginning and end of each section. That is one nice thing - you do not have to power them exactly at the beginning and end - power will flow in either direction. For that longer section, I may add a middle power injection point.

Once I had all my LEDs up, the colorful holiday displays looked great. I tested them with an all white full on pattern, and noticed a couple areas that could use more power distribution. I may add those or not bother since the LEDs are never on full white.

Step 5: Wiring

I decided to use the three conductor JST connectors already on the strands (+5v, Gnd, and Data). They are not waterproof, but the project was much simpler by using the built in connectors, and most of my connections are under the roof line. This setup has been though several rainstorms with no issues, and my 5 year old project used them and they were still fine.

So, I only needed to add JST connectors where I cut them off to get the right number of LEDs for each strand.

I also made a couple JST extension cords for a few segments that were not directly adjacent.

I decided to break the power line between the three power supplies to avoid any conflict between them, so I made short couplers that only carried the data and ground wires. They were used in two places since I have three power supplies/sections. They can easily be moved or removed.

My previous setup had the power injection lines integral with the strip connectors. For this project, though, I wanted to simplify things and allow for sections to be removed fairly easily. So, keeping the built-in connectors on the strips was useful, as well as running separate power cables and connectors. You can see a few variations on power connections in the pictures above. I use 2.1mm CCTV connectors a lot for testing since they are so easy to add and move. They can be easily unplugged for repairs etc. I also like the lever nut connectors, and you can see some in the pictures. Both connector systems are super easy since there is no soldering, and both can be quickly disconnected. Neither is waterproof, though, but as with the strands, the connections are mostly under the roof line. I think I will gravitate to the lever nuts for simplicity, but am not sure right now.

In my old setup, I used "Dean's" T-style connectors for some of the power connections. Those are popular in the RC industry. They required soldering to add to the wires. I found them to be very hard to pull apart after a few years of corrosion and squirrels chewing on them.

For running the power wires, ideally they can be separated from the sections easily for repairs etc. Zip tying them to the sections would work, but would make removal harder. Weaving them between the LED wires works, but would have to be un-woven for repairs. Then I realized I can just pop out an LED every few inches and capture the wire. That should make removal easy - just pop out a few of the LEDs to separate.

Step 6: New CPU and Code

It's amazing how fast things have changed in 5 years! Back then I used an Arduino Mega to allow for the memory required for the LEDs (had 600 then), and needed a separate WiFi shield for the internet connectivity. All of that has been replaced with a single D1 Mini ESP8266 module at fraction of the cost. That module has a lot more memory, runs faster (not needed), and has WiFi built in. All of the libraries I used for the LEDs and network were ported for the ESP8266 years ago.

For stand alone use, a D1 Mini, Arduino Nano etc. can be used. I like the D1 Mini and Nano since they are so compact. Note that the Nano will be limited to about 200 LEDs due to it's memory size - the D1 Mini has a lot more RAM.

For a network connected system, the D1 Mini is needed. There are other ESP8266 formats like the NodeMCU one, but the D1 Mini is more compact and you only need one data pin.

In the picture above, four options are shown: A D1 Mini with and without soldering, and and Arduino Nano with and without soldering.

In all cases, a ~330 ohm resistor should be used inline with the data pin to the LEDs. This prevents electronic ringing in the circuit, which shows up as flickering in the LED strands. Sometimes it shows up and sometimes not, but that simple resistor clears it up nicely.

The pictures of the D1 mini have the resistor under the shrink wrap. I need to add the resistors to the Nanos - they were from another project that did not seem to have flickering problems.

The CPU needs to be connected to the first LED in the system - each LED passes the commands down the line. Remember that power is not essential at the first LED - can be anywhere in the strand since the power lines work in both directions.

Make it Glow Contest

Participated in the
Make it Glow Contest