#define BLYNK_TEMPLATE_ID "TMPL33-ygH834"
#define BLYNK_TEMPLATE_NAME "Smart Traffic"
#define BLYNK_AUTH_TOKEN "lhSWhde6isKGh-AvG99raRkwg7VEhm9D"
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <NewPing.h>
char ssid[] = "Wokwi-GUEST"; // WiFi SSID
char pass[] = ""; // WiFi password
#define RED_LED_PIN 12 // Pin for red LED
#define YELLOW_LED_PIN 14 // Pin for yellow LED
#define GREEN_LED_PIN 27 // Pin for green LED
#define BUZZER_PIN 23 // Pin for buzzer
#define TRIGGER_PIN 32 // Pin for ultrasonic sensor trigger
#define ECHO_PIN 33 // Pin for ultrasonic sensor echo
#define POTENTIOMETER_PIN 34 // Pin for potentiometer
#define MAX_DISTANCE 400 // Maximum distance for ultrasonic sensor
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Ultrasonic sensor object
BlynkTimer timer; // Timer object for periodic tasks
void setup()
{
Serial.begin(9600); // Initialize serial communication
Serial.println("Starting setup...");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Initialize Blynk with authentication token and WiFi credentials
Serial.println("Blynk started...");
pinMode(RED_LED_PIN, OUTPUT); // Set red LED pin as output
pinMode(YELLOW_LED_PIN, OUTPUT); // Set yellow LED pin as output
pinMode(GREEN_LED_PIN, OUTPUT); // Set green LED pin as output
pinMode(BUZZER_PIN, OUTPUT); // Set buzzer pin as output
pinMode(TRIGGER_PIN, OUTPUT); // Set ultrasonic sensor trigger pin as output
pinMode(ECHO_PIN, INPUT); // Set ultrasonic sensor echo pin as input
ledcSetup(0, 1000, 8);
timer.setInterval(1000L,sendSensorData);
Serial.println("Setup complete...");
}
void loop()
{
Blynk.run(); // Run Blynk communication
timer.run(); // Run timer tasks
}
void sendSensorData()
{
Blynk.run(); // Run Blynk communication
int distance = sonar.ping_cm(); // Read distance from ultrasonic sensor
int potValue = analogRead(POTENTIOMETER_PIN); // Read potentiometer value
Serial.print("Distance: ");
Serial.println(distance);
Serial.print("Potentiometer: ");
Serial.println(potValue);
Blynk.virtualWrite(V4, distance);
if (distance < 20 || potValue > 800)
{
// Heavy traffic condition
digitalWrite(RED_LED_PIN, HIGH); // Turn on red LED
delay(50);
digitalWrite(RED_LED_PIN, LOW); // Turn off red LED
delay(50);
Blynk.virtualWrite(V1, HIGH); // Turn on LED widget in Blynk app for red LED
Blynk.virtualWrite(V2, LOW); // Turn off LED widget in Blynk app for yellow LED
Blynk.virtualWrite(V3, LOW); // Turn off LED widget in Blynk app for green LED
tone(BUZZER_PIN, 1000); // Activate buzzer
Serial.println("Heavy traffic");
}
else if (distance < 50 || potValue > 600)
{
// Moderate traffic condition
digitalWrite(YELLOW_LED_PIN, HIGH); // Turn on yellow LED
delay(50);
digitalWrite(YELLOW_LED_PIN, LOW); // Turn off yellow LED
delay(50);
Blynk.virtualWrite(V1, LOW); // Turn off LED widget in Blynk app for red LED
Blynk.virtualWrite(V2, HIGH); // Turn on LED widget in Blynk app for yellow LED
Blynk.virtualWrite(V3, LOW); // Turn off LED widget in Blynk app for green LED
noTone(BUZZER_PIN); // Deactivate buzzer
Serial.println("Moderate traffic");
}
else
{
// Low traffic condition
digitalWrite(GREEN_LED_PIN, HIGH); // Turn on green LED
delay(50);
digitalWrite(GREEN_LED_PIN, LOW); // Turn off green LED
delay(50);
Blynk.virtualWrite(V1, LOW); // Turn off LED widget in Blynk app for red LED
Blynk.virtualWrite(V2, LOW); // Turn off LED widget in Blynk app for yellow LED
Blynk.virtualWrite(V3, HIGH); // Turn on LED widget in Blynk app for green LED
noTone(BUZZER_PIN);
Serial.println("Low traffic");
}
delay(100);
}