Let's Workshop: Traffic Light Module
Posted by Sebastian Karam on
Here is a quick introduction to using the traffic light module. Hopefully it will provide you with the confidence include the beginnings of traffic control in your project.
This example will demonstrate the use of an Arduino UNO in controlling the module. Once connected and the program loaded, lights will perform a pedestrian crossing sequence and provide feedback to the serial monitor.
Components
- 1pcs Arduino UNO or Compatible - LCAA100005
- 1pcs Traffic Light Module - BBAA100043
- 4pcs Male to Female Jumper Cables - GBAA100002
Wiring
Wire the two boards together as can be seen in the image below, taking care to match the pin numbers.
Coding
The code consists of the definitions, a setup and a single loop. Initially the pin numbers and delay lengths are defined. Following this the setup defines the pins as outputs, sets them to a starting value and then launches the serial monitor. The loop contains the control program that will run continuously after the setup. The loop monitors the serial input for the letter 'P'. Once it has been entered into the monitor, the sequence begins. First the green light is extinguished and the amber light lit. A loop cycles it through a number of times as defined by the earlier declared delay variable, each cycle passes through a pause. On completion the amber turns to red and it pauses once more in the same fashion. Following which the flashing amber state is reached. The flashing is controlled by doubling the amber delay, halving the pause and toggling the amber pin on each loop through. Once this has been completed the sequence finalises, the green is lit and the initial state restored.
Load the code below into the Arduino IDE and upload it to your board.
/*
A simple program designed to setup and demonstrate the 3 Traffic Light LED module - BBAA100043
The program simulates a simple pedestrian crossing.
modified 21 June 2019
by Sebastian Karam - Flux Workshop
*/
int redLEDpin = 13; // pin number for the red LED
int amberLEDpin = 12; // pin number for the amber LED
int greenLEDpin = 11; // pin number for the green LED
int amberDelay = 5; // pause in seconds to maintain the amber light
int redDelay = 10; // pause in seconds to maintain the red light
void setup() {
pinMode(redLEDpin, OUTPUT); // set the R signal pin as an output
pinMode(amberLEDpin, OUTPUT); // set the Y signal pin as an output
pinMode(greenLEDpin, OUTPUT); // set the G signal pin as an output
digitalWrite(redLEDpin,LOW); // set the red LED to off by default
digitalWrite(amberLEDpin,LOW); // set the amber LED to off by default
digitalWrite(greenLEDpin,HIGH); // set the green LED to on by default
Serial.begin(9600); // launch the serial monitor
Serial.println("Flux Workshop Traffic Light Example");
Serial.println("Enter P to Cross");
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) { // check if data is available on the serial input
char input = Serial.read(); // store the serial data in a variable
if (input == 'P'){ // check if the incoming data is the letter 'P'
Serial.println("--- BUTTON HAS BEEN PRESSED ---");
Serial.println("--- GOING TO AMBER ---");
for (int count = 0; count <= amberDelay; count++){ // Loop through the amber sequence
digitalWrite(amberLEDpin,HIGH); // set the amber LED to on
digitalWrite(greenLEDpin,LOW); // set the green LED to off
delay(1000);
}
Serial.println("--- GOING TO RED ---");
for (int count = 0; count <= redDelay; count++){ // Loop through the amber sequence
digitalWrite(amberLEDpin,LOW); // set the amber LED to off
digitalWrite(redLEDpin,HIGH); // set the red LED to on
delay(1000);
}
Serial.println("--- GOING TO FLASHING AMBER ---");
for (int count = 0; count <= amberDelay*2; count++){ // Loop through the flashing amber sequence
digitalWrite(amberLEDpin,!digitalRead(amberLEDpin)); // toggle the amber LED
digitalWrite(redLEDpin,LOW); // set the red LED to off
delay(500); // this is a shortened delay for it to flash faster
}
Serial.println("--- GOING TO BACK TO GREEN ---");
digitalWrite(amberLEDpin,LOW); // set the amber LED to off
digitalWrite(greenLEDpin,HIGH); // set the green LED to on
delay(1000);
Serial.println("Enter P to Cross"); // resend the instruction
}
}
}
Running
With the board loaded with the program and all the connections made the serial monitor will begin and await the input of the letter 'P'. The sequence will then begin. The output should be as seen below. Please note the camera has a hard time dealing with bright LEDs.
What to try next?
- Trigger a beeper as the sequence run like a pedestrian crossing.
- Set the sequence into a container function and build up a full traffic junction.
Share this post
- 11 comments
- Tags: Arduino, BBAA100043, Light, Traffic, UNO
Hi there,
Thanks for your article. I was wondering about your fritzing diagram. Do you have the custom part library for the traffic module? I don’t find it anywhere on the internet.