#include <Servo.h>
// Definimos los pines
const int pinPIR = 2; // Pin de salida del sensor PIR
Servo servoMotor;
unsigned long lastDetectionTime = 0;
const unsigned long detectionInterval = 10000; // minutes in milliseconds
bool motionDetected = false;
void setup() {
// Inicializamos los pines
pinMode(pinPIR, INPUT);
// Inicializamos la comunicación serie para monitorear el sensor
Serial.begin(9600);
// Inicializamos el servo
servoMotor.attach(3); // Conecta el servo al pin 3
servoMotor.write(10); // Inicializa el servo a 10 grados
}
void loop() {
// Leemos el estado del sensor PIR
int estadoPIR = digitalRead(pinPIR);
unsigned long currentTime = millis();
Serial.println(currentTime);
// Si detecta movimiento y ha pasado el intervalo de tiempo
if (estadoPIR == HIGH && !motionDetected) {
motionDetected = true; // Indica que se detectó movimiento
lastDetectionTime = currentTime; // Reinicia el temporizador
Serial.println(lastDetectionTime);
Serial.println(currentTime);
Serial.println("Movimiento detectado, sleep de 5 segundos ");
// Subir puerta
for (int i = 10; i <= 140; i++) {
servoMotor.write(i);
}
// Sleep de 5 segundos
delay(10000);
// Bajar puerta
for (int i = 140; i >= 10; i--) {
servoMotor.write(i);
delay(15); // Añade un pequeño retraso para permitir que el servo se mueva
}
}
// Restablece el estado de detección después del intervalo de tiempo
if (motionDetected && currentTime - lastDetectionTime >= detectionInterval) {
motionDetected = false;
}
delay(100);
}