#define BLYNK_TEMPLATE_ID "TMPL3rrBuhmdn"
#define BLYNK_TEMPLATE_NAME "traffic"
#define BLYNK_AUTH_TOKEN "FR81K_0yh9nH8mjmc439peDkOwBa8NkE"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "FR81K_0yh9nH8mjmc439peDkOwBa8NkE"; // Blynk Auth Token
char ssid[] = "Wokwi-GUEST"; // WiFi SSID
char pass[] = ""; // WiFi Password
#define TRIG_PIN 5
#define ECHO_PIN 18
#define RED_LED_PIN 16
#define YELLOW_LED_PIN 17
#define GREEN_LED_PIN 4
#define RED_LED_VPIN V2
#define YELLOW_LED_VPIN V3
#define GREEN_LED_VPIN V4
#define PEDESTRIAN_BUTTON_PIN 19 // Pedestrian crossing button pin
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(PEDESTRIAN_BUTTON_PIN, INPUT_PULLUP); // Enable internal pull-up resistor for button pin
}
void loop() {
Blynk.run();
manageTraffic();
}
void manageTraffic() {
long duration, distance;
// Trigger the ultrasonic sensor to send a pulse
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Measure the pulse duration
duration = pulseIn(ECHO_PIN, HIGH);
// Calculate the distance (in cm) based on the duration
distance = (duration / 2) / 29.1;
// Send the distance to Blynk
Blynk.virtualWrite(V1, distance);
// Check if pedestrian button is pressed
bool pedestrianRequest = digitalRead(PEDESTRIAN_BUTTON_PIN) == LOW;
// Control traffic lights based on the measured distance and pedestrian request
if (pedestrianRequest || distance < 10) {
// Pedestrian request or heavy traffic: Red light on
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
Blynk.virtualWrite(RED_LED_VPIN, 1);
Blynk.virtualWrite(YELLOW_LED_VPIN, 0);
Blynk.virtualWrite(GREEN_LED_VPIN, 0);
} else if (distance < 25) {
// Moderate traffic: Yellow light on
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
Blynk.virtualWrite(RED_LED_VPIN, 0);
Blynk.virtualWrite(YELLOW_LED_VPIN, 1);
Blynk.virtualWrite(GREEN_LED_VPIN, 0);
} else {
// Light traffic: Green light on
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
Blynk.virtualWrite(RED_LED_VPIN, 0);
Blynk.virtualWrite(YELLOW_LED_VPIN, 0);
Blynk.virtualWrite(GREEN_LED_VPIN, 1);
}
}