Introduction: Traffic Signal / Stop Light Wiring With Arduino Controller

Picture of Traffic Signal / Stop Light Wiring With Arduino Controller

I always wanted an old traffic signal and finally got one recently.  However, it was very simply wired so that all the lights were fixed on.  What fun is that?  I also wanted to try out an Arduino controller and thought this would be a nice simple project to incorporate it into. 

This Instructable will show you how to wire up an old traffic signal with an Arduino controller to function like a real traffic light.  I used a pretty simple program and controls.  Given the power of the Arduino controller, there are a lot of ways you can customize this.

Step 1: Stuff You Will Need

Picture of Stuff You Will Need

Obviously you will need an old traffic signal.  I got mine on Craigslist for $40.  It is one of the newer plastic cased ones, but it looks fine from a distance.  I would kind of like an old metal one, but I'll have to upgrade later I guess.

The brains of this thing are going to be an Arduino Uno connected to a relay module. 

Arduino Uno

SainSmart 4-Channel 5V Relay Module
(Note:  This relay is pretty loud.  I can hear it click from across the room.  If anyone has suggestions for something similar that is not as noisy, let me know.)

You will need a power supply (transformer, wall wart, AC/DC adapter) for the Arduino.  I used a 12V 750mA wall wart that I had from some other piece of electronics that had died.  Most 7V to 12 V transformers should work.  You can pick one up at Goodwill for about $2.  Stay away from Radio Shack, they wanted $20-$30 for wall warts!  I am sure someone who knows more about the Arduinos can chime in as to what kind of amperage range you should stay in.  Here's one from Amazon that should work fine:

You will also need some male to female jumpers to connect the Arduino to the relay module (note, I did not have these but wish I did):

Note:  If you do not want to mess with the Arduino, there are a couple ready to go traffic signal controllers available online.  I could have gone this route, but I was really wanting to try out the Arduino:

A lamp or appliance cord with ground wire

Other materials you will need will depend on the starting state of your traffic signal.  I used some 16 ga wire (for the internal line voltage wiring), solder, sheet metal screws (for securing the Arduino and relay module, and attaching ground wires to the frame), wire nuts (for connecting line voltage wires), epoxy (to secure transformer), heat shrink tubing (to insulate transformer connections).


You will need a USB B cable to connect the Arduino to your computer to program it.  If you have a USB printer you should already have one of these.

Wire cutters
Wire strippers
mini flat head screwdriver for relay connections

Other tools you will need will again depend on the initial state of your traffic signal.  I used the following:

Cordless drill (for drilling holes in the case)
Soldering Iron (for wire connections and heat shrink tubing)
Dremel tool with milling bit (cut off some the plastic in the case to make mounting the new components easier)
Eye and hearing protection if you are using power tools.


You will need the Arduino programming software to upload the code to the Arduino:

Step 2: The Plan

Picture of The Plan

Below is a wiring diagram for the traffic signal.  Hopefully this is pretty clear what gets wired to what. 

Step 3: The Brains

Picture of The Brains

Above is a photo of the Arduino Uno and the relay module with the wiring between the two attached.  I only had male to male jumpers, so I used a Molex connector and my mad soldering skills to make a connector (second photo).  It is probably easier to use male to female jumpers to connect everything or find a 6 pin jumper to use.  The Arduino has all female sockets and the relay module has all male pins.

Step 4: Program It!

Picture of Program It!

If you have not used an Arduino before, see this Instructable by randofo:

Download and start the Arduino programming software if you have not already.  Connect the Arduino to your computer with a USB B cable.

Copy and paste the code the below and upload it to the Arduino.  One the code uploads it should start running immediately on the Arduino.  You should see the indicator lights going on and off on the relay unit and hear the relay switches tripping.

You can make this more simple or complicated if you want.  I have it set up to cycle through 25 normal cycles, switch to blinking red for a few minutes, do 25 more normal cycles, switch to blinking yellow for a few minutes, and then repeat.

//Fzumrk's traffic controller code
// name your pins:
int red = 12;
int yellow = 11;
int green = 10;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(red, OUTPUT);
  pinMode(yellow, OUTPUT);
  pinMode(green, OUTPUT);
int  var = 0; //defines and sets initial value for variables used below
int var1 = 0; //defines and sets initial value for variables used below

// the loop routine runs over and over again forever:
void loop() {

// sets initial value for pins so that lights start as "off" 
digitalWrite(green, HIGH);
digitalWrite(yellow, HIGH);
digitalWrite(red, HIGH);

while(var < 25){
  // repeats normal cycle 25 times
  digitalWrite(green, LOW);   // turns the green light on
  delay(20000);               // holds the green light on for 20 seconds
  digitalWrite(green, HIGH);    // turns the green light off
  delay(600);               // slight pause between lights
  digitalWrite(yellow, LOW);  //turns the yellow light on
  delay(4000); //holds the yellow light for 4 seconds (watch out for that red-light camera!)
  digitalWrite(yellow, HIGH); //turns the yellow light off
  delay(600);  //slight pause between lights
  digitalWrite(red, LOW);  //turns the red light on
  delay(20000);  //holds the red light on for 20 seconds
  digitalWrite(red, HIGH);  //turns the red light off
  delay(600);  //slight pause between lights
  var++;}  //adds 1 to variable "var" for repeat count
  // after 25 cycles above, the light switches to "power outage mode", flashing red
  delay(600); //slight delay
  var1=0; //resets variable "var1" to 0
  while(var1 < 120) {
    // repeats power outage cycle 120 times - 2 minutes
   digitalWrite(red, LOW);
   digitalWrite(red, HIGH);
var = 0;

//switches back to normal cycle after "power outage" cycle is done
while(var < 25){
  // back to normal light cycle for 25 cycles
  digitalWrite(green, LOW);   // turn the LED on (HIGH is the voltage level)
  delay(20000);               // wait for a second
  digitalWrite(green, HIGH);    // turn the LED off by making the voltage LOW
  delay(600);               // wait for a second
  digitalWrite(yellow, LOW);
  digitalWrite(yellow, HIGH);
  digitalWrite(red, LOW);
  digitalWrite(red, HIGH);
 //switches to "late night cycle" flashing yellow for 2 minutes, similar to flashing red above
  while(var1 < 120) {
   digitalWrite(yellow, LOW);
   digitalWrite(yellow, HIGH);
   var = 0;
 //goes back to normal cycle at top and repeats forever 

Step 5: Power Supply

Picture of Power Supply

I converted a wall wart type transformer to a built in power supply by soldering some pig-tails to the wall plug blades and insulating them with heat shrink tubing.  I then hard-wired the transformer to the power cord coming into the traffic signal.  You can always run this wire separate and plug it directly into an outlet if you do not want to covert the transformer like I did.

Step 6: Wire It Up

Picture of Wire It Up

MAKE SURE THE WALL PLUG IS NOT PLUGGED IN WHEN YOU ARE WORKING ON THE INTERNAL WIRING.  If you don't know to do this, you probably should not be attempting this project.  Anyway, consider yourself warned.  I take no responsibility for accidental electrocutions.

The case for my traffic signal is made of plastic, but there are some metal parts on it that I thought should be grounded.  If yours has a metal case, you should probably ground the case directly. 

I used normal wire nuts for the all of the line voltage wiring connections.  I tinned the ends of the stranded wires with solder before putting on the wire nuts.

Step 7: Run It!

The traffic light's normal cycle:

"Power Outage" mode, blinking red:

The internal workings:


DiyWaterDog (author)2016-04-17

I have purchased a second traffic light. The first is controlled manually by a latching relay system. Would like to experiment with an arduino micro controller. What made you choose the Arduino board you did choose? Could you get the same functionality from a less expensive board. This will be my first attempt at Arduino from a kit I bought over a year ago. I realize there are many different versions of the board. Just wondering if there is a cheaper solution.



Chocologan (author)DiyWaterDog2016-09-21

Look above, what should I do with my light

DiyWaterDog (author)Chocologan 2016-09-21

Sorry. Don't understand your question m

fzumrk (author)DiyWaterDog2016-05-03

I just picked one that I saw many other people using in their instructable projects. I am pretty confident you can make this work with a much simpler project board. This barely uses the available functionality of the Uno.

Chocologan (author)2016-09-21

How should I go about selling this bad boy, so another enthusiast can enjoy it

D6equj5 (author)2016-07-12

Nice project and very similar to my own in many respects. Mine is automatic although will also be controlled from the web. I notice on your cct diag you are plugging AC directly into the Arduino - do they rectify AC?

Many thanks


mkteacher1 (author)2016-03-03

Can this be done using a remote type button. I would like to be able to use a sensor somewhat like what is on a garage door opener to switch the light from green to orange to red and back. Grandkids would love it when we come home. What would you suggest?

DiyWaterDog (author)mkteacher12016-04-20

this might be a solution...Hot ! Thunbird New 12v 4 Channel Wireless Remote Control Receiver Momentary Switch

DiyWaterDog (author)2016-02-22

It has been over a year since looking for information here, and almost 2 years since I started on this project. Overall, I did the research bought a couple parts and handed it off to a very willing buddy to make it happen. Here are images of my final product of manual switching of lights with no controller. If you want more information go here ...

Good luck and thanks to those who shared information


Wonderskill (author)2016-01-07

Anybody help me? I have a traffic light and one of those halloween sensor pads. I want my traffic light to stay green when powered on and switch to yellow when the pad is pressed. Then switch to red when the pad is pressed again. Then green.

fzumrk (author)Wonderskill2016-01-15

I'm not sure what a halloween sensor pad is, but I am guessing it is a momentary switch. If that is what it is you should be able to incorporate it into the arduino.

Here is a quick tutorial showing how to us a momentary switch with arduino:

DiyWaterDog (author)2015-02-28

anybody know how to wire with 3 momentery switches instead of arduino?

fzumrk (author)DiyWaterDog2015-03-04

Maybe? Let me know if this is what you are trying to do:

3 Buttons, push one for green, push another for yellow, push another for red? The other lights go off when you push a different switch?

DiyWaterDog (author)fzumrk2015-03-04

Yes! Would even be nice to have one more button to turn all lights off. Could use this, or build custom box with custom buttons.

fzumrk (author)DiyWaterDog2015-03-05

Just to be clear, if you used momentary switches, the lights will only be on while you are holding the button down. If you want each switch to act like an on/off toggle, that is a different configuration.

DiyWaterDog (author)fzumrk2015-03-08

Hmm... I thought that momentary switches in combination with a relay board would allow for sequence you named originally?

fzumrk (author)DiyWaterDog2015-03-09

A momentary switch is only on while being held down. The relay is only switched on while is receiving current on the signal side.

I thought about how to make this work the way you want, but I am not sure how to accomplish it without using a Arduino or other controller. With the Arduino, you should be able to program it to switch on and off the appropriate relays when it received a momentary signal from one of the switches.

DiyWaterDog (author)fzumrk2015-03-10

Thanks for your time on this. Greatly appreciated. My original venture was this post where I discovered from others the use of relays.

Never went any further than the thread as it was beyond my comprehension. Once I discovered the relay boards I thought it might be a solution. Perhaps it is the "latching relay" that is needed? Anyways, until I find a doable solution this is my current solution, a 4 position rotary switch.

Not a bad solution, but a little clunking moving through lights. Again... thanks for your time and wisdom.

fzumrk (author)DiyWaterDog2015-03-11

I think user "mpoulton" at the linked site figured it out. I did not know about latching relays, but it sounds like they should work with using momentary switches like you are trying to do. I'll quote his text and picture here in case anyone else is trying to figure this out.

The thing I am not sure about is where to get the three pole, double throw relays. You may want to check in one of the electronics forums on here to see if someone who knows more than me can find you the appropriate part. I think "3PDT latching relay" is what you need to look for, but I am not sure on the exact specs you want. You may want to set it up the switch circuit with all low voltage relays and tie the outputs on them to basic low voltage to high voltage relays to control the line level current going to the lights.

Just based on what I am comfortable working with and what I am guessing all of the relays will cost is that you, is that you could buy an Arduino or other controller and program it to do the same thing for less money and trouble.

"The relay setup is not terribly complicated, but you'll need to really
understand how it works to do it successfully. There are numerous
possible relay configurations that would work. I'd start with three
relays, each 3-pole double-throw. Each relay controls one light. The
button for each light activates the relay coil, which is wired through
one pole of each of the other two relays (normally-closed), and latches
because you connect the relay coil to the light also. Then when either
of the other two relays are activated, it breaks the coil circuit for
the other relay so that it deactivates. This gives you three latching
relays, where each one unlatches the others."

DiyWaterDog (author)fzumrk2015-03-11

Wonder if this board kit works the same as those relay boards designed for arduino. If so, no need for the board as the video here explains how to "cleverly wire" a two relay board for three lights. If the parallax board is needed, then there is the down side of paying for a board that you have to build. Hmmmm.....?

fzumrk (author)DiyWaterDog2015-03-14

I looked at that, and it looks like it is just a basic relay board. You can buy an equivalent one already assembled for less money. The one I have linked about has four channels and is only about $10. It would still require an Arduino or other controller to send the appropriate on/off signals.

ArrowCraft made it! (author)2015-02-26

It's really an interesting prject, here's mine! ;)

fzumrk (author)ArrowCraft2015-02-26

Nice Job! Are you using an AC to USB adapter to power the arduino? That's not a bad idea.

ArrowCraft (author)fzumrk2015-03-01

Yeah, my arduino was a little broken and I coludn't use any normal power supply's anymore. Thanks for replying by the way, I appriciate it! :)

This was also my first arduino project so thanks for helping me out.

MaC MoHaK (author)2013-12-02

this is the pdf link ( containing circuit layout and the schematics thati have been working with. but the arduino ide came up with a range of errors in the code when i tried to upload it.
plz help me write/modify the code for the circuit mentioned in the pdf.
p.s. : i am a beginner and ur help will be greatly appreciated

charlessenf-gm (author)2013-03-09

The one I'm waiting for would allow a timed cycle where the green illuminates for Seconds(x), then the Amber/Yellow for Seconds(y) and finally the red illuminates for Seconds(z) - Maybe even flashes.

fzumrk (author)charlessenf-gm2013-03-10

You should be able to do that with this setup. If you look at the Arduino coding on step 4, you can change any of the values such as "delay(20000)" to get the timing you want. This tells it to hold whatever it is doing for 20,000 milliseconds or 20 seconds. You can move the code lines around to change the sequence too.

charlessenf-gm (author)fzumrk2013-03-10

"20,000 milliseconds or 20 seconds."

Would 2 min 30 sec be possible as well?

Ideally, I'd like 2:30 Green; 29 sec amber (flashing with increasing rapidity of possible) and red -until reset - at the 3 min mark.

And, to build the entire thing in a package small enough to be easily portable (in a briefcase/purse), be battery-powered and fit conveniently upon a small table.

And, of course I know noting about Ardurno's !!

Hey charlessenf-gm! I may be a bit late, but maybe you'll see this anyway.
What you describe should be possible.

When it comes to timing and pattern of the lights, there are no real limits.
You can have it flash and hold just the amount of time you like.
You could even add some random seconds to make it more interesting or even activate switching to green with a button or photocell.

When it comes to building it small. You can't really have the traffic light in your briefcase, but if you take the actual light out of the equation (or use a model with LEDs) you could even make something that would fit in a big pocket.

I had some fun with a few single-light LED traffic light and the arduino-based digispark at my office. Using the same (but 8-channel) relay module.

The micro-controller is about the size of a stamp. The big parts are the 5V power supply and the 8-channel relay module. If you made one controling LEDs and running on a 9V battery, you could probably make it fit a small matchbox.

Just send me a message if you want to ask someting. Here, on the youtube-link or my mail:

/Weber - Traffic Light technician.

declanshanaghy (author)2013-03-08

I just made pretty much the exact same project a few weeks ago.
I used 3 solid state relays from sparkfun.

I made the board for a friend, who's adding it to his traffic light. He's now in the middle of hooking it up with an infrared sensor that many outside lights use these days. That way it will stay off most of the time and will come on automatically when someone walks close to it.

fzumrk (author)declanshanaghy2013-03-10

Nice design and compact too.

Wapata (author)2013-03-10

Great !
I've to do something like that for a friend.
But I think I'll use LED lamp and Ampli-OP.
By the way, don't you plan to add potentiometers to change the time-settings "on the flow" ? Or a mic to use the traffic signal as a vu-meter ?

fzumrk (author)Wapata2013-03-10

Now you are getting way too fancy for me. I figure if I want to change up the timing I can always just re-flash the Arduino. Those are good ideas for mods though.

charlessenf-gm (author)2013-03-09

The one I'm waiting for would allow a timed cycle where the green illuminates for Seconds(x), then the Amber/Yellow for Seconds(y) and finally the red illuminates for Seconds(z) - Maybe even flashes.

Microbe (author)2013-03-07

Nice idea, one day I was driving along and some workers were replacing old stop lights with new LED ones. I jumped out of my car at the lights, asked if I could have one, threw it in the back and away I went. Hadn't thought of using my arduino for something like this.

fzumrk (author)Microbe2013-03-08

Free stuff is the best.

RMDan (author)2013-03-07

Nice Project. I was thinking of doing something like this for my future office space. Instead of having it cycle, I would have a control unit to change the lights programmed on my computer. That way if I don't want to be disturbed the light is red, yellow is proceed with caution, and green is welcome.

fzumrk (author)RMDan2013-03-08

Good idea!

im_sparky (author)2013-03-07

Nice work!
You can eliminate the relay noise by using solid state relays.

fzumrk (author)im_sparky2013-03-08

Sweet. I think maybe I will swap that out and use the current one for another project. The clicking is pretty annoying.

jneveln (author)2013-03-07

Nice project. I've had a traffic light for years (picked it up at a DOT auction), and got an Arduino and a relay controller (EFX-TEK RC-4 relay board to do the same thing. I'm kinda stuck on how to mount everything since my light is metal and I want to make sure I don't zap myself with 120V.

I'd like to add a switch to go between some different modes, like blink, all on, random, blink in time to music, and maybe add a distance sensor to tell a car when to stop.

fzumrk (author)jneveln2013-03-08

As long as you mount everything so nothing is shorting against the case, and you ground the case, you should be fine. Look at how your PC case is put together for an example.

Alternatively or additionally, if there is enough room in the case, you could put plastic junction boxes inside it to house the electronics and wire connections.

Adambowker98 (author)2013-03-04

Where'd you get the stopllight?

fzumrk (author)Adambowker982013-03-05 You can find anything there with some patience. The person I bought it from originally bought it at a municipal auction.

skinzy (author)fzumrk2013-03-07

Great project. I have found traffic lights on ebay too.

I still need to post my project, but I tapped into a "Park-Zone parking aid" with some relays and am using that to control a (retired chicago) traffic light (purchased on ebay) in my garage.

Little cooler than a tennis ball hanging from the garage ceiling ;-)

fzumrk (author)skinzy2013-03-08

Someone else asked me how to incorporate a range finder for this purpose. I would recommend checking out this Instructable by RuiSantos:

It looks like he has a pretty good design for one which could be used as a starting point. A relay module could be inserted into his design instead of the LEDs to control the stop light.

You guys are making me want to incorporate this into mine now!

About This Instructable




Bio: Drunk posting ill conceived instructables since 2009.
More by fzumrk:Make Straight Cable Into Coiled / Pigtail CableClean Peanut Butter Jar for RecyclingiPod Shuffle Organizer from recycled gift card
Add instructable to: