#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL3fL-vzSdy"
#define BLYNK_TEMPLATE_NAME "traffic management ard"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Blynk Auth Token
char auth[] = "iDKaAplDPbDyufZiyT_h2wOrhKxAq_zk";
// WiFi credentials
char ssid[] = "YourSSID";
char pass[] = "YourPassword";
// Traffic light LEDs
const int redLightPin = 5;
const int yellowLightPin = 18;
const int greenLightPin = 19;
// IR sensor pins
const int sensorPin1 = 15; // Sensor 1
const int sensorPin2 = 4; // Sensor 2
// Variables to store sensor readings
int vehicleCount1 = 0;
int vehicleCount2 = 0;
// Blynk Virtual Pins
#define VPIN_SENSOR1 V1
#define VPIN_SENSOR2 V2
#define VPIN_TRAFFIC_CONTROL V3
#define VPIN_LIGHT_STATUS V4
BlynkTimer timer;
void setup() {
Serial.begin(115200);
// Set up traffic light pins
pinMode(redLightPin, OUTPUT);
pinMode(yellowLightPin, OUTPUT);
pinMode(greenLightPin, OUTPUT);
// Set up sensor pins
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Set initial traffic light state
digitalWrite(redLightPin, LOW);
digitalWrite(yellowLightPin, LOW);
digitalWrite(greenLightPin, HIGH);
// Timer to send sensor data to Blynk
timer.setInterval(1000L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run();
// Read sensors
int sensorValue1 = digitalRead(sensorPin1);
int sensorValue2 = digitalRead(sensorPin2);
// Update vehicle count
if (sensorValue1 == HIGH) {
vehicleCount1++;
}
if (sensorValue2 == HIGH) {
vehicleCount2++;
}
// Traffic light control logic
manageTrafficLights();
}
void manageTrafficLights() {
// Simple traffic light control based on vehicle count
if (vehicleCount1 > vehicleCount2) {
digitalWrite(redLightPin, LOW);
digitalWrite(yellowLightPin, LOW);
digitalWrite(greenLightPin, HIGH);
Blynk.virtualWrite(VPIN_LIGHT_STATUS, "Green Light");
} else {
digitalWrite(redLightPin, HIGH);
digitalWrite(yellowLightPin, LOW);
digitalWrite(greenLightPin, LOW);
Blynk.virtualWrite(VPIN_LIGHT_STATUS, "Red Light");
}
}
// Send sensor data to Blynk
void sendSensorData() {
Blynk.virtualWrite(VPIN_SENSOR1, vehicleCount1);
Blynk.virtualWrite(VPIN_SENSOR2, vehicleCount2);
}
BLYNK_WRITE(VPIN_TRAFFIC_CONTROL) {
int controlValue = param.asInt();
if (controlValue == 1) {
// Manual control: Turn on red light
digitalWrite(redLightPin, HIGH);
digitalWrite(yellowLightPin, LOW);
digitalWrite(greenLightPin, LOW);
Blynk.virtualWrite(VPIN_LIGHT_STATUS, "Red Light");
} else {
// Resume automatic control
manageTrafficLights();
}
}