Car/Moving Object Speed Detector Using Arduino

https://ogbugbu-technologies.com.ng/

How the System Works

  • Two IR sensors are placed 20 cm apart on a simulated road setup
  • When a vehicle passes the first sensor, a timer starts
  • The timer stops when the vehicle passes the second sensor
  • Speed is calculated using the formula: Speed = Distance / Time
  • The system scales the measurement to simulate a 5-meter distance for practical application
  • Speed is converted to km/h and displayed on the LCD
  • If speed exceeds 50 km/h, the buzzer sounds and displays “Over Speeding”
  • For normal speeds, the display shows “Normal Speed”

Materials Required

  • Arduino UNO
  • IR Sensors
  • LCD Display with I2C Module
  • Mini Breadboard 
  • Jumper Wires
  • Buzzer
  • MDF Board 

Step-by-Step Assembly

1. Setup the Road Simulation:

  • Cover an MDF board with black paper to simulate road surface
  • Add white paper strips as road markings for realistic appearance
  • Mount the two IR sensors exactly 20 cm apart

2. Wiring the Circuit:

  • Connect the first IR sensor to pin 2 of Arduino
  • Connect the second IR sensor to pin 3 of Arduino
  • Connect LCD I2C module to SDA (A4) and SCL (A5) pins
  • Connect buzzer to pin 11
  • Use breadboard for power distribution (5V and GND connections)

3. Arduino Code:

  • Upload the provided Arduino code
  • Adjust speed threshold (50 km/h default) if needed
  • Modify scaling factors for different simulation distances

4. Testing the System:

  • Move an object (or toy car) past both sensors
  • Verify speed calculation and display on LCD
  • Test buzzer activation when exceeding speed limit
  • Check “Normal Speed” display for compliant speeds

Circuit Diagram

Arduino Code

Once the circuit is set up, upload the following code to the Arduino UNO using the Arduino IDE.

#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

float timer1;
float timer2;
float Time;

int flag1 = 0;
int flag2 = 0;

const float ACTUAL_DISTANCE = 0.2;  // Real distance: 20 cm (0.2 m)
const float SIMULATED_DISTANCE = 5.0; // Fake distance for scaling (5 m)
float speed;

int ir_s1 = 2;
int ir_s2 = 3;
int buzzer = 11;

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  pinMode(ir_s1, INPUT);
  pinMode(ir_s2, INPUT);
  pinMode(buzzer, OUTPUT);

  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("   WELCOME TO ");
  lcd.setCursor(0, 1);
  lcd.print("Simple Circuits ");
  delay(2000);
  lcd.clear();
}

void loop() {
  if (digitalRead(ir_s1) == LOW && flag1 == 0) { timer1 = millis(); flag1 = 1; }
  if (digitalRead(ir_s2) == LOW && flag2 == 0) { timer2 = millis(); flag2 = 1; }

  if (flag1 == 1 && flag2 == 1) {
    if (timer1 > timer2) { Time = timer1 - timer2; }
    else if (timer2 > timer1) { Time = timer2 - timer1; }
    Time = Time / 1000; // Convert ms to seconds
    
    speed = (ACTUAL_DISTANCE / Time); // Speed in m/s
    speed = speed * (SIMULATED_DISTANCE / ACTUAL_DISTANCE); // Scale up
    speed = speed * 3.6; // Convert to km/h
  }

  if (speed == 0) {
    lcd.setCursor(0, 1);
    if (flag1 == 0 && flag2 == 0) { lcd.print("No Car Detected"); }
    else { lcd.print("Searching...    "); }
  }
  else {
    lcd.setCursor(0, 0);
    lcd.clear();
    lcd.print("Speed:");
    lcd.print(speed, 1);
    lcd.print("Km/Hr  ");
    lcd.setCursor(0, 1);
    if (speed > 50) { lcd.print("  Over Speeding  "); digitalWrite(buzzer, HIGH); }
    else { lcd.print("  Normal Speed   "); }
    delay(3000);
    digitalWrite(buzzer, LOW);
    speed = 0;
    flag1 = 0;
    flag2 = 0;
  }
}

Code Explanation:

Setup:

Initializes the LCD display, IR sensors, and buzzer. Sets up the welcome message that displays for 2 seconds on startup.

Loop:

Continuously monitors both IR sensors. When a vehicle is detected at the first sensor, it starts a timer. When detected at the second sensor, it stops the timer and calculates the speed using the time difference. The speed is then scaled to simulate a longer distance (5 meters) and converted to km/h. If the speed exceeds 50 km/h, it triggers the buzzer and displays an over-speed warning.


Why Choose This Design?

  • ✅ Accurate Measurement: Precise speed calculation using time difference between two points
  • 🚗 Realistic Simulation: Scaled to simulate actual road conditions despite small physical setup
  • 📊 Clear Display: LCD shows speed in km/h with clear status messages
  • ⚠️ Safety Alert: Audible buzzer warning for speeding vehicles
  • 🛠️ DIY Friendly: Simple components and wiring, no soldering required
  • 📱 Educational: Great for learning about sensors, timing, and physics calculations

About ogbugbu-technologies.com.ng

View all posts by ogbugbu-technologies.com.ng →

Leave a Reply

Your email address will not be published. Required fields are marked *