How To Make Your Own Light Show
DIY LED Light Show
First I have so many people to thank for their help with
this project. Homey Da Clown, Fritz42, Pshort, Gorak, and many more helped me
figure out how to make the project work. For information on Arduino, look it up on the
web, Vixen Lights is free software that you can download. DIY Christmas is a
great forum to use as a resource. They have forums on Vixen and even some on
using Arduino with Vixen. As you will see, I am no electrician, but want to
explain how I did this project for others that might be a bit intimidated. I
say that if you don’t know what to fear about failure helps you charge
headstrong into the unknown. You might even learn something.
My goal last year was to have several discreet channels of
led spotlights that I could dim and turn on and off with some spooky sounds. I
had no idea where to start. I basically wanted a Light-O-Rama setup on the
cheap and DIY. If you didn’t know LOR setups can cost thousands of dollars. I
also wanted to power spotlights that would be lighting my props, not strings of
lights facing my audience. I wanted something much more subtle. I know, an
animated light show to Thriller isn’t very subtle, but I had to do it after all
my hard work. I was directed to Vixen
Lights and really wanted to do an Arduino project. Be warned, do not try this
project if you don’t have patience and you are willing to work the bugs out of
your system. Trust me, one wrong thing in your code (sketch in Arduino) can
throw everything off. OK, let’s get started.
What you’ll need:
Computer
Vixen Lights Download
Arduino and all downloads including SoftPWM Library (All
found at the Arduino website)
USB cable to connect to computer
Breadboard
Jumper wires
12 Volt Wall Wart
Misc LEDs and resistors (for testing)
Pre Wired 12 Volt LEDs (to be used in homemade spotlights,
there are several examples on the internet)
Low voltage landscaping wire or speaker cable
Project Enclosure (I used an old plastic tool box)
Soldering Gun and Solder
Heat Shrink Tubing or Liquid Electrical Tape
I spent about $250 (excluding the computer and soldering
gun)
The first set up I did was with bare LEDs and resistors all
powered off the Arduino. The Arduino can power several LEDs on its 5Volt output
so this is a great way to make sure your setup is working properly with Vixen.
The wall wart became necessary later on down the line when each “channel”
coming out of the Arduino had 40-80 LEDs on them. For initial testing one LED
will represent one channel of potentially many LEDs. Figure 1 shows the diagram
of the initial set up.
You will need to have the Arduino up and running. I’d like
to suggest doing some of their simple sketches to get used to working with it.
The key to this project working is making use of the SoftPWM library. Pulse
Width Modulation is what makes the Arduino able to dim an LED, without it you
can really only do on and off. Arduino has limited PWM outputs, and the library
and sketch make any of the digital outputs capable of dimming an LED. Download
the SoftPWM library and add it to your Arduino Library. Note: the SoftPWM
library has an arbitrary limit to the number of channels in its file. I had to
change that number to 30 to work for me. Make sure all the files are changed so
that it works to suit your needs.
Here is my Sketch for 30 output channels:
#include <SoftPWM.h>
#include <SoftPWM_timer.h>
/*
sftPWM with
*/
void setup()
{
// Initialize Serial
Serial.begin(9600); // set up
Serial at 9600 bps
// Initialize SoftPWM
SoftPWMBegin();
// Create and set pins for PWM
use and turn them off
SoftPWMSet(22, 0);
SoftPWMSet(23, 0);
SoftPWMSet(24, 0);
SoftPWMSet(25, 0);
SoftPWMSet(26, 0);
SoftPWMSet(27, 0);
SoftPWMSet(28, 0);
SoftPWMSet(29, 0);
SoftPWMSet(30, 0);
SoftPWMSet(31, 0);
SoftPWMSet(32, 0);
SoftPWMSet(33, 0);
SoftPWMSet(34, 0);
SoftPWMSet(35, 0);
SoftPWMSet(36, 0);
SoftPWMSet(37, 0);
SoftPWMSet(38, 0);
SoftPWMSet(39, 0);
SoftPWMSet(40, 0);
SoftPWMSet(41, 0);
SoftPWMSet(42, 0);
SoftPWMSet(43, 0);
SoftPWMSet(44, 0);
SoftPWMSet(45, 0);
SoftPWMSet(46, 0);
SoftPWMSet(47, 0);
SoftPWMSet(48, 0);
SoftPWMSet(49, 0);
SoftPWMSet(50, 0);
SoftPWMSet(51, 0);
}
// Initialize Loop counter
int i = 0;
// Set array to store the 30
values from the serial port
int incomingByte[30];
void loop()
{ // 30 channels are coming in
to the Arduino
if (Serial.available() >= 30)
{
// read the oldest byte in the
serial buffer:
for (int i=0; i<30; i++) {
// read each byte
incomingByte[i] = Serial.read();
}
SoftPWMSet(22, incomingByte[0]);
// Write current values to LED pins
SoftPWMSet(23, incomingByte[1]);
// Write current values to LED pins
SoftPWMSet(24, incomingByte[2]);
// Write current values to LED pins
SoftPWMSet(25, incomingByte[3]);
// Write current values to LED pins
SoftPWMSet(26, incomingByte[4]);
// Write current values to LED pins
SoftPWMSet(27, incomingByte[5]);
// Write current values to LED pins
SoftPWMSet(28, incomingByte[6]);
// Write current values to LED pins
SoftPWMSet(29, incomingByte[7]);
// Write current values to LED pins
SoftPWMSet(30, incomingByte[8]);
// Write current values to LED pins
SoftPWMSet(31, incomingByte[9]);
// Write current values to LED pins
SoftPWMSet(32,
incomingByte[10]); // Write current values to LED pins
SoftPWMSet(33,
incomingByte[11]); // Write current values to LED pins
SoftPWMSet(34,
incomingByte[12]); // Write current values to LED pins
SoftPWMSet(35,
incomingByte[13]); // Write current values to LED pins
SoftPWMSet(36,
incomingByte[14]); // Write current values to LED pins
SoftPWMSet(37, incomingByte[15]);
// Write current values to LED pins
SoftPWMSet(38,
incomingByte[16]); // Write current values to LED pins
SoftPWMSet(39,
incomingByte[17]); // Write current values to LED pins
SoftPWMSet(40,
incomingByte[18]); // Write current values to LED pins
SoftPWMSet(41,
incomingByte[19]); // Write current values to LED pins
SoftPWMSet(42,
incomingByte[20]); // Write current values to LED pins
SoftPWMSet(43,
incomingByte[21]); // Write current values to LED pins
SoftPWMSet(44,
incomingByte[22]); // Write current values to LED pins
SoftPWMSet(45,
incomingByte[23]); // Write current values to LED pins
SoftPWMSet(46,
incomingByte[24]); // Write current values to LED pins
SoftPWMSet(47,
incomingByte[25]); // Write current values to LED pins
SoftPWMSet(48, incomingByte[26]);
// Write current values to LED pins
SoftPWMSet(49,
incomingByte[27]); // Write current values to LED pins
SoftPWMSet(50,
incomingByte[28]); // Write current values to LED pins
SoftPWMSet(51,
incomingByte[29]); // Write current values to LED pins
}}
So let’s say you have all this together and you are working
in Vixen. Vixen is pretty user friendly, but if you run into errors, the DIY
Christmas Forum usually has the answers for those problems. It will take some
time working with the serial ports and figuring them out. I used a baud rate of
9600bps and that seems to work fine. Spend some time getting used to Vixen, once
you master its idiosyncrasies, it is a handy tool.
Now for the actual yard haunt project with 12 Volt LED
spotlights. The Arduino can’t power 12 Volt lights, so a wall wart comes in
handy. You’ll have to cut the connector end off and identify the positive and
negative wires. The beauty of the low voltage is that it is much safer and
easier to work with. Also needed is a 7
Darlington array (part number ULN2003 or ULN2004). These allow us to use the
wall wart to power the LEDs. Each ULN2003/4 will handle 7 channels of
output. Figure 2 shows how the 12 Volt
project is wired.
The other attachments are photos of my original project from
2011. It isn’t pretty, but it worked. If you plan on doing this, start early
and have several dress rehearsals to avoid mishaps on the big night.
This is Figure 2 below. The little green line represents a prewired 12 volt LED, the black thing with the red and black lines coming out of it is a 12V wall wart.
Comments
Post a Comment