// Intelligent Traffic Management (2 Roads)
// Using ESP32 + Ultrasonic Sensors
// Created by Abinaya
#define MAX_DISTANCE 100
#define MIN_DISTANCE 10
// Road 1
#define trig1 4
#define echo1 5
#define red1 13
#define yellow1 12
#define green1 14
// Road 2
#define trig2 18
#define echo2 19
#define red2 27
#define yellow2 26
#define green2 25
int trigPins[] = {trig1, trig2};
int echoPins[] = {echo1, echo2};
int redPins[] = {red1, red2};
int yellowPins[] = {yellow1, yellow2};
int greenPins[] = {green1, green2};
void setup() {
Serial.begin(115200);
for (int i = 0; i < 2; i++) {
pinMode(trigPins[i], OUTPUT);
pinMode(echoPins[i], INPUT);
pinMode(redPins[i], OUTPUT);
pinMode(yellowPins[i], OUTPUT);
pinMode(greenPins[i], OUTPUT);
}
Serial.println("🚦 Intelligent Traffic Management (2 Roads) Started");
}
float getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
void loop() {
float distances[2];
int greenTime[2];
// Measure distance for both roads
for (int i = 0; i < 2; i++) {
distances[i] = getDistance(trigPins[i], echoPins[i]);
if (distances[i] < MIN_DISTANCE) {
greenTime[i] = 6000; // Heavy traffic
} else if (distances[i] < MAX_DISTANCE) {
greenTime[i] = 4000; // Medium
} else {
greenTime[i] = 2000; // Light traffic
}
Serial.printf("Road %d: Distance %.2f cm | Green Time: %d ms\n", i + 1, distances[i], greenTime[i]);
}
// Road 1 cycle
digitalWrite(redPins[1], HIGH); // Stop Road 2
digitalWrite(redPins[0], LOW);
digitalWrite(yellowPins[0], LOW);
digitalWrite(greenPins[0], HIGH);
Serial.println("✅ Road 1 GREEN");
delay(greenTime[0]);
digitalWrite(greenPins[0], LOW);
digitalWrite(yellowPins[0], HIGH);
delay(1000);
digitalWrite(yellowPins[0], LOW);
digitalWrite(redPins[0], HIGH);
// Road 2 cycle
digitalWrite(redPins[0], HIGH); // Stop Road 1
digitalWrite(redPins[1], LOW);
digitalWrite(yellowPins[1], LOW);
digitalWrite(greenPins[1], HIGH);
Serial.println("✅ Road 2 GREEN");
delay(greenTime[1]);
digitalWrite(greenPins[1], LOW);
digitalWrite(yellowPins[1], HIGH);
delay(1000);
digitalWrite(yellowPins[1], LOW);
digitalWrite(redPins[1], HIGH);
}