// ESP32 LED + Buzzer + Ultrasonic Sensor Distance Alert System
// LED: GPIO 12, Buzzer: GPIO 13, Ultrasonic Trig: GPIO 14, Echo: GPIO 15
#define LED_PIN 12
#define BUZZER_PIN 13
#define TRIG_PIN 14
#define ECHO_PIN 15
// Distance thresholds in cm
#define FAR_THRESHOLD 30
#define MEDIUM_THRESHOLD 20
#define CLOSE_THRESHOLD 10
// Timing variables
unsigned long previousMillis = 0;
unsigned long buzzerPreviousMillis = 0;
bool ledState = false;
bool buzzerState = false;
void setup() {
// Initialize pins
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Initialize serial communication
Serial.begin(115200);
Serial.println("ESP32 Distance Alert System Started");
// Ensure devices start in OFF state
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
void loop() {
float distance = getDistance();
// Print distance for debugging
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Control LED and buzzer based on distance
if (distance > FAR_THRESHOLD) {
// No activity for distances > 30cm
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Status: Safe distance - No alerts");
} else if (distance > MEDIUM_THRESHOLD && distance <= FAR_THRESHOLD) {
// 20-30cm: Slow LED blinking, no buzzer
slowLedBlink();
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Status: Medium distance - Slow LED blink");
} else if (distance > CLOSE_THRESHOLD && distance <= MEDIUM_THRESHOLD) {
// 10-20cm: Fast LED blinking + slow buzzer beeps
fastLedBlink();
slowBuzzerBeep();
Serial.println("Status: Close distance - Fast LED + Slow buzzer");
} else if (distance <= CLOSE_THRESHOLD) {
// < 10cm: Constant buzzer + very fast LED blinking
veryFastLedBlink();
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Status: Very close - Constant buzzer + Very fast LED");
}
delay(50); // Small delay for stability
}
float getDistance() {
// Send ultrasonic pulse
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Read echo pulse duration
long duration = pulseIn(ECHO_PIN, HIGH);
// Calculate distance in cm (speed of sound = 343 m/s)
float distance = (duration * 0.034) / 2;
// Return 400 if no echo received (out of range)
if (distance == 0) {
return 400;
}
return distance;
}
void slowLedBlink() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) { // 1 second interval
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
}
void fastLedBlink() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 300) { // 300ms interval
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
}
void veryFastLedBlink() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 100) { // 100ms interval
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
}
void slowBuzzerBeep() {
unsigned long currentMillis = millis();
if (currentMillis - buzzerPreviousMillis >= 800) { // 800ms interval
buzzerPreviousMillis = currentMillis;
buzzerState = !buzzerState;
digitalWrite(BUZZER_PIN, buzzerState);
}
}