#include <ESP32Servo.h>
// Definición de pines
const int trigPin = 23;
const int echoPin = 22;
const int servoPin = 18;
const int speakerPin = 19;
const int ledPin = 21;
// Instancia del servo
Servo servo;
// Variables para el sensor ultrasónico
long duration;
int distance;
// Distancia mínima para activar la puerta
const int thresholdDistance = 50; // en cm
void setup() {
// Inicialización de los pines
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(speakerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// Inicialización del servo
servo.attach(servoPin);
servo.write(0); // Puerta cerrada
// Inicialización de la comunicación serie
Serial.begin(115200);
}
void loop() {
// Medir la distancia usando el sensor ultrasónico
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Mostrar la distancia medida en el monitor serie
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
// Si la distancia es menor que el umbral, abrir la puerta
if (distance < thresholdDistance) {
abrirPuerta();
} else {
cerrarPuerta();
}
// Esperar un momento antes de la próxima medición
delay(500);
}
void abrirPuerta() {
// Abrir la puerta moviendo el servo
servo.write(90); // Posición abierta
// Encender el LED
digitalWrite(ledPin, HIGH);
// Emitir sonido de apertura
tone(speakerPin, 1000, 500); // 1000 Hz por 500 ms
Serial.println("Puerta Abierta");
}
void cerrarPuerta() {
// Cerrar la puerta moviendo el servo
servo.write(0); // Posición cerrada
// Apagar el LED
digitalWrite(ledPin, LOW);
// Emitir sonido de cierre
tone(speakerPin, 500, 500); // 500 Hz por 500 ms
Serial.println("Puerta Cerrada");
}