0% found this document useful (0 votes)
55 views12 pages

Arduino CC PDF

The document describes a density based traffic light controller system using an Arduino that skips signals when there is no traffic present. It uses ultrasonic sensors to detect vehicles and controls traffic lights accordingly, either running signals sequentially when vehicles are present at all signals, or skipping signals with no vehicles to improve traffic flow. The system components, code explanation, full code, and a potential future improvement are outlined.

Uploaded by

Ben
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views12 pages

Arduino CC PDF

The document describes a density based traffic light controller system using an Arduino that skips signals when there is no traffic present. It uses ultrasonic sensors to detect vehicles and controls traffic lights accordingly, either running signals sequentially when vehicles are present at all signals, or skipping signals with no vehicles to improve traffic flow. The system components, code explanation, full code, and a potential future improvement are outlined.

Uploaded by

Ben
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Density Based Traffic Light Controller Using Arduino

If there will be no traffic on the other signal, one shouldn’t wait for that signal. System will skip
that signal and will move on next one.

b l i n k y t r a f f i c

l i g h t s l e d l i g h tt r s a f l f i i g c h t

2 0 , 0 V 8I 3E6 WC SO M M2 E6 N
R ET S P E C T S

COMPONENTS AND SUPPLIES 

× 1 
Arduino Mega 2560 & Genuino Mega
2560

× 4 

Ultrasonic Sensor - HC-SR04 (Generic)


× 5 
5 mm LED:
Red

× 4 
5 mm LED:
Green

× 4 
5 mm LED:
Yellow

× 12 

Resistor 220 ohm

× 1 

Jumper wires (generic)

× 1 

Breadboard (generic)

APPS AND ONLINE SERVICES 


Arduino IDE

ABOUT THIS PROJECT 

In previous post, we built an Arduino Traffic Light Controller and in this post, you are going to learn
about how to make an density based traffic light controller using Arduino. The main purpose of this
project is, if there will be no traffic on the other signal, one shouldn’t wait for that signal. The system
will skip that signal and will move on the next one.
Arduino is the main part of this project and it will be used to read from ultrasonic sensor HC-SR04 and
calculate the distance. This distance will tell us if any vehicle is near the signal or not and according to
that the traffic signals will be controlled.
The main task was to avoid use of delay because we have to continuously read from the ultrasonic
sensors and also at the same time, we have to control signals which requires the use of delay
function.
So we have used the timerone library which is used to repetitively measure a period of time in
microseconds and at the end of each period, an interrupt function will be called. In this function, we
will read from the sensors and in the loop function, we will control the traffic signals.

Working of Density Based Traffic Light Controller Using Arduino


The working of the project is divided into three steps

If there is traffic at all the signals, then the system will work normally by controlling the signals
one by one.
If there is no traffic near a signal, then the system will skip this signal and will move on to the next
one. For example, if there is no vehicle at signal 2, 3 and currently the system is allowing vehicles
at signal 1 to pass. Then after signal 1, the system will move on to signal 4 skipping signal 2 and 3.
If there is no traffic at all the 4 signals, system will stop at the current signal and will only move on
the next signal if there will be traffic at any other signal.

Components Required Density Based Traffic Light Controller Using


Arduino
The components you are going to require for this project are as follows

Arduino Mega 2560


4 X HC-SR04 ultrasonic sensors
4 X Red LEDs
4 X Red LEDs
4 X Green LEDs
4 X Yellow LEDs
12 X 220 ohm resistors
Jumper cables
Breadboards

Circuit Diagram Density Based Traffic Light Controller Using


Arduino
Four ultrasonic sensors are interfaced with the Arduino. Arduino will read from these sensors and will
calculate the distance. This sensor can measure from 2 to 400 cm.
Ultrasonic sensor basically emits an ultrasonic wave from the trigger and it is received by the echo
after deflecting an object. In order to generate a wave, we will have to set the trigger at high for 10 us
which will send an 8 cycle sonic burst at 40 KHz which will hit the object and after hitting the object,
the wave will be received by the echo. The echo will then tell us the time that the wave have traveled
in us (micro seconds). We will then convert this time into distance travelled by using S = v*t.
Read More: Ultrasonic sensor HC-SR04 interfacing with Arduino
LED’s are connected to the Arduino through the 220 ohm resistors. It is necessary to use the resistor
with the LED. The resistor limits the current flowing through the LED. If you won’t use it then the LED
will burn out soon. You can use the resistor of value from 100 ohm to 10k ohm with the LED. Larger
the value of LED, lesser the current will pass.
Read More: Interfacing LED with Arduino

Code Explanation
First of all, we included the timerone library. This library is used to repetitively measure a period of
time in microseconds and at the end of each period, an interrupt function will be called.
We have used this library because we want to read from the sensors and control LED’s at the same
time. We will have to use the delay in between the traffic signal so we can’t read from the sensors
continuously. Therefore we have used this library which will allow us to call a function in which we will
read from the sensors continuously and in the loop function, we will control the traffic signals.

#include<TimerOne.h>

In the setup function, we have used the Timer1.initialize(microseconds) function. This must be called
before you use any of the other methods of timerone library. “Microseconds” is actually the period of
time the timer takes. It is optionally to specify the timer’s period here. The default period is 1 second.
Keep in mind that it breaks analogWrite() on digital pins 9 and 10.

Timer1.initialize(100000);

Timer1.attachInterrupt(softInterr) calls a function each time the timer period finishes. We have set
the timer period at 100000 so our function will be called after 100 milli seconds.

Timer1.attachInterrupt(softInterr);

In the loop function it is looking if there is any vehicles under the 5 cm distance or not. If there will be
vehicle, then the function to that signal will be called.

void loop()
{
// If there are vehicles at signal 1
if(S1<t)
{
signal1Function();
}
// If there are vehicles at signal 2
if(S2<t)
{
signal2Function();
}
// If there are vehicles at signal 3
if(S3<t)
{
signal3Function();
}
// If there are vehicles at signal 4
if(S4<t)
{
signal4Function();
‘Softinterr()’ is the interrupt function and it will called after every 100 milliseconds. In this function,
}
we
} have read from the ultrasonic sensors and have calculated the distance.

void softInterr()
{
// Reading from first ultrasonic sensor
digitalWrite(triggerpin1, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin1, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin1, LOW);
time = pulseIn(echopin1, HIGH);
S1= time*0.034/2;

Code
The Arduino code for density based traffic light controller using Arduino is as follows

#include<TimerOne.h>
int signal1[] = {23, 25, 27};
int signal2[] = {46, 48, 50};
int signal3[] = {13, 12, 11};
int signal4[] = {10, 9, 8};
int redDelay = 5000;
int yellowDelay = 2000;
volatile int triggerpin1 = 31;
volatile int echopin1 = 29;
volatile int triggerpin2 = 44;
volatile int echopin2 = 42;
volatile int triggerpin3 = 7;
volatile int echopin3 = 6;
volatile int triggerpin4 = 5;
volatile int echopin4 = 4;
volatile long time; // Variable for storing the time traveled
volatile int S1, S2, S3, S4; // Variables for storing the distance covered
int t = 5; // distance under which it will look for vehicles.
void setup(){
Serial.begin(115200);
Timer1.initialize(100000); //Begin using the timer. This function must be called first. "microseconds" is the period of time the t
imer takes.
Video of Density Based Traffic Light Controller Using Arduino
Timer1.attachInterrupt(softInterr); //Run a function each time the timer period finishes.
// Declaring LED pins as output
for(int i=0; i<3; i++){
pinMode(signal1[i], OUTPUT);
pinMode(signal2[i], OUTPUT);
pinMode(signal3[i], OUTPUT);
pinMode(signal4[i], OUTPUT);
}
// Declaring ultrasonic sensor pins as output
pinMode(triggerpin1, OUTPUT);
pinMode(echopin1, INPUT);
pinMode(triggerpin2, OUTPUT);
pinMode(echopin2, INPUT);
pinMode(triggerpin3, OUTPUT);
pinMode(echopin3, INPUT);
pinMode(triggerpin4, OUTPUT);
pinMode(echopin4, INPUT);
}
void loop()
{
// If there are vehicles at signal 1
if(S1<t)
{
signal1Function();
}
// If there are vehicles at signal 2
if(S2<t)
{
signal2Function();
}
// If there are vehicles at signal 3
Future Work
if(S3<t)
{
Wesignal3Function();
will update this system with when a vehicle try to move even during red signal it will turn on an
}
alarm to warn the driver of the vehicle and will send the alert to the traffic warden with the picture.
// If there are vehicles at signal 4
If if(S4<t)
you have any future recommendations, please do ask in the comment section.
{
signal4Function();
}
}
// This is interrupt function and it will run each time the timer period finishes. The timer period is set at 100 milli seconds.
CODE
void softInterr()

{
// Reading from first ultrasonic sensor
digitalWrite(triggerpin1, LOW);
Code Arduino
delayMicroseconds(2);
digitalWrite(triggerpin1, HIGH);
 
delayMicroseconds(10);
digitalWrite(triggerpin1, LOW);
time = pulseIn(echopin1, HIGH);
2
1 #include<TimerOne.h>
3
4 int signal1[] = {23, 25, 27};
5 int signal2[] = {46, 48, 50};
6 int signal3[] = {13, 12, 11};
7 int signal4[] = {10, 9, 8};
8
9 int redDelay = 5000;
10 int yellowDelay = 2000;
11
12 volatile int triggerpin1 = 31;
13 volatile int echopin1 = 29;
14 volatile int triggerpin2 = 44;
15 volatile int echopin2 = 42;
16 volatile int triggerpin3 = 7;
17 volatile int echopin3 = 6;

SCHEMATICS 

Circuit Diagram

DOWNLOAD

COMMENTS 

Please log in or sign up to comment.


AUTHOR

Aqib
16 PROJECTS 92 FOLLOWERS

FOLLOW

PUBLISHED ON

December 23, 2018

 RESPECT PROJECT

 WRITE A COMMENT

 Share

MEMBERS WHO RESPECT THIS PROJECT

and 18 others

SIMILAR PROJECTS YOU MIGHT LIKE


Project tutorial by Zachary Haslam

18,205 VIEWS 7 COMMENTS 39 RESPECTS

Project showcase by Advaith Jagathesan

16,236 VIEWS 1 COMMENT 23 RESPECTS


Project showcase by matteoPrada

624 VIEWS 0 COMMENTS 2 RESPECTS

Project tutorial by Pieter Luyten and Joppe Smeets

26,393 VIEWS 27 COMMENTS 47 RESPECTS


Project tutorial by Patel Darshil

6,020 VIEWS 0 COMMENTS 11 RESPECTS

Video tutorial by artphrases

2,811 VIEWS 2 COMMENTS 10 RESPECTS

Powered by

You might also like