#define BLYNK_TEMPLATE_ID "TMPL3cq_f-IAN"
#define BLYNK_TEMPLATE_NAME "SMART TRAFFIC DIVERSION SYSTEM"
#define BLYNK_AUTH_TOKEN "iV8IZ3gX2vc_k11nCy3UW_HOORLWX26W"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Blynk Authentication Token
char auth[] = BLYNK_AUTH_TOKEN;
const int trigPin = 5;
const int echoPin = 18;
const int distancePin = 19; // Pin connected to the ultrasonic sensor
#define RED_PIN 12
#define YELLOW_PIN 13
#define GREEN_PIN 14
#define NUM_TRAFFIC_SIGNALS 4
const int greenTime = 5000; // Green light duration in milliseconds
const int yellowTime = 2000; // Yellow light duration in milliseconds
long duration;
int distance;
char LABEL[30];
void setTrafficLight(int redPin, int yellowPin, int greenPin, int redState, int yellowState, int greenState) {
digitalWrite(redPin, redState);
digitalWrite(yellowPin, yellowState);
digitalWrite(greenPin, greenState);
}
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(distancePin, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
for (int i = 0; i < NUM_TRAFFIC_SIGNALS; i++) {
setTrafficLight(RED_PIN, YELLOW_PIN, GREEN_PIN, HIGH, LOW, LOW);
}
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print('.');
}
Serial.println("\nConnected to WiFi");
Blynk.begin(auth, ssid, password);
}
void loop() {
Blynk.run();
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Calculate distance in centimeters
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
Blynk.virtualWrite(V0, distance);
if (distance < 100) {
for (int i = 0; i < NUM_TRAFFIC_SIGNALS; i++) {
setTrafficLight(RED_PIN, YELLOW_PIN, GREEN_PIN, HIGH, LOW, LOW);
}
Serial.println("Heavy Traffic Detected: Red Light ON");
strcpy(LABEL, "Heavy Traffic Detected");
}
else if (distance < 200) {
for (int i = 0; i < NUM_TRAFFIC_SIGNALS; i++) {
setTrafficLight(RED_PIN, YELLOW_PIN, GREEN_PIN, LOW, HIGH, LOW);
}
Serial.println("Moderate Traffic Detected: Yellow Light ON");
strcpy(LABEL, "Moderate Traffic Detected");
}
else {
for (int i = 0; i < NUM_TRAFFIC_SIGNALS; i++) {
setTrafficLight(RED_PIN, YELLOW_PIN, GREEN_PIN, LOW, LOW, HIGH);
}
Serial.println("Low Traffic Detected: Green Light ON");
strcpy(LABEL, "Low Traffic Detected");
}
Blynk.virtualWrite(V1, LABEL);
delay(greenTime);
for (int i = 0; i < NUM_TRAFFIC_SIGNALS; i++) {
setTrafficLight(RED_PIN, YELLOW_PIN, GREEN_PIN, LOW, HIGH, LOW);
}
delay(yellowTime);
}