Banner

Wednesday, March 21, 2012

DIY light show controller with Vixen and Arduino

Back in 2005, I saw Christmas light show and was instantly obsessed. It was well beyond my comprehension at the time but I vowed to one day do something like it.

Fast forward six years to Christmas 2011 and I finally met that goal. Because light-o-rama setups are quite expensive and I wanted a real challenge, I decided to try to build the entire setup from scratch.

I went into this knowing I wanted to use Vixen, as it seemed to be the best free option for light show controlling. The next step was to find a controller to work with it. Being a big Arduino fan, it seemed only logical to start there. I found some scraps of code on doityourselfchristmas.com, and I was off to a good start.


My final setup was Vixen outputting from my MacBook Pro (bootcamped) to the Arduino via Vixen's "generic serial driver". My code in the Arduino broke the serial stream into pins, which then ran to the relay board. The 5VDC from the Arduino would trigger a transistor (and LED), which would then trigger a 12VDC relay on the relay board. This completed the circuit on a homemade 110VAC power strip causing each light to light up. The result...


I was pretty proud, I have a couple other songs on my youtube channel. Still, it has quite a bit of evolving to do. I am making some revisions for next year that I wish I thought of in the initial design. Mainly, make several, smaller relay boards to place at strategic spots and run the signal lines. This is much cheaper and safer than my ridiculous method of a central control with 110VAC lines running all over the place.
 
Another thing to think about is multiplexing the signal line rather than breaking into pins at a central controller. If each relay satellite had a small micro-controller and a method of addressing, you could just spam the serial stream to each and have them decide what to take and what to ignore.

Most importantly, I desperately need PWM to get the lights to fade. I encourage anybody thinking about this project keeping this all in mind as it would have saved me a lot of money in the long-run. How much you ask?

My cost breakdown was roughly as follows:
Vixen Software - Free
Arduino Mega - $60
Relay Board Materials - $100
Outlet Power Strip Materials - $20
Lights - $150
Extension Cords - $200

Yup, the most expensive item were the extension cords. A reel of CAT5 could have replaced 90% of that if I would have thought to run signal wires in length instead of power. Wal-Mart did allow me to get 1500 feet of extension cords in 15' stretches for that price though. And I needed it.



Please don't call the fire dept on me...

If you're looking to do something like this, here is my Arduino code:
int C1 = 2;
int C2 = 3;
int C3 = 4;
int C4 = 5;
int C5 = 6;
int C6 = 7;
int C7 = 8;
int C8 = 9;
int i = 0;
int incomingByte[8];

void setup()
{
  Serial.begin(9600);
  pinMode(C1, OUTPUT);
  pinMode(C2, OUTPUT);
  pinMode(C3, OUTPUT);
  pinMode(C4, OUTPUT);
  pinMode(C5, OUTPUT);
  pinMode(C6, OUTPUT);
  pinMode(C7, OUTPUT);
  pinMode(C8, OUTPUT);
}

void loop()
{
  if (Serial.available() >= 8) {
    for (int i=0; i<=8; i++)
    {
      incomingByte[i] = Serial.read();
    }
    analogWrite(C1, incomingByte[0]);
    analogWrite(C2, incomingByte[1]);
    analogWrite(C3, incomingByte[2]);
    analogWrite(C4, incomingByte[3]);
    analogWrite(C5, incomingByte[4]);
    analogWrite(C6, incomingByte[5]);
    analogWrite(C7, incomingByte[6]);
    analogWrite(C8, incomingByte[7]);
  }
}

As a bonus, here is a poorly cut video showing different views of the setup:

Special thanks to:
Ashley - Motivation and wire debuncher
Josh - Relay board design and assembly
Peter - Uber debugger
Tyler - Light man (no fear of heights)
John - Fix lights that fell off man
Couldn't have happened without all of you.