(Currently a work in progress)
My definitive guide to DIY Christmas lights with Arduino, Vixen and WS2811 RGB LEDs
Planning and design
First things first, we want to get a picture of our house, this will allow us to layout a design we are trying to achieve, and using something as simple as Paint we can draw lines where LEDs or props may go.
Be sure to keep an untouched copy of your house, as we can also use this in Vixen Lights to overlay a demo show over (more to come on this topic)
Once you've drawn out where you would like to have LEDs/lights, the next step is to take physical measurements of each spot, such as gutters, roof lines etc. Where ever you want your lights, this will allow us to plan for LED counts and lengths.
In our outline lighting example, we going to use WS2811 RGB LEDs, these are 12v LEDs and the ones I used were spaced 2.5 inches apart (the description states 2.7-2.9 inch spacing, but we utilize them with 2.5 inch spaced mounting strips.)
500 pack of WS2811 RGB LEDs - 12v
To mount these LEDs to the house, I used a few items;
PixNode mounting strips with 2.5 inch spacing
LED Pixel Pliers (these make a world of difference when pushing all of the LEDs into the mounting strips)
For mounting them to the house, I used either 3M Command Strips or Eyelet Screws and secured them together with a mix of 4 inch Zip ties and 8 inch Zip ties.
Taking the measurements for each strip of LEDs, measure them out onto the PixNode strips, adjusting where you need to considering the 2.5 inch spacing of the LEDs.
BE SURE to pay attention and mark or label what end of the LED strand is the input, and if you have to join more LEDs together, pay attention to the side that is the input.
For joining LEDs and LED strands to make 1 strip, as well as attaching the water proof connection ends, I used several types and sizes of water proof heat shrink.
2mm 3:1 shrink for small individual wires
8mm 3:1 shrink for medium bundles of wires or connectors
3/8ths inch 3:1 shrink for larger wires and bundles
as well as some water proof butt splice connections
Lastly, to complete each strand of LEDs I used the following waterproof connections;
BTF Lighting small 3 Pin water proof LED connector
Please bear in mind, this may not be an industry standard for compatibility with other systems or devices, just what I happened to pick at the time when I was setting up my display.
In my setup, I used the female end as the LED input and male end as the LED output, I followed this through all strands, props, extension wires and amps. Doing this simplifies connectivity and keeps things in order.
A few notes on LED strands, mounting and planning out your display;
The WS2811 RBG LEDs work while wired in series, the output of strand 1 goes into strand 2 and so on.
Keeping this into consideration when deciding where the initial input signal will start and how the wiring will go from there.
You want the shortest possible wires and extension cables, I've had success with an initial 20 foot run from the controller to the first strand of LEDs but your results may vary.
Extension cables, or a jumper cable from 1 strand to the next to continue the signal, needs to be very short. I've run into several issues trying to carry the signal too far from the prior set of LEDs.
Though I've had better success with this using these "F-Amps" I found, that boost the LEDs data signal for longer runs.
You want to try and stay around or below 400 LEDs in total per "group". Each group will have their own controller and you want to avoid issues with transfer speeds, or power.
You want to consider power injection. You'll be adding a power feed about every 200 LEDs or so.
In my setup, shown here, I have 3 groups of LEDs to make up my outline, each group contains around 300 LEDs. I feed 12v power into the start and end of each group of strands.
Again, take into consideration the flow of data from 1 strand to another as you are making your layout / design.
Controllers
Outside of the actual lights themselves, you need a controller to tell the LEDs what to do or turn them off and on. A "show player" tells the controller what the lights should do, the controller the spits that out to the LEDs and they light up as desired. There are several options for both Show Players as well as controllers.
For simplicity and cost, I currently use an Arduino for each of my controllers and depending on the job determines what version of Arduino I am using.
Arduino MEGA - Relay / Power plug controller
Arduino Nano - Small groups of LEDs 150 or less
Arduino Uno - Larger groups of LEDs 200-400+ (Largest I've tested is 410)
The reasoning behind the Arduino choices, is primarily the Serial port speeds each could handle. This drastically impacts the performance of the LEDs and your display, too many LEDs on an Arduino with a slow max Serial port speed will not perform well and look fairly bad.
The Arduino MEGA for relay and power plug box controls 32 relays to turn off/on 32 power plugs for old school Christmas light strands. I use the added I/O pins to control these relays.
I've only tested the max Serial port speed of 115,200. But this is fast enough for 32 plugs.
The Arduino Nano, was originally for price and size. I was able to get away with Generic Nano's to run small groups of LEDs 20-100 or so and get decent performance.
The max Serial port speed I've been able to get from the Nano's, including the official Arduino versions, is 115,200. This is fine for a small group of LEDs, but you will get very choppy and slow performance and updates with higher LED counts.
The Arduino UNO R3 is what I'm using for larger groups of LEDs, I've tested up to 410 LEDs in 1 group in my setup, with great success.
The max Serial port speed I've been able to use with these is 921,600, and makes a world of difference in display performance.
The software I use on the Arduino, can be grabbed from out downloads section here
Vixen-Duino WS2811 RGB
This code should be modified for the desired Serial port connection speed as well as the LED count each controller will be handling, and then flashed to your Arduino of choice.
For the Traditional Christmas light strands that use standard power plugs and just turn off and on, this is where the Arduino MEGA comes into play.
I've coupled the MEGA with 2 16 channel relay banks. The MEGA then turns the relays off and on, that in turn power a bank of standard wall outlets.
2x SaintSmart 16 channel relay modules
Wiring the Arduino MEGA consisted of connecting Pins 22 - 53 to each individual relay on the modules. I use the relays to control the hot wire coming into each power outlet, and in turn I ran a common Ground and Neutral wire to each outlet.
In retrospect I could have used 16 outlets for a total of 32 channels, rather than 32 total outlet modules with 2 plugs each.
A quick note around the relay modules and Arduino code, the mechanical relays used in the module as well as the code, do not support dimming.
For dimming support, it would require new code as well as Solid State relays, I plan on looking into this in the future to upgrade my current setup.
Arduino code for the relay modules can be found in our Download section, here
Vixen-Duino Relays
I then tossed together a "make shift" controller board to clean everything up a bit, I used M2.5 screws and standoffs to mount the Arduino devices to the board.
The USB hub used can be found here
LED Power
For powering my set of RGB LEDs, I try and run power every 200 LEDs or so. Thus for the most past I run power into the start of an LED strand chain, as well as into the end of the LED strand chain. In my experience, for around 400 LEDs or less this seems to be sufficient.
The LEDs used in my setup each use 0.3 Watts, and you will want to size your power supply needs accordingly. It's actually best to stay in the range of 75%-80% utilization or lower on each power supply.
I use sever 12v 40 amp 500 Watt power supplies in my setup;
I utilized terminal blocks off of each power supply to clean things up abit and make connectivity easier.
I'll admit, this may not be the best choice for outdoor Winter wiring, but this is what I use to run power to the LED strands.
18AWG 2 Conductor Jacketed LED Power Wire
LED Power Supply mounting bracket from my Thingiverse Profile
<place holder>
hi there
is there any way to save sequences on a sd card and use them without pc ?
with xlights or vixen
hi there
is there any way to save sequences on a sd card and use them without pc ?
with xlights or vixen
I've written code for the Arduinos before that do static effects. But nothing set to music as the code would be very lengthy and a pain to do.
If you use something like Falcon Pi Player to store and play the shows, you can save them from Vixen and store them on an SD card and play them from a Raspberry Pi
First of all, I want to thank you for probably the best tutorials for the average Joe who's just about to "test the waters". There is certainly no shortage of tutorials on the web for building a Christmas light show control system, but the hundreds I looked at before I found your's all seem to fall short, and leave out the details that anyone can understand. Even though they all pretend to cater to the novice, they all seem to start using jargon that we just haven't learned yet.
I've been in IT for nearly 40 years, and have much education and experience in electrical & electronics. But this whole LED, and in particular addressable LED jargon is still Greek to me, when I visit some of these websites, I feel like I just stepped off the plane in Laos and there isn't another English speaking human for a hundred miles around.
That being said, I'm toying with the idea of using either multiple Arduino UNO R3's/Mega's or multiple ESPixelStick's/ESP8266 NodeMCU's and send the shows directly from a PC or Raspberry Pi.
Questions:
How do you "play" the shows on the Arduino's or ESPixelStick's? Do you send it via USB, Serial, or over the network to the individual IPs of the Arduino/ESPixelStick's?
Do you have any experience with ESPixelStick's or ESP8266's?
I'm assuming when you used the Raspberry Pi to send the shows, you upload the shows from Vixen/Xlights on your PC to FPP on the Pi, and then from FPP to the multiple drivers.
And when you switched to just using the PC, you sent the shows from Vixen straight to the drivers, correct?
I'm sure I'll be a frequent flyer here on your site as I learn the ropes.
Thanks in advance for any help !!
John
First of all, I want to thank you for probably the best tutorials for the average Joe who's just about to "test the waters". There is certainly no shortage of tutorials on the web for building a Christmas light show control system, but the hundreds I looked at before I found your's all seem to fall short, and leave out the details that anyone can understand. Even though they all pretend to cater to the novice, they all seem to start using jargon that we just haven't learned yet.
I've been in IT for nearly 40 years, and have much education and experience in electrical & electronics. But this whole LED, and in particular addressable LED jargon is still Greek to me, when I visit some of these websites, I feel like I just stepped off the plane in Laos and there isn't another English speaking human for a hundred miles around.
That being said, I'm toying with the idea of using either multiple Arduino UNO R3's/Mega's or multiple ESPixelStick's/ESP8266 NodeMCU's and send the shows directly from a PC or Raspberry Pi.
Questions:
How do you "play" the shows on the Arduino's or ESPixelStick's? Do you send it via USB, Serial, or over the network to the individual IPs of the Arduino/ESPixelStick's?
Do you have any experience with ESPixelStick's or ESP8266's?
I'm assuming when you used the Raspberry Pi to send the shows, you upload the shows from Vixen/Xlights on your PC to FPP on the Pi, and then from FPP to the multiple drivers.
And when you switched to just using the PC, you sent the shows from Vixen straight to the drivers, correct?
I'm sure I'll be a frequent flyer here on your site as I learn the ropes.
Thanks in advance for any help !!
John
John,
Thanks for reaching out! (Please keep in mind my guide is still a work in progress. Every time I go to update it, I get caught up in dealing with setting up the lights and then I'm burnt out lol)
To answer your questions,
I mainly use Arduino UNO's for the show, this is due to the higher supported serial speeds vs. things like the Mega and Nano.
To play the show using either Vixen Lights or the Pi with Falcon Pi Player, I configure the Arduino devices as generic serial controllers
One of the issues I am starting to run into with multiple serial connected Arduinos and very long (20-30ft) connections running from the Arduinos (in the garage) to the elements or props. Eventually items go out of sync with the controller and I have to reboot the Arduino. This issue is new for me this year, as I think I've outgrown using this method.
I have tried running longer USB cables to the Arduino devices, and having the Arduino closer to the prop/element. But I had issues there as well. The only situation where this has worked for me is with my Arduino Mega that controls the 32 power outlets for old school strand lights (non RGB). I have a 50ft USB running to the control box in the yard.
If this was changed over to TCP/IP with an Ethernet hat for the Arduino, it may work a ton better, but I currently have no code for this. I am looking into the E1.31 protocol for next year, rather than Generic controllers. This still may be possible with Arduino and an Ethernet Hat.
As for the ESP8266 and or PixelSticks, I have not messed with the Pixel Sticks. Though I have started to use ESPs for some other projects I have such as the "CandiStick". It is possible to use the ESP as a generic serial controller, I'm just not sure the max serial port speed you can get from them.
When I used the Raspberry Pi, correct, I create the "Show" on the PC with Vixen Lights, I save the file and upload it to FPP. FPP at that point then streams the data to the Arduinos, it's a real time data stream that is sent to them to control the lights.
And correct as well, for the PC version, Vixen lights would send the data stream directly to the controllers.
The only reason I went back to using the PC as the "show player" is due to the controllers randomly falling out of sync, a reboot was required on the Pi, and the COM Port numbers for each Arduino would change, messing up the show and mixing the incorrect controller with the incorrect Prop. Again this is not an issue when using TCP/IP with things like E1.31, only when using the Arduino as a generic serial controller.
I hope that answers your current questions, and I'm sure it opens the door for more. Please let me know if you have any more, and I'll be sure to update as I slowly transition to E1.31 for next years light show.
Thanks for the quick reply.
Since all my hardware is just a pile of Arduino's, Raspberry's, ESPixelsticks on my desk and still in the boxes they came in, it's premature for me to test any methods of controlling the LED's.
But, your replies have given me a better idea of which path to take going forward. I figure I have nearly a year to put everything into practice for Christmas 2021.
My main concern at this time is to make sure I don't waste months barking up the wrong tree, only to find out I need to go back to square one.
Based on your comments, it sounds like I now have the building blocks I need to go forward, slowly, but definitely forward.
I'll try absorbing your comments and your great information provided throughout the website to keep moving and as you suspected I'm sure new questions will be popping up.
Thanks again, and have a Very Merry Christmas and New Years.
BTW I enjoyed your YouTube videos of this years displays.
Thanks for the quick reply.
Since all my hardware is just a pile of Arduino's, Raspberry's, ESPixelsticks on my desk and still in the boxes they came in, it's premature for me to test any methods of controlling the LED's.
But, your replies have given me a better idea of which path to take going forward. I figure I have nearly a year to put everything into practice for Christmas 2021.
My main concern at this time is to make sure I don't waste months barking up the wrong tree, only to find out I need to go back to square one.
Based on your comments, it sounds like I now have the building blocks I need to go forward, slowly, but definitely forward.
I'll try absorbing your comments and your great information provided throughout the website to keep moving and as you suspected I'm sure new questions will be popping up.
Thanks again, and have a Very Merry Christmas and New Years.
BTW I enjoyed your YouTube videos of this years displays.
Merry Christmas to you as well! And a Happy New Year.
I have found several E1.31 code examples on google, to still utilize the Arduino Hardware.
First of the year I plan on pulling a couple arduinos out of my setup and working on this new code / protocol and seeing if I can convert my current hardware to utilize the protocol.
I will be logging my work here, as well as providing any code I come up with and issues I encouter.
I would love to see the progress of your setup as well, and can hopefully bounce some ideas back and forth.
Thank you