// Smart Density-Based Traffic Light System with ESP32 & Blynk
// Uses Ultrasonic Sensors to Adjust Traffic Light Timing
#define BLYNK_TEMPLATE_ID "TMPL3nGrvQF5P"
#define BLYNK_TEMPLATE_NAME "traffic lights system"
#define BLYNK_AUTH_TOKEN "aaxt_qunqrEvs-fnuZ0SKSpbiwJy-ngY"
#define BLYNK_PRINT Serial // Enables Serial Monitor Debugging
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <NewPing.h>
// Blynk Authentication
#define BLYNK_TEMPLATE_ID "TMPL3nGrvQF5P"
#define BLYNK_TEMPLATE_NAME "traffic lights system"
#define BLYNK_AUTH_TOKEN "aaxt_qunqrEvs-fnuZ0SKSpbiwJy-ngY"
// WiFi Credentials
char ssid[] = "";
char pass[] = "";
// Ultrasonic Sensor Pins & Setup
#define TRIG1 5
#define ECHO1 18
#define TRIG2 4
#define ECHO2 19
#define TRIG3 15
#define ECHO3 23
#define TRIG4 2
#define ECHO4 22
#define MAX_DISTANCE 200 // Max distance in cm
NewPing sensor1(TRIG1, ECHO1, MAX_DISTANCE);
NewPing sensor2(TRIG2, ECHO2, MAX_DISTANCE);
NewPing sensor3(TRIG3, ECHO3, MAX_DISTANCE);
NewPing sensor4(TRIG4, ECHO4, MAX_DISTANCE);
// RGB LED Pins
#define RGB_RED 13
#define RGB_GREEN 12
#define RGB_BLUE 14
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
}
void loop() {
Blynk.run();
int d1 = sensor1.ping_cm();
int d2 = sensor2.ping_cm();
int d3 = sensor3.ping_cm();
int d4 = sensor4.ping_cm();
int avgDistance = (d1 + d2 + d3 + d4) / 4;
Serial.print("Avg Distance: ");
Serial.println(avgDistance);
if (avgDistance < 20) {
digitalWrite(RGB_RED, LOW);
digitalWrite(RGB_GREEN, HIGH);
digitalWrite(RGB_BLUE, LOW);
} else if (avgDistance < 50) {
digitalWrite(RGB_RED, HIGH);
digitalWrite(RGB_GREEN, HIGH);
digitalWrite(RGB_BLUE, LOW);
} else {
digitalWrite(RGB_RED, HIGH);
digitalWrite(RGB_GREEN, LOW);
digitalWrite(RGB_BLUE, LOW);
}
Blynk.virtualWrite(V1, avgDistance);
delay(1000);
}