Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino-Based Smart Speed Breaker and Pedestrian Detection System

View and Edit Project In Cirkit DesignerImage of Arduino-Based Smart Speed Breaker and Pedestrian Detection System

Circuit Documentation

Summary

This circuit involves two Arduino UNO microcontrollers, multiple sensors, and actuators to detect vehicles and pedestrians. The system uses ultrasonic sensors to measure distances and trigger actions such as raising a speed breaker, activating a buzzer, and blinking an LED. The two Arduinos communicate with each other to coordinate actions based on the detected conditions.

Component List

  1. Arduino UNO

    • Description: Microcontroller board based on the ATmega328P.
    • Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
  2. HC-SR04 Ultrasonic Sensor

    • Description: Ultrasonic distance sensor.
    • Pins: VCC, TRIG, ECHO, GND
  3. Micro servo 9G

    • Description: Small servo motor.
    • Pins: GND, +5V, PWM
  4. LED: Two Pin (red)

    • Description: Red LED.
    • Pins: cathode, anode
  5. Resistor

    • Description: 220 Ohms resistor.
    • Pins: pin1, pin2
    • Properties: Resistance = 220 Ohms
  6. Piezo Buzzer

    • Description: Buzzer for sound output.
    • Pins: pin 1, pin 2

Wiring Details

Arduino UNO (1)

Arduino UNO (2)

Code Documentation

Arduino UNO (1) Code

#include <Servo.h>

#define TRIG_VEHICLE_PIN 4
#define ECHO_VEHICLE_PIN 5
#define BUZZER_PIN 11
#define SERVO_PIN 12

#define VEHICLE_DETECTION_DIST 200 // Distance in cm for vehicle detection

Servo speedBreakerServo;

void setup() {
  // Setup pins
  pinMode(TRIG_VEHICLE_PIN, OUTPUT);
  pinMode(ECHO_VEHICLE_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  
  // Attach the servo motor
  speedBreakerServo.attach(SERVO_PIN);
  speedBreakerServo.write(0);  // Start with speed breaker lowered
  
  // Initialize serial communication
  Serial.begin(9600);
}

void loop() {
  long vehicleDistance = measureDistance(TRIG_VEHICLE_PIN, ECHO_VEHICLE_PIN);

  // Handle vehicle detection (buzzer and speed breaker)
  if (vehicleDistance > 0 && vehicleDistance <= VEHICLE_DETECTION_DIST) {
    digitalWrite(BUZZER_PIN, HIGH);  // Activate buzzer
    raiseSpeedBreaker();
  } else {
    digitalWrite(BUZZER_PIN, LOW);   // Deactivate buzzer
    lowerSpeedBreaker();
  }

  // Check for pedestrian signal from Arduino 1
  if (Serial.available() > 0) {
    String message = Serial.readStringUntil('\n');
    if (message == "PEDESTRIAN_DETECTED") {
      // Take action if a pedestrian is detected (for example, turn on warning lights)
      digitalWrite(BUZZER_PIN, HIGH);  // Optionally, trigger some alert for vehicles
    }
  }

  delay(100);  // Small delay for stability
}

// Measure distance using the ultrasonic sensor
long measureDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2);  
  digitalWrite(trigPin, HIGH);  
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);  
  long duration = pulseIn(echoPin, HIGH);
  long distance = (duration / 2) / 29.1; // Convert duration to distance in cm
  return distance;
}

// Raise the speed breaker (servo)
void raiseSpeedBreaker() {
  speedBreakerServo.write(90);  // Move servo to raise speed breaker
}

// Lower the speed breaker (servo)
void lowerSpeedBreaker() {
  speedBreakerServo.write(0);  // Move servo to lower speed breaker
}

Arduino UNO (2) Code

#define TRIG_PED_PIN 2
#define ECHO_PED_PIN 3
#define LED_PIN 6    // Single LED pin

#define PED_DETECTION_DIST 50 // Distance in cm for pedestrian detection

void setup() {
  // Setup pins
  pinMode(TRIG_PED_PIN, OUTPUT);
  pinMode(ECHO_PED_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  // Initialize serial communication to send data to Arduino 2
  Serial.begin(9600);
}

void loop() {
  long pedestrianDistance = measureDistance(TRIG_PED_PIN, ECHO_PED_PIN);

  // Handle pedestrian detection (blink LED)
  if (pedestrianDistance > 0 && pedestrianDistance <= PED_DETECTION_DIST) {
    blinkLED();
    Serial.println("PEDESTRIAN_DETECTED");  // Send signal to Arduino 2
  } else {
    digitalWrite(LED_PIN, LOW);  // Turn off LED if no pedestrian detected
    Serial.println("NO_PEDESTRIAN");  // Send no pedestrian signal to Arduino 2
  }

  delay(100); // Small delay for stability
}

// Measure distance using the ultrasonic sensor
long measureDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2);  
  digitalWrite(trigPin, HIGH);  
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);  
  long duration = pulseIn(echoPin, HIGH);
  long distance = (duration / 2) / 29.1; // Convert duration to distance in cm
  return distance;
}

// Blink LED for pedestrian detection
void blinkLED() {
  digitalWrite(LED_PIN, HIGH);
  delay(100);  // LED on for 100 ms
  digitalWrite(LED_PIN, LOW);
  delay(100);  // LED off for 100 ms
}