The first step in taking the Arduino-based ‘ambilight’ from concept to completion is to modify the LED strip so it fits nicely around the monitor. Like most addressable LEDs, the 5m roll I’m using has cut lines where you can trim it. Because each pixel is its own self-contained circuit, you can arrange them in any shape or number you can think of so long as you connect the three wires: power, ground, and data.
This post is part of a series on creating a DIY ambilight using Adalight and WS2812B LEDs. Check out the project page here.
To start I disconnected the monitor and laid it face-down on a soft towel. I unrolled part of my WS2812B strip and started measuring. The plan is to leave about a half inch between the LEDs and the monitor edge, to account for wires and light spill. The easiest way to arrange the strips is end-to-end, leaving a gap in the corners for the wires. I wanted an LED in the corner, so I took the slightly more difficult path of having the edges butt up against each-other with the side strips as the primaries.
On my 24″ monitor, I’m using 7 LEDs on each side of the bottom edge, 18 LEDs on each side (including the corners), and a single 30 LED strip along the top. This gives me a nice round number of 80 total LEDs. (In hindsight I probably should have used one fewer LED for each of the bottom strips and then added an anchor for strain relief on the cables. More on that later.)
Once I had all of my strips cut, the next step was to take off the waterproof sheathing. The roll I ordered uses IP67 waterproofing, where the LED strip is encased in a silicone tube. I didn’t need the waterproofing for this project, but it’s easy to remove and the price was the same. I wouldn’t recommend keeping the waterproofing regardless – the silicone makes the strip difficult to mount, blocks some of the light output, and prevents the strips from staying flat. The strip is loosely sitting inside the sheathing, so a firm pull is all you need to separate them. I ended up cutting off the first pixel with the sealed end because the sealant would be difficult to remove and I would have to re-solder the ends to remove the power leads anyways.
Before soldering, make absolutely sure the data direction is correct. For my setup the data direction runs counter-clockwise when viewing from the front, which is the same direction the default Prismatik config goes. Here’s a trick for soldering: only the data wire has to be in-line! Both the power and ground wires can run from anywhere on the strip. In fact: if you’re running a long strip, it’s best to apply power to various points along the strip to prevent voltage drops. To avoid overlaps, I ran the power wire to the next row over and the ground wire from the previous row on the source strip.
After each segment was soldered I tested the setup using an Uno and a FastLED test sketch to make sure the connections were solid. In my research I also discovered that the 3-pin JST connectors that are sold with all of these strips are only rated to handle a maximum of 3 amps (!!!). For a 5m strip that can use up to 18 amps at full brightness, that’s a scary thought. For this small 80 pixel setup, the max load it will ever see is 5 amps (80 pixels * 3 diodes per pixel * 20 mA), and after calibration it’s likely to never be close to that. Still, it’s better to err on the safe side so I put a second JST connector on the end of strip for power. Make sure you are using a power supply that can handle the load, you cannot run these LEDs at full power using the Arduino or USB power. Don’t break things, use an adequate 5V power supply. I’m using this 10A power supply, which is a little overkill for this project.
Once everything has been cut and soldered, it’s time to attach the LEDs to the monitor. I used some 10mm 3M tape with 300LSE acrylic adhesive which holds great and shouldn’t be too difficult to remove if I ever need to replace the LEDs.
And just like that, we’re up and running!