Wednesday, August 20, 2025

Speed measurement project Vedant Amit

 #include <Wire.h>

#include <LiquidCrystal_I2C.h>

// ===== LCD Setup =====
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Change 0x27 to 0x3F if your module uses that address

// ===== Sensor pins =====
const int sensor1Pin = 2;
const int sensor2Pin = 3;

// ===== Variables =====
volatile unsigned long startTime = 0;
volatile unsigned long endTime = 0;
volatile bool firstSensorTriggered = false;
float distance = 0.20;  // distance between sensors in meters (example: 20 cm = 0.20 m)
float speed = 0.0;

void setup() {
  pinMode(sensor1Pin, INPUT);
  pinMode(sensor2Pin, INPUT);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Vehicle Speed");
  lcd.setCursor(0,1);
  lcd.print("Waiting...");

  Serial.begin(9600);
}

void loop() {
  int sensor1State = digitalRead(sensor1Pin);
  int sensor2State = digitalRead(sensor2Pin);

  // When first sensor detects vehicle
  if (sensor1State == LOW && !firstSensorTriggered) {
    startTime = millis();      // record start time
    firstSensorTriggered = true;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Vehicle Detected");
  }

  // When second sensor detects vehicle
  if (sensor2State == LOW && firstSensorTriggered) {
    endTime = millis();        // record end time
    unsigned long timeDiff = endTime - startTime; // time in ms

    // Calculate speed
    float timeSec = timeDiff / 1000.0;           // convert ms to seconds
    speed = distance / timeSec;                  // speed in m/s
    float speedKmHr = speed * 3.6;               // convert to km/h

    // Display on LCD
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Speed:");
    lcd.setCursor(0,1);
    lcd.print(speedKmHr);
    lcd.print(" km/h");

    // Print on Serial Monitor
    Serial.print("Time (s): ");
    Serial.print(timeSec);
    Serial.print("  Speed: ");
    Serial.print(speedKmHr);
    Serial.println(" km/h");

    // Reset flag
    firstSensorTriggered = false;
    delay(2000); // pause before next vehicle
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Waiting...");
  }
}

No comments:

Post a Comment

MUD Three Mode operation Manual Automatic GPS

 Code for three mode operation: /*   3-Mode Headlight Controller   - Manual mode (driver uses a toggle to pick high/low)   - Auto mode (LDR...