Arduino-Based Smart Speed Breaker and Pedestrian Detection System
View and Edit Project In Cirkit Designer
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
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
HC-SR04 Ultrasonic Sensor
- Description: Ultrasonic distance sensor.
- Pins: VCC, TRIG, ECHO, GND
Micro servo 9G
- Description: Small servo motor.
- Pins: GND, +5V, PWM
LED: Two Pin (red)
- Description: Red LED.
- Pins: cathode, anode
Resistor
- Description: 220 Ohms resistor.
- Pins: pin1, pin2
- Properties: Resistance = 220 Ohms
Piezo Buzzer
- Description: Buzzer for sound output.
- Pins: pin 1, pin 2
Wiring Details
Arduino UNO (1)
- 5V to Micro servo 9G (+5V)
- GND to Micro servo 9G (GND)
- GND to Piezo Buzzer (pin 2)
- D12 to Micro servo 9G (PWM)
- D11 to Piezo Buzzer (pin 1)
- D5 to HC-SR04 Ultrasonic Sensor (ECHO)
- D4 to HC-SR04 Ultrasonic Sensor (TRIG)
- D1 to Arduino UNO (2) (D0)
- D0 to Arduino UNO (2) (D1)
Arduino UNO (2)
- 5V to HC-SR04 Ultrasonic Sensor (VCC)
- GND to HC-SR04 Ultrasonic Sensor (GND)
- GND to Resistor (pin1)
- D6 to LED: Two Pin (red) (anode)
- D3 to HC-SR04 Ultrasonic Sensor (ECHO)
- D2 to HC-SR04 Ultrasonic Sensor (TRIG)
- Resistor (pin2) to LED: Two Pin (red) (cathode)
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
}