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.
As I do more and more coding for the Footwell NeoPixels project, my mind started to wander with ideas of what else I could use addressable LEDs for. One such idea is to create an ‘ambilight’ – a backlight for a TV or LCD monitor that reads the color data onscreen and creates a glow around the bezel which matches or ‘extends’ the color to the surrounding wall. The idea is that it adds ambiance (hence the name), though it also helps with eye strain by reducing the contrast between the bright screen and the dark wall behind it. I had put a strip of single-color white LEDs behind my previous monitor and it helped tremendously with eye strain, but I figured if I was going to do the same I may as well take it up a notch.
I keep getting distracted by other projects and ideas, but I wanted to post a brief update on the footwell NeoPixels project. I’ve been working on the data structures and color patterns, but today I wanted to cover something simpler.
For the time being I’m not planning on changing the color of the tC’s interior lighting, which is a nice burnt orange. I’ve toyed back and forth with the idea of replacing the tC’s cubby light and adding a few lights to the cupholders, which on a default setting should match the rest of the lighting. This gives us today’s problem: how do we match the NeoPixel’s color with the other LEDs?
Although Adafruit has an excellent guide on getting started, I thought I would include a short post on using their library for RGB or RGBW strips. This already assumes you’ve got your strip hooked up to an Arduino and have successfully run one of the library’s example sketches. If not, read up on Adafruit’s basic connections tutorial.
Multicolor LED strips generally come in two flavors – solid color and addressable. Solid color strips, as the name implies, have all of their LEDs display the same color. Addressable strips on the other hand allow you to control the color value of every individual LED in the strip. The most popular individually-addressable LEDs on the market at the moment are Adafruit Industries’ NeoPixels, based on the WS2182 chipset. They come in a variety of physical packages including strips, rings, and matrices.
While the final version of the footwell NeoPixel project calls for a long strip of ~60 pixels, most of my time is going to be split between programming at my desk and testing the pixels’ response to telemetry from the car. I didn’t want to have to wrangle a large strip every time I wanted to test an idea, and I figured most of the patterns for the 60 pixel strip could be replicated on a shorter one.
My solution is this small prototyping board. It’s a 3D printed part with mounts for an Arduino Uno, a small breadboard, and a NeoPixel stick. The NeoPixel stick is a nifty PCB with 8 of the same type of RGBW leds as the strip I plan to use, and includes input/output pads and a resistor for the data line. The breadboard lets me wire a 1000µF capacitor to protect the pixels from voltage spikes and allows me to hook up a second power supply if I’m reaching the power limits of the Arduino (which I should note is absolutely possible if you’re using all of the pixels at full brightness).