Instructables
loading
loading
Picture of Arduino Christmas Light Controller
relay.JPG
If you liked this instructable, consider checking out my new website www.TheSiliconJunkie.com

You've probably seen all those videos where people make there christmas lights dance to music, you think to your self wow that looks realy cool.... i could never do that. WELL... you can the idea is actually quite simple.
WHATS A RELAY?
a relay is a component that can be used to control large amounts of voltage or current with just a small voltage, it does this by using that small voltage (5 volts in our case) to create a magnetic feild that will pull a switch type object to connect the larger current (120 volts in our case). Image 2 is a diagram on how a relay works





 
Remove these adsRemove these ads by Signing Up

Step 1: Supplies

• 1x Arduino
• 1x Protoshield/ breadboard
8x 5v DC relays »»»  search.digikey.com/scripts/DkSearch/dksus.dll
• 8x 1N4004 diodes »»» search.digikey.com/scripts/DkSearch/dksus.dll
• 8x 2N2222 transistors »»» search.digikey.com/scripts/DkSearch/dksus.dll
• 8x 1K (Brown,Black,Red) ohm resistor (radio shack)
• 1x double/single sided PCB (radioshack)
• 1x sharpie
• 16x nuts and bolts (discuss size later)
• 8x dead sets of lights (for there male plugs)
• 500 ft of 5 strand cable
• a set of connector things
• some wire and some other stuff that you should have
• a place to display your light show
• and a some what knowledge of making pcb's

LETS BEGIN SHALL WE


Step 2:

Picture of
Once you have all your parts i started out by testing one relay on a bread board
1. Put all the components in acourding to the scematic (image 1)
2. Open the arduino program and goto open>digital>Blink
3. Upload it to your arduino
4. Connect where it says arduino pin on the schematic to digital pin 13

if all works well then its time to multiply that by 8 on a pcb

1-40 of 100Next »
markgrecowork2 months ago
Thanks for the fun learning experience
15, 10:06 AM.jpg
Secret FoodR2 months ago

thanks.

http://secretfood.net/

62bailey3 months ago

thanks for the help thanks know can all of you help on lurning vixenLights not good at this and need some help thanks

62bailey3 months ago

thanks am trying it can not get to upload varify is ok

CJHurlbert3 months ago

Actually, I just wrote this for Jingle Bells. I added a speaker to play the music, and wrote it into functions to cut the size down.

Chris H

***copy below this line and paste directly into a new Sketch****

int noteA = 2;
int noteB = 3;
int noteC = 4;
int noteD = 5;
int noteE = 6;
int noteF = 7;
int noteG = 8;
int beat = 9;
int spkr = 10;

int w = 2500;
int h = 1250;
int q = 625;
int e = 312;
int s = 156;
int ts = 78;

int midC = 262;
int midD = 294;
int midE = 330;
int midF = 370; //sharp
int midG = 392;
int upA = 440;
int upB = 494;
int upC = 523;
int upD = 587;
int upE = 659;
int upF = 740; //sharp
int upG = 784;

void setup(){
for (int x = 2; x < 11; x++) {
pinMode(x, OUTPUT);
}
}

void loop(){
for ( int x = 2; x < 10; x++) {
digitalWrite(x, HIGH);
delay(e);
}

for ( int x = 2; x < 10; x++) {
digitalWrite(x, LOW);
}
// measure 1
playBeat( noteD, midD, e );
play( noteB, upB, e );
play( noteA, upA, e );
play( noteG, midG, e );
playBeat( noteD, midD, q+e-10 );
delay(10);
play( noteD, midD, ts-10 );
delay(10);
play( noteD, midD, ts-10 );
delay(10);

// measure 2
playBeat( noteD, midD, e );
play( noteB, upB, e );
play( noteA, upA, e );
play( noteG, midG, e );
playBeat( noteE, midE, q+e );
delay(e);

// measure 3
playBeat( noteE, midE, e );
play( noteC, upC, e );
play( noteB, upB, e );
play( noteA, upA, e );
playBeat( noteF, midF, q+e );
delay(e);

// measure 4
playBeat( noteD, upD, e-10 );
delay(10);
play( noteD, upD, e );
play( noteC, upC, e );
play( noteA, upA, e );

digitalWrite(noteB, HIGH);
digitalWrite(beat, HIGH);
tone(spkr, upB, q);
delay(q);
digitalWrite(beat, LOW);
digitalWrite(noteG, HIGH);
tone(spkr, midG);
delay(q);
digitalWrite(noteB, LOW);
digitalWrite(noteG, LOW);
noTone(spkr);

// measure 5
playBeat(noteD, midD, e );
play( noteB, upB, e );
play( noteA, upA, e );
play( noteG, midG, e );
playBeat( noteD, midD, q+e );
delay(e);

// measure 6
playBeat( noteD, midD, e );
play( noteB, upB, e );
play( noteA, upA, e );
play( noteG, midG, e );
playBeat( noteE, midE, q+e-10 );
delay(10);
play( noteE, midE, e-10 );
delay(10);

// measure 7
playBeat( noteE, midE, e );
play( noteC, upC, e );
play( noteB, upB, e );
play( noteA, upA, e );
playBeat( noteD, upD, e-10 );
delay(10);
play( noteD, upD, e-10 );
delay(10);
play( noteD, upD, e-10 );
delay(10);
play( noteD, upD, e );

// measure 8
playBeat( noteE, upE, e );
play( noteD, upD, e );
play( noteC, upC, e );
play( noteA, upA, e );
playBeat( noteG, midG, q+e );
delay(e);

// measure 9
playBeat( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, q-10 );
delay(10);
playBeat( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, q-10 );
delay(10);

// measure 10
playBeat( noteB, upB, e );
play( noteD, upD, e );
play( noteG, midG, e+s );
play( noteA, upA, s );
playBeat( noteB, upB, q+e );
delay(e);

// measure 11
playBeat( noteC, upC, e-10 );
delay(10);
play( noteC, upC, e-10 );
delay(10);
play( noteC, upC, e+s-10 );
delay(10);
play( noteC, upC, s-10 );
delay(10);
playBeat( noteC, upC, e );
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, s-10 );
delay(10);
play( noteB, upB, s-10 );
delay(10);

// measure 12
playBeat( noteB, upB, e );
play( noteA, upA, e-10 );
delay(10);
play( noteA, upA, e );
play( noteB, upB, e );
playBeat( noteA, upA, q );
play( noteD, upD, q );

// measure 13
playBeat( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, q-10 );
delay(10);
playBeat( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, q-10 );
delay(10);

// measure 14
playBeat( noteB, upB, e );
play( noteD, upD, e );
play( noteG, midG, e+s );
play( noteA, upA, s );
playBeat( noteB, upB, q+e );
delay(e);

// measure 15
playBeat( noteC, upC, e-10 );
delay(10);
play( noteC, upC, e-10 );
delay(10);
play( noteC, upC, e+s-10 );
delay(10);
play( noteC, upC, s-10 );
delay(10);
playBeat( noteC, upC, e );
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, e-10 );
delay(10);
play( noteB, upB, s-10 );
delay(10);
play( noteB, upB, s );

// measure 16
playBeat( noteD, upD, e-10 );
delay(10);
play( noteD, upD, e );
play( noteC, upC, e );
play( noteA, upA, e );
playBeat( noteG, midG, q+e );
}

void play(int light, int note, int length ){
digitalWrite( light, HIGH );
tone( spkr, note );
delay( length );
digitalWrite( light, LOW );
noTone( spkr );
}
void playBeat(int light, int note, int length ){
digitalWrite( light, HIGH );
digitalWrite( beat, HIGH);
tone( spkr, note );
delay( length );
digitalWrite( light, LOW );
digitalWrite( beat, LOW );
noTone( spkr );
}

62bailey3 months ago

i need the one jingle bells can yoh help thanks john

eartaker1 year ago
Awesome, If you go to do this again you can save money and time by buying the 8 relay board on amazon for $12... I got tired of making my own relay boards... Code works awesome.
sotm eartaker1 year ago
Please provide the link?
mrv777 sotm1 year ago

I'm guessing he is referencing this one:

http://www.amazon.com/Kootek-Channel-Module-Arduino-Raspberry/dp/B00C8O9KHA

Dumb-Brit1 year ago
Hi
In the fashion of the Brits, we're ages behind in this sort of stuff but it is something I would love to have a play with. As I am a complete nooooob in all of this stuff, can I ask a silly question and hopefully get an answer? In part 3 making a pcb, there is a picture of the pcb fully soldered, any chance of putting labels on which soldered part represents which component? I'm having a hard time working out what the schematic should actually look like in reference to the top (if that makes sense). Cheers, Rob
MDheliMech1 year ago
After seeing another instructable similar to this I learned about the sainsmart relay modules. Everything is put together and it's cheaper than DIY.
Please provide the link.
The website is sainsmart.com and look for relay boards. I did however end up following this instructable rather than buying the pre made board because I wanted the experience. I did not however do the Copper board I used pre drilled breadboard and soldered the components together. It worked for the most part however I had some difficulty with my seeed studio music shield that I couldn't seem to work out
sotm1 year ago
How did you connect 8 relays to only the 6 outputs the Arduino has?
I am by no means an arduino expert. I can tell you from my experience arduino has more than 6 outputs. It has something more like 14 digital pins however I don't remember exactly. 2 of them I never use. Pin 0 and 1 are the comm pins. The rest if the digital pins I believe are 3 to 13 which can be digital in or out. There are 6 analog I/O pins which I normally use for inputs. I have experience with the arduino uno, nano, and pro mini, which all have this same configuration. The best bet would be to check out the arduino website to be sure.
jimdsouza1 year ago
Can I solder instead of etching? The voltage supply in my country is 220V 50Hz. Will the solder take so much current?
JKPieGuy1 year ago
Just wondering, instead of using crimps and vinyl electrical tape, why didn't you use wire nuts? They do make wire nuts that are designed to withstand the harshness of the outdoors.
MDheliMech1 year ago
Did you bring power in to your relays from 1 power outlet (wall socket) or multiple? Is there a problem running that many lights on one circuit?
MDheliMech1 year ago
Here is my setup so far. Arduino nano controlling LEDs which represent the relays, also controlling an Arduino UNO with an mp3 shield
13, 3:19 AM.jpg
MDheliMech1 year ago
In order to figure out delays for my project I used audacity. It is a free audio editor that allows you to see a point in a song down to the millisecond. Find two points where you want events to happen and subtract one from the other. That will be the delay.
MDheliMech1 year ago
Thank you for this tutorial. I am in the breadboard stage of my build. I will be using the relay circuit with an arduino as you demonstrated. My variation however uses an MP3 player that is also controlled by the arduino. This allows for the music and the light sequence to be played in sync every time. Unfortunately because I want events to happen at specific times I have to write the delays out in the sketch as you did. I will also have multiple songs each with its own individual sequence. I hope to include pics and videos soon.
espongy1 year ago
Hi! Was the 120 volts based on your socket voltage? What if we have 220V? Thanks!
PoisonMondo2 years ago
Your project is fantastic but i was looking to do it with a different song and i was wondering if there was any particular way you worked out the delays? (maybe a push button you tap to the beat and records the delay?)
dany32412 (author)  PoisonMondo2 years ago
I took a sort of brute force and ignorance approach. I simply sat down and played the song, and wrote out all the delays by hand. The down side to this is that i really can't play the music through speaker or something, so all i did was overlay it onto the video.
JLeith2 years ago
Hello dany32412,

I'm 100% new to Arduino world but I would like to enhance my Christmas yard display I have been building the display for 30 yrs and now that I have retirement time I thought I would look into making the display a little more active.
I like your project for Christmas Light Controller and the addition of the Vixen Software.
I’m not sure which Arduino you used ?
When I look at the Arduino UNO it indicts 6 outputs and your project uses 8 ports ? unless I’m reading the spec sheet wrong.
I have just entered the world of programming a PIC for a baseball scoreboard and now I have time to look into the world of Arduino.
John
Hopefully someone will still this even though its been awhile. I'm trying to hook up some christmas lights to my arduino using your same circuit schematics. When I hook it up on the breadboard the relay clicks for when the blinks should occur but the lights do not blink or go on at all. Any ideas for what's going on?
sorry for the late reply.Do the lights light up when you short the terminals you connected to the relay, If they don't then they are not powered correctly, if they do then there is a problem with the relay/relay board
Blakamiss482 years ago
Just want to say thanks! Followed your design and worked great. Set this up last Christmas(2011) to go with our christmas display.

Boards and wires picture
http://i.imgur.com/3kqOE.jpg

Video of the light show
https://www.facebook.com/v/10151069334010611
Also used vixen to create the sequencing.
rpdthree3 years ago
Out of curiosity, have you thought of ways to dim the lights? I am fairly new to the Arduino platform and electrical engineering in general, but would it be possible to use some sort of digital potentiometer instad of the relays?

If not, do you have an ideas on how to easily dim the lights?
dany32412 (author)  rpdthree3 years ago
I would say that you can't dim incandescent bulbs (like the ones i used), but you could probably dim the new LED ones. You could swap out the relays for some high powered transistors, and send some PWM (Pulse Width Modulation) signals to it. I'm not sure if that would work or not, but theoretically it should. If anyone knows more about this, or can disprove me, please post.
Yes, you can dim lights as well as LEDs by using PWM. The only thing intrinsic to this project that would require a rethink is that relays aren't suited for driving PWM circuits. You would have to consider solid state switching options using something like a transistor or FET. For switching higher voltages it's a good idea to use opto-isolation to the uC.
pclever3 years ago
Hello, I didn't use the resistors on my pcb and everything works well unless there is more than 3 relays on. Can the arduiono only power 3 relays, or did I need the resistors?
dany32412 (author)  pclever3 years ago
I would recommend putting the relays on a seperate power source, and just control that feed with a transistor. That's what the board was intended for, but i was stupid, and just got the 5v from the arduino's regulator. Goodwill will have plenty of extra "wall warts", just make sure it's rated for minimum 1A. Hope this helps.
pclever3 years ago
Sorry, I found out that if I add more voltage it fixes the problem, but now the arduino is getting very hot. Is this a problem?
dany32412 (author)  pclever3 years ago
yes, that is a problem. Sorry back then i was stupid, and should have ran the relays off of a seperate power supply. The regulator on the arduino can only handle about 500mA of current.
dcopeland13 years ago
One thing you have to pay attention to is the 120 volts that comes from your house is a RMS voltage. Never hook up the ground on your AC to an earth ground. Go through your common as this is where your current comes from. Your voltage is on your potential side. I would also make sure the gate is rated high enough so that if there is a spike in your voltage it will send it to the ground thus dropping your voltage to zero.
donphipps3 years ago
Is there a way to hook up to computer va USB port, i am looking for a way to make light blink to music.
Just thought I'd pipe in here. Vixen, an open source software that sequences audio to digital events, will pipe it's output directly through an arduino (connected via USB.) I am planning to use this to run my Christmas light show as I have a spare desktop to run the program in the garage. In this type of setup, the code on the arduino only tells it what it needs to know to become the generic plug-in for vixen and doesn't actually contain code for the sequence, so this wouldn't work if you wanted a standalone.

Beyond the arduino outputs, everything should be the same as dany's setup. Then your songs/light shows are only limited to your patience with the sequencer.

Unfortunately, like you, I am still in the production phase and don't have a finished product to show such as dany's. I am as far as running some test LEDs with the sequence on a bread board, so theoretically, I'll build the board with the relays and be good to go...

http://www.youtube.com/watch?v=bucQrRSpv7Y
dany32412 (author)  blangston13 years ago
WWWWOOOOWWW!!!!! That's awesome. Thanks blangston1 for introducing me to Vixen. I think i might put the lights up again this year, but this time use vixen to sync the music with the lights (my old process was very inefficient). You could probably put an xbee on a computer, sending all the data to remote controller box out in the yard. Then just run some speaker wire from your computer to a speaker, and boom your set. I might note that i have had issues with the arduino sometimes getting too cold, and actually getting kinda buggy. To solve that problem I'll probably have have to make a climate controlled box with a heating coil and some insulation. Once again, thanks for showing us Vixen, and i hope all goes well with your project.
1-40 of 100Next »