Introduction: Arduino Driven 1400 LED Christmas Tree

I purchased a GE pre-lit Christmas tree in 2007. The lighting was composed of custom strings of clear Constant-on incandescent bulbs. Each string included 1, 2 or 3 groups of 49 constant-on bulbs and one fuse bulb in series. There was a total of 1200 bulbs on the tree. When a Constant-on bulb burned out, it shorted itself out so that the other bulbs in the substring would stay lit. The remaining bulbs just burn a little brighter. This is certainly preferred to having a substring of 50 bulbs go black. However, as more bulbs burn out, the stress on the other bulbs increases which reduces their life. In a tree with 1200 bulbs you tend to miss burnt out bulbs. These factors, plus the bulbs just getting older contributed to 'avalanche" type failures in recent years. I've watched a substring all of a sudden get brighter and brighter and in a few seconds all of the bulbs in the substring have burnt out including the fuse bulb. It happens too quick to stop. You just have to keep up with the maintenance on these type trees.

Over the last 7 years, I have replaced about 500 bulbs. In the last 2 years, it became common to replace 50 to 150 bulbs each season. If the tree weren't so beautiful I would have given up on it. Now, however, the thought of an even more beautiful tree, with less maintenance and an opportunity to employ an Arduino Micro to control the LEDs was all the motivation I needed for this project.

The new tree lighting system uses 1416 LEDs that are driven using an Arduino Pro Mini and 9 Adafruit TLC5947 LED driver modules connected in series. The TLCs are driven using the SPI interface. Each of the TLCs has 24 channels of programmable 12 bit PWM output to drive LEDs. The output current on each channel is limited to a maximum of 15 milliamperes. The number of LEDs the TLC channel can drive is a function of the supply voltage (which can be as large as 30 volts for the TLC) and the forward voltages of the LEDs used. The LEDs I used have forward voltages between 1.6 and 2.4 volts. I used a 30 volt power supply to comfortably allow up to 9 LEDs in series.

The tree has 11 nodes along the trunk of the tree where 6 to 8 limbs attach. Each limb is lit using 3 TLC channels. One channel drives a string of red LEDs, one drives a string of green LEDs and the third drives a string of blue LEDs. The topper can be driven by 3 TLC channels. Currently, only one channel is used to drive 9 white LEDs in series.

The diagram shows the interconnection of the Adafruit TLC5947 boards and the Arduino Pro Mini. I put some foam tape on the back of each TLC for insulation. Each TLC is attached to the tree trunk where it is needed using tie wraps.

Step 1: Work Area Was Important

Picture of Work Area Was Important

The project involved a lot of wire prep and soldering. Here is the work area setup in the dining room that I used for several months. The piles of green wires (each about 8" long) were cut from the original tree strings. (It actually took 3 days to unravel and remove the old wiring and 1200 lamps from the tree.)

Step 2: Creating Strings of LEDs and Cables to Connect Them

Picture of Creating Strings of LEDs and Cables to Connect Them

The LEDs were wired into small strings of 5 to 8 LEDs each by color. Each of the 71 limbs on the tree has 3 strings. One is Red. One is Green and one is Blue. The LEDs I used were actually RGB LEDs that I had purchased for another project. Part of my work was to cut off 2 of the leads from each LED to make it a single color. (Not smart, not cheap but I just decided to use what I had).

After the strings were made, I placed a small piece of 3M electrical tape (see cutting board with tape pre-sliced with an knife for use) between the leads of each LED and a 3/4" piece of heat shrink tubing over the bottom part of the LED and the wires.

Each string (loop) of LEDs is connected to the end of a 10 to 20 inch long 2 conductor cable. Three of these cables (red, green and blue) are combined to make up a limb cable. Each of the limb cables connect to a 2x3 pin connector which is used to connect to 3 channels of a TLC..

I used an old, reliable, HP variable DC current limited power supply to test the strings as they were made. I was pleasantly surprised to find that even though the LEDs were heated twice (during soldering and applying the heat shrink tubing) none failed because of the heat.

Step 3: Connecting the Cables From the Limbs

Picture of Connecting the Cables From the Limbs

The 2x3 pin connectors connect to the Adafruit TLC5947 circuit boards. One connector per tree limb. Here the TLC for the very top part of the tree is shown. The cable with the white tape on it goes up to the topper.

Step 4: The Arduino and TLC5947s

Picture of The Arduino and TLC5947s

The project box with the Arduino, 5 volt regulator and other associated components is shown. A 6 wire ribbon cable connects the Arduino to the cable leading to the first TLC.

The infrared sensor is shown coming through the top of the box. I programmed the Arduino to allow me to control the system by entering 2 digit codes. Currently I have about 24 patterns programmed.

The 30 volt power supply connects to the connector shown. I used a Mean Well OWA-120U-30 power supply.

The program for the tree has been posted on GitHub at:


Mic100 (author)2016-01-11

Very nice job Thanks

tomatoskins (author)2015-12-14

So cool! I'd love to see a video of it in action!

FCFahrlander (author)tomatoskins2015-12-16

Thanks for the comment. I plan to post a video soon.