Introduction: Arduino Light Display With Vixen

Picture of Arduino Light Display With Vixen
I will show you how to create your own computerized light show!!  If you have any questions or comments feel free to post.




  A few options are;

  • LOR ( Light-O-Rama
  • Vixen Lights
Most of these light shows have a big setup cost for the software and hardware. However they are a much easier setup. The vixen lights is free but will take some foot or should I say finger work but if you are up for it it will be well worth it. I chose to use vixen lights and I have already done all of the searching and will share all of this with you in one spot. So grab some snacks and a drink and get ready to learn. I decided to use the arduino as the hardware controller, but there are many supported hardware options. 

Step 1: Things Needed

Picture of Things Needed
  • Vixen lights program
  • Arduino ( I'll assume you know how to use one )
  • Relay board or if you choose to build one click here  for my build info
  • Female cord ends ( I found some on ebay ) But the ones on LoghtORama web site are longer.
  • Plastic enclosure (see pic)
  • Computer

Step 2: The Software

Vixen lights software;

First things first. Download the software from here I am using version Now keep in mind some of the sequences will not work across different versions.  On the link above be sure to read the page and what to install first and so on. After download is complete extract files and check the box that says " show extracted files "  to a location you will remember. When the extracted files appear right click on the vixen deer and select send to desktop. ( This will allow for fast access ) 

Step 3: Set Up a Sequence

Set up a sequence, This is how the show is created!

Click on the vixen deer icon, you will see a grey screen with a tool bar on the top. ( it may ask if you would like to upgrade, answer no )
  • On the top left tool bar, click on SEQUENCE, then NEW EVENT SEQUENCE, then VIXEN STANDARD SEQUENCE.
  • A window will open ( New Sequence Wizard )
  • Click next,( Event Period )
  • then next again, ( Profile )
  • Click on Profile Manager button. A new window will open ( Profiles )
  • Click on the blue (+) new window will open ( New Profile )
  • Type the name of your choice and click OK. A new window will open ( Edit a Profile )
  • Chose how many channels you wish to have. ( for this instructable choose 16 and click add ) on the left side
  • Click on the box with 4 color square,  new window will open ( Channel Colors )
  • Click new color a new window will open ( Color ) here you will select 16 colors of your choice.
  • On the  ( Channel Colors ) window you can drag the colors on the right to the channels on the left of your choice.
  • When done click OK.
  • on the  ( Edit a profile ) window click on Output Plugins. New window will open ( Sequence Plugin Mapping )
  • Select Generic Serial from the left menu and click on use.
  • Now click on the Generic Serial in the box on the right then click on ( plugin Setup ) under channel numbers.
  • A new window will open (Setup )
  • Select a com port that your arduino uses and a baud rate of 9600.
  • Click on OK.  
  • Then Click done.
  • Then done again. ( New Sequence Wizard window)
  • Click on the  NONE drop down menu and select the profile you created.  
  • Then click Create  it.  
  • A ( Save as ) window will open.
  • Type the same profile name here. 

Step 4: Create a Sequence

We will now build the show! This is where you can get as creative as you want.
  • Open vixen
  • Click on Sequence (top left)
  • Choose " open an event sequence "
  • Click on the one you created ( sequence will open )
 Once the sequence opens you will see all of the channels open.

Add Music

To add music;
  • Click on the box with only a music note ( top of page )
  • Click on Assign audio 
  • pick through your audio files and select one of your liking
  • Click OK
Now all you have to do is play the audio and click on the boxes till they turn the color you choose for each channel.
An empty box means this channel will be off. A colored box means this channel will be on. You can select several boxes and right click and choose on. This will make things a bit faster. 

Be sure to save your work often in case it crashes. 

Step 5: Schedule a Show

With vixen open;
  • Choose " Programs " from the tool bar
  • Select " Manage " a new box will open ( Program Management )
  • Under the " Programs " section click on the blue +  a new box will open
  • Enter a name of the new program
  • Click OK
  • Select the program you just created ( in the middle box ) it will turn blue
  • Click and drag sequence(s) from the far left menu ( available sequences ) to the far right menu ( program event sequences )
  • Under " Test " make sure the " use program's plugin setup " is selected
  • click ok ( box will close )
Time to Schedule;
  • Click on " Programs" on the tool bar
  • Click on Schedule ( Scheduler will open )
  • Choose the view you prefer 
  • Pick a day and double click ( Timer will open )
  • Chose " Select Program " ( chose program you created )
  • chose the " Execution start "  you would like ( day and time )
  • Click " repeat "  ( if you want this option )
  • Under " Recurrence "  choose your preference ( how often, then start date and end date )
  • click OK

Step 6: Hardware

Picture of Hardware

The arduino: Keep in mind that when using the arduino with vixen that the channels will be off by 2. Example channel 1 in vixen will operate pin 2 on the arduino. This is due to the fact that pin 0 and pin 1 is a TX RX and will not work with this set up. It's best to make a note to put with the equipment so that you will remember this.

There are some choices on hardware. I chose the most simple option to get started. A regular relay board I built. The only down fall is it's just a on/off option. Vixen can do fading but this will require a more advanced relay board. This may be in my future and will add info here when ready.

You can see my relay board layout on my other instructable.  The arduino sends the on off signal to each relay that in turn will make the lights go BLINKY BLINKY.

I used the same method but a more narrow board so I could fit it the the box I chose. I used and orbit outdoor sprinkler timer box. It's rigid and the size I needed. 

Step 7: The Arduino Code

The arduino code is very simple. This current setup uses 15 channels but to add more is very easy. I actuality tested a arduino mega and ran 52 channels with no problems. 

You can use more than one arduino. All you have to do is add the same exact code to both arduinos. Then in vixen add a second controller to your profile section. Then open each controller and choose which channels you want to go to each arduino keeping in mind each arduino will need to be assigned a different com port.

Adding more channels:Read below or see video.

To add more channels simply add the new lines in each section just increasing the line number by 1. you must also change the number of total channels in the 3 sections of command line. You also have to go into vixen open the profile you will be using then choose the controller and change the amount of channels you will be using.

int A = 2;
int B = 3;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int G = 8;
int H = 9;
int I = 10;
int J = 11;
int K = 12;
int L = 13;
int M = A0;
int N = A1;
int O = A2;

int i = 0;
int incomingByte[15];

void setup()

  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(H, OUTPUT);
  pinMode(I, OUTPUT);
  pinMode(J, OUTPUT);
  pinMode(K, OUTPUT);
  pinMode(L, OUTPUT);
  pinMode(M, OUTPUT);
  pinMode(N, OUTPUT);
  pinMode(O, OUTPUT);


void loop()
  if (Serial.available() >= 15)
    for (int i=0; i<15;i++)
      incomingByte[i] =;
    }                                       // Arduino pins
    digitalWrite(A, incomingByte[0]);  // Pin 2
    digitalWrite(B, incomingByte[1]);  // Pin 3
    digitalWrite(C, incomingByte[2]);  // Pin 4
    digitalWrite(D, incomingByte[3]);  // Pin 5
    digitalWrite(E, incomingByte[4]);  // Pin 6
    digitalWrite(F, incomingByte[5]);  // Pin 7
    digitalWrite(G, incomingByte[6]);  // Pin 8
    digitalWrite(H, incomingByte[7]);  // Pin 9
    digitalWrite(I, incomingByte[8]);  // Pin 10
    digitalWrite(J, incomingByte[9]);  // Pin 11
    digitalWrite(K, incomingByte[10]); // Pin 12
    digitalWrite(L, incomingByte[11]); // Pin 13
    digitalWrite(M, incomingByte[12]); // Pin A0
    digitalWrite(N, incomingByte[13]); // Pin A1
    digitalWrite(O, incomingByte[14]); // Pin A2


Roverchippy (author)2017-10-16

I used this tutorial to create a dancing water fountain. Not quite finished yet, but working well!


wirenut1980 (author)Roverchippy2017-10-17

Thank you for the post. The fountain looks great!

resjsu (author)2017-07-24

Do you have a diagram of the wiring on the arduino?

wirenut1980 (author)resjsu2017-07-26

The relay board in this instructable is the one I built and used in my first non computer controlled display with an arduino. It will give all the wiring details. Just remember to follow the code and arduino pins used on this page. Hope this helps. Let me know If I can help more.

VarleyG (author)2017-03-24

How many channels can I control with Arduino and vixen?

wirenut1980 (author)VarleyG2017-07-25

Not 100% sure. But I did a test and had 3 arduinos connected individually and ran around 48 channels.

PersogliaSandro (author)2017-03-13

I used this to control my Animatronic Dog! :-) Thanks for posting!

Thats an awesome use! I'm glad it was able to help. Thank you for the comment!

ThomasK177 (author)2016-12-18

Hi, i was wondering how the lights run off it as arduino outputs 5v only

wirenut1980 (author)ThomasK1772016-12-18

The arduino 5v signals triggers a transistor and in turn triggers a relay. The relay then switches the higher voltages.

ThomasK177 (author)wirenut19802016-12-18

so it makes 5v to 240v

wirenut1980 (author)ThomasK1772016-12-18

Here is an article to help

wirenut1980 (author)ThomasK1772016-12-18

Yes, as long as you use the relay that is properly suited for the voltages you will be controlling.

Tres101 (author)2016-12-18

I am running the Arduino Mega with 2 8 channel SSR high trigger cards and using Vixen 2.1. Everything works great when I play individual sequence's but when I try to run the as a program the first one plays and the I get an error message that says in part "Unhandled exception has occured in your application" Invalid Argument=Value of -1 is not valid for index Parameter" and my com port closes. I have to shut down to open it up again.

wirenut1980 (author)Tres1012016-12-18

What windows version are you using? Some arduinos models wont work to well with Windows 10.

tomthebot (author)2016-12-15

when i have my light show set up and try to execute my light show, the controller sets off lights incorrectly. for example if i set it up so only one light will go off the controller sets one light off at a time in a scrolling fashion instead of just the one that i had hoped would go off.

tomthebot (author)tomthebot2016-12-15

never mind it was just that the program had to many out puts written into it

aakhtar1 (author)2016-02-09

Hello I'm new to vixen. I made the sequence, I used the code on arduino. and i'm using 3 channels for now. Can somebody tell me how do I execute the whole process??
I made the sequence on a song now I want to turn my lights on that particular sequence, how do I tell arduino to do that??

wirenut1980 (author)aakhtar12016-02-10

I need some more details.

What version of Vixen are you using?

How do you have the arduino connected to the computer?

Even though you are only using 3 channels on vixen the total channel count in the arduino code needs to match the vixen channel output.

Post the code you have loaded on the arduino and post a few screen shots of the vixen setup you are using like the channel set up, port set up. This should help me get started on where you are at.

ScottW93 (author)2016-01-23

Awesome job !!! I stumbled across this while researching ssr's for light control. This will be my first year animating lights to music. Actually got a pro mini to run a couple strands of pixels, but bought a commercial controller for the pixels due to the fact I'd need so many of the arduinos to run the whole show it just wouldnt be worth it. I still plan on using a few for the further elements from the main controller though. I also wanted to incorporate some 120v stuff that I will try to run with the arduinos. This gives me a great place to start. Mainly using the pro minis because I got 20 of them for about $1.10 each, but we will see where it goes by the time Christmas rolls around again. Just ordered some ssr boards, will see what happens.

wirenut1980 (author)ScottW932016-01-31

Thank you! I will be more then happy to help as much as i can. I would also happy to hear your projects updates as you make progress.

FR0DEAUX (author)2015-12-15

Very nice setup, Im interested in what type of plastic enclosure you are using. Could you provide some information about it? Thanks Again !

eightbittrip made it! (author)2015-02-23

awesome project! I love mine and I plan on using it for many years to come. I also purchased a high power fm transmitter so traffic can hear the music. I have videos of it too.

otsep (author)eightbittrip2015-11-09

I really like your set. Do you have any additional details on how you put it together? I'd like to build one for the holidays.

62bailey (author)2015-01-07

i have the vixonlight i am using the sainsmart 16 ch. 12v powerd sepertly and weating on theftdi 5v breakout yhanks

wirenut1980 (author)62bailey2015-01-11

Try this code; BobP2 posted this in the comments below, he supplied this to help with better control. I modified it a bit to fit the 16 channel set up you are going for. Load it into the arduino and let me know from there any additional help you need.

const int numChannels = 16;
// List Arduino pins in Channel number order
int channels[numChannels] = {2,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2,A3};
int incomingByte[numChannels];

void setup()

for(int i = 0; i < numChannels; i++){
pinMode(channels[i], OUTPUT);
// Start with lights turned off


void loop()
if (Serial.available() >= numChannels)
for (int i=0; i<numChannels;i++)
incomingByte[i] =;

for(int i = 0; i < numChannels; i++)
//digitalWrite(channels[i], incomingByte[i]);
digitalWrite(channels[i], 255-incomingByte[i]);


62bailey (author)wirenut19802015-02-15

wirenut1980 is there a random codr i can put in wit the sketch i got fron you thanks john

wirenut1980 (author)62bailey2015-02-20

With the code provided it takes the data from vixen and converts it to an output. If you were to try to add a random there wouldn't be a way to have it both ways. When vixen isn't sending data to the arduino it has no way of knowing when this happens and so has no way to fire off a random sequence. I have seen others ask the same question and get the same answer I have given.

62bailey (author)2015-02-06

thanks wirenut 1980 john

62bailey (author)2015-02-06

is there or can i ad a random mod to use when the vixen is not runnihg thanks for the help

62bailey (author)2015-01-22

is there a place to go for help on vixen that is not over my head found some but not user frendly am trying to use vixen thanks hor the help

wirenut1980 (author)62bailey2015-01-22

Every thing I have/are learning about vixen is from you can search the wiki and forum. You can also post a question by searching the forum for your specific topic then adding a new thread. Everyone there is very helpful.

kgiri (author)2015-01-21

62bailey (author)2015-01-17


62bailey (author)2015-01-05

hi i have the mega 2560 i am in need of the program to work with the 16 ch relay board. i have the vixonlight in my comp. thanks

wirenut1980 (author)62bailey2015-01-06

Thank you for viewing. I need to gather some more info. What version of vixen lights are you using? What type of relay board are you using?

BobP2 (author)2014-12-17

Thanks for the instructable. Google got me here when I was trying to fix a problem. Since this helped, I'd thought it only polite to give back. Two details. First, I rewrote the Arduino code similar to Expert Noob. Second, my Sainsmart relays (3 x 8 relays/board) is reversed from the Arduino pins (0 is On, 1 is Off) so the code below accounts this. A side note, in an ON/OFF situation, Vixen sends either a 0 or a 255. Hopefully, this code will help others.

In this code, there are 24 relays, but I left the 15 relay code commented. To change from 15 to 24 relays, only two lines need to be changed (the number of relays and the actual pins used). To change too reversed relays, another two lines need to change.

//const int numChannels = 15;
const int numChannels = 24;
// List Arduino pins in Channel number order
//int channels[numChannels] = {2,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2};
int channels[numChannels] = {22,24,26,28,30,32,34,36,23,25,27,29,31,33,35,37,40,42,44,46,48,50,52,54};
int incomingByte[numChannels];

void setup()

for(int i = 0; i < numChannels; i++){
pinMode(channels[i], OUTPUT);
// Start with lights turned off


void loop()
if (Serial.available() >= numChannels)
for (int i=0; i<numChannels;i++)
incomingByte[i] =;

for(int i = 0; i < numChannels; i++)
//digitalWrite(channels[i], incomingByte[i]);
digitalWrite(channels[i], 255-incomingByte[i]);


wirenut1980 (author)BobP22014-12-18

Glad my instructable helped. Thank you for the post of the code as this will help many others. The reason sites like this exist is to help people by giving a starting point from there new ideas are created and re shared. This means things can only get better.

jdestinb (author)2014-11-25

I ordered an arduino uno R3 and I have 8 relays. What do i need to plug in to the arduino uno from the relays and what kind of code do i need to use to make this work in vixen. I am really new at this and really need some help. Any would be greatly appreciated. I really need to know what programs need to be open when running vixen and where do i need to put in the code.

wirenut1980 (author)jdestinb2014-11-25

I need a few details before I can help. Have you read the information on how to program the arduino? Have you had a chance to fully read the information in this instructable? What kind of relays are you using? Are they individual with pins on the bottom no board, individual with a small circuit board on them, or combined on a single circuit board. It would be helpful if you could post the information for the relays. Post a pictures of the relays as well.

michael.finch3 (author)2014-11-05

I made a setup similar to this using the Arduino Mega 2560 and a 16 channel relay board. I used the code from this article, but when I program my lights in Vixen 2 when the lights are supposed to be off, they are on, and when they are suppose to be on, they are off. I know I can just program it the way I want and then select invert, but is there something easy that I messed up somewhere along the line?

sounds like you have inverted relays: High is off, Low is on. You might want to switch your wires on the relays if they are on NO to NC or from NC to NO depending on how that is set up. The Arduino code can also be re written (probably easiest if things are already build). In the past, I have had to switch HIGH with LOW, however this code has none of that so a "not" or ! will be needed somewhere. I'll see If I cant rewrite this code as I progress through this process.

Try this code on the arduino, also only the first few lines need to be changed in order to compensate for more or less channels.... Notice the ! I added before the last 'incomingByte[i]'?

int ledPin[] = {

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3 };

int pinCount = 16;

int incomingByte[16];

void setup()



for (int i = 0; i < pinCount; i++) {

pinMode(ledPin[i], OUTPUT);

digitalWrite(ledPin[i], HIGH);



void loop()


if (Serial.available() >= pinCount)


for (int i=0; i < pinCount; i++)


incomingByte[i] =;


for (int i = 0; i < pinCount; i++) {

digitalWrite(ledPin[i], !incomingByte[i]);




Thank you for viewing. That is a weird thing to happen. If you can reply with a few pictures of your set up including the relay board so I can see what might be going on here.

It's not exactly the same design since I used an already built relay board, but the code is essentially the same. I just used all of the digital pins instead of the PWM pins. Let me know if you see something obvious that I'm doing wrong. Thanks!

The relay board you are using utilizes 12v relays. From what I can see from the picture you are trying to power the relay board from the arduino? is this correct? The arduino supplies 5v+. This is simply not enough power for 1 relay let alone 16. This could damage the arduino. My suggestion is to connect a ground wire from the relay to the arduino and then connect a 12v wall wart to the relay board. The arduino and relay board should share the same ground.

I do have 12 volts powering the relay board. It's not exactly clear in the picture, but I have a separate power source for it. Once plugged in the relay board and arduino are both on. Since the USB cable also supplies power to the arduino, should I not have power (jumper wires) going from 5V on the arduino to the relay board? Right now I have the 16 digital I/O pins from the arduino to the relay board. Also i have a jumper wire going from a 5V pin on the arduino to a 5V pin on the relay board. Same thing with the ground. Maybe that's the issue?

That could be an issue. It doesn't hurt to try to remove the 5v+ but leave the ground from the arduino and relay board an see what happens.

wirenut1980 (author)wirenut19802014-11-13

It's a little hard to fully make out the wiring. I put together a simple diagram. please refer to it to see if you have wired your setup the same and let me know.

ebrough (author)2014-09-28

The video is no longer valid :(

About This Instructable




More by wirenut1980:Garden storage Wet ShelfTalking Pumpkin CostumeArduino Light Display With Vixen
Add instructable to: