#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
#include <WiFi.h>
#define BLYNK_TEMPLATE_ID "TMPL38fsTl87n"
#define BLYNK_TEMPLATE_NAME "Vehicle Detector"
#define BLYNK_AUTH_TOKEN "ktOQrfnf-7oBQm1juPPWy8672ku4yq6V"
#include <BlynkSimpleEsp32.h>
// Ultrasonic Sensor Pins
#define TRIGGER_PIN 4
#define ECHO_PIN 16
#define MAX_DISTANCE 400
// Buzzer Pin
#define BUZZER_PIN 17
// Potentiometer Pin
#define POTENTIOMETER_PIN 34
// I2C LCD Address and Dimensions
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
// Blynk Credentials
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Initialize LCD
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_ROWS);
// Initialize Ultrasonic Sensor
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned long lastTime = 0;
float lastDistance = 0;
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize Buzzer Pin
pinMode(BUZZER_PIN, OUTPUT);
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Display startup message on LCD
lcd.setCursor(0, 0);
lcd.print("Radar Started");
delay(100);
lcd.clear();
}
void loop() {
Blynk.run();
// Read potentiometer value
int potValue = analogRead(POTENTIOMETER_PIN);
int contrast = map(potValue, 0, 4095, 0, 255); // Map to a suitable range for contrast control
// Apply contrast value (dummy function for demonstration purposes,
// actual contrast control depends on specific LCD used)
//analogWrite(3.3V, contrast);
// Measure distance
float distance = sonar.ping_cm() / 100.0; // Convert to meters
// Calculate speed
unsigned long currentTime = millis();
float speed = 0;
if (lastTime != 0) {
unsigned long timeDiff = currentTime - lastTime; // Time difference in ms
float distanceDiff = distance - lastDistance; // Distance difference in meters
speed = (distanceDiff * 1000) / timeDiff; // Speed in m/s
}
lastTime = currentTime;
lastDistance = distance;
// Display on LCD
lcd.setCursor(0, 0);
lcd.print("Dist: ");
lcd.print(distance, 2);
lcd.print("m");
lcd.setCursor(0, 1);
lcd.print("Speed: ");
lcd.print(speed, 2);
lcd.print("m/s");
// Send data to Blynk
Blynk.virtualWrite(V1, distance); // Virtual pin V1 for distance
Blynk.virtualWrite(V2, speed); // Virtual pin V2 for speed
// Trigger Buzzer if condition met
if (distance < 0.05 || speed > 10) {
digitalWrite(BUZZER_PIN, HIGH);
} else {
digitalWrite(BUZZER_PIN, LOW);
}
delay(100); // Wait 100ms before next measurement
}