#include <Servo.h>
const int trigPin = 8; // Pin de disparo del sensor ultrasónico
const int echoPin = 9; // Pin de eco del sensor ultrasónico
const int servoPin = 10; // Pin del servomotor
const int ledPin = 13; // Pin del LED (opcional)
const int openThreshold = 10; // Distancia en cm para abrir la puerta
const int openPosition = 90; // Posición de la puerta abierta
const int closedPosition = 0; // Posición de la puerta cerrada
Servo myServo;
bool puertaAbierta = false; // Estado de la puerta
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
myServo.attach(servoPin);
myServo.write(closedPosition); // Inicialmente, la puerta está cerrada
digitalWrite(ledPin, LOW); // LED apagado
Serial.begin(9600);
}
void loop() {
long duration;
int distance;
// Enviar pulso al sensor ultrasónico
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Leer el pulso de retorno del sensor
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1; // Convertir tiempo a distancia
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < openThreshold && !puertaAbierta) {
abrirPuerta();
puertaAbierta = true;
} else if (distance >= openThreshold && puertaAbierta) {
cerrarPuerta();
puertaAbierta = false;
}
delay(500); // Espera para evitar lecturas continuas
}
void abrirPuerta() {
for (int pos = closedPosition; pos <= openPosition; pos += 1) {
myServo.write(pos);
delay(15); // Ajustar velocidad de apertura
}
digitalWrite(ledPin, HIGH); // Enciende el LED
Serial.println("Puerta abierta.");
}
void cerrarPuerta() {
for (int pos = openPosition; pos >= closedPosition; pos -= 1) {
myServo.write(pos);
delay(15); // Ajustar velocidad de cierre
}
digitalWrite(ledPin, LOW); // Apaga el LED
Serial.println("Puerta cerrada.");
}