#define TRIG_PIN 5 // HC-SR04 Trigger pin
#define ECHO_PIN 18 // HC-SR04 Echo pin
#define RED_LED 21 // Red LED pin
#define GREEN_LED 19 // Green LED pin
#define YELLOW_LED 23 // Yellow LED pin
#define BUZZER_PIN 22 // Buzzer pin
// Thresholds for distance control
#define DANGER_DISTANCE 10 // Critical zone for red LED & buzzer
#define WARNING_DISTANCE 20 // Warning zone for yellow LED
#define SAFE_DISTANCE 30 // Safe zone for green LED
// Function to calculate distance in cm
long getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
long distance = duration * 0.034 / 2; // Convert time to distance
return distance;
}
void setup() {
Serial.begin(115200);
// Pin modes
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Start with all LEDs and buzzer off
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
void loop() {
long distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Logic for LEDs and buzzer
if (distance < DANGER_DISTANCE) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(BUZZER_PIN, HIGH); // Buzzer ON for danger
}
else if (distance < WARNING_DISTANCE) {
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(BUZZER_PIN, LOW); // Buzzer OFF
}
else if (distance < SAFE_DISTANCE) {
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(BUZZER_PIN, LOW); // Buzzer OFF
}
else {
// All off if distance is safe
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
delay(500); // Delay for stable readings
}