#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define IR_SENSOR1 2 // First IR sensor
#define IR_SENSOR2 3 // Second IR sensor
#define BUZZER 9 // Buzzer pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address (0x27 or 0x3F), 16x2 LCD
// Distance between IR sensors (in cm)
const float sensor_distance = 10.0;
unsigned long start_time, end_time;
float speed;
void setup() {
pinMode(IR_SENSOR1, INPUT);
pinMode(IR_SENSOR2, INPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Speed Detection");
delay(2000);
lcd.clear();
}
void loop() {
if (digitalRead(IR_SENSOR1) == LOW) { // First sensor triggered
start_time = millis(); // Start time
while (digitalRead(IR_SENSOR2) == HIGH); // Wait for second sensor
end_time = millis(); // End time
float time_taken = (end_time - start_time) / 1000.0; // Convert to seconds
speed = (sensor_distance / time_taken) * 0.036; // Convert to km/h
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Speed: ");
lcd.print(speed);
lcd.print(" km/h");
if (speed > 40.0) { // Speed limit (adjustable)
digitalWrite(BUZZER, HIGH);
lcd.setCursor(0, 1);
lcd.print("Over Speed!");
delay(2000);
digitalWrite(BUZZER, LOW);
}
delay(2000);
}
}