Ambient lighting that responds to the image on your TV is simpler and cheaper than you might think—and it makes your home theater great.
Originally developed for Philip’s TVs in 2002, this feature is still only available on a limited number of models, and as a result, many people have tried to create their own Ambilight that didn’t involve buying a new TV. So far they have been relatively expensive or low resolution (only a few pixels on each edge) — I even made a single pixel version. a few years ago. Now a new generation of affordable programmable LEDs has arrived — and you, too, can create a high-resolution Ambilight clone for as little as $60. Interested?
Step 1: Demo

First, a demonstration of what we do. If you’re curious, Electric Sheep’s 3-hour psych trance journey is the perfect showcase for Ambilight. Of course, not all videos will produce the same pleasing results — many movies are too hazy or are presented in cinema format, resulting in black bars (and therefore no color data). I’ve found better results with bright, vibrant colors in most animations, as well as action movies with complex CGI effects.
At the moment it only works with some computer-side signal processing — so it’s great for things like VLC, Popcorn Time, Kodi (formerly known as XBMC) or PC games. Unfortunately, processing a standard HDMI input is more complicated — at the very least, we’ll need an HDMI splitter and some kind of converter to a more readable analog format. I’ll save that for a future project — it only works with a computer for now.
Step 2: You will need
The parts list is short — there are no complex electronics here:
- Arduino Uno
- 10A 5V power supply
- WS2812B 5m led strip
- Double sided tape (don’t make the same mistake I did — use quality 3M materials)
- Processing set
The main part of this Ambilight clone is a string of individually addressable WS2812B LEDs. Each LED has its own chipset and a single line is used for communication. I bought mine from Aliexpress for $52 including shipping — that was for a 5m coil (150 LEDs), which is more than enough for the largest TVs — and much cheaper per LED than the $50 filament that Adafruit sells. A standalone 5V/10A PSU can be bought for about $10, but I used an old ATX PSU that I previously converted to a desktop one. If you have a huge TV and plan to combine multiple strips because 5 meters is not enough, be sure to determine your exact power requirements at 60mA per LED.
Step 3: Wiring
Let’s test the light first to make sure the power supply is sufficient and the basic link is working. Connect pin 6 from the Arduino to the DIN on the LED strip — your strip should have a tap end at one end, so use a male-to-female jumper. Also connect the GND pin from Arduino to GND on the strip. Don’t try to power the strip on the 5V pin on the Arduino. You will fry the Arduino, very quickly. Instead, use an external 5V power supply. The desktop power supply will happily power an entire 5m test strip (provided you followed our benchtop power supply conversion guide). Calculate at 60 mA per LED; so in my case 114 leds at 60mA is just under 7A. If you think: “7 amps sounds like an awful lot!” This is because it runs at 5 volts — 7 amps at 240 volts would be a lot more!
Note that these bands have a specific direction in which the signal must travel, indicated by the arrows. If you’re connecting multiple strips, you may also need to reconnect the power halfway through to avoid a voltage drop — I’ve found this to be unnecessary with just 5 meters.
Step 4: Upload the Arduino Code and Test
The project has both Arduino and Processing. First make sure you add FastLED to the Arduino libraries directory and then upload this code. Change line 7 for the number of LEDs you have; and if you find that the color profile is broken, change line 47. The strip I purchased uses the WS2812B chipset and the color order is «GRB». See the FastLED documentation on how to calibrate per strip, but the default should be fine if you bought the same LEDs.
Finally, you need the processing components from the Adafruit project code. For testing open Colorswirl.pde . Change the number of LEDs again on line 29; and a serial device on line 44. If the Arduino is the only COM device connected, Serial.list() [0] fit . If not, try Serial.list() [1] . Launch the app and with any luck, your stripes will show off a beautiful swirl of colors.