#include <ESP32Servo.h> // Librería para el movimiento del garaje
// --- DEFINICIÓN DE OBJETOS Y VARIABLES ---
Servo miGaraje;
// Pines Módulo 1: Seguridad (PIR, Buzzer, LED Rojo)
const int pinPIR = 14; // Sensor de movimiento [cite: 398]
const int pinBuzzer = 12; // Alarma sonora [cite: 398]
const int pinLEDRojo = 13; // Indicador de intruso [cite: 398]
// Pines Módulo 2: Autonomía (LDR, Ultrasonido, Servo, LED Iluminación)
const int pinLDR = 35; // Sensor de luz (ADC)
const int pinTrig = 5; // Disparador Ultrasonido
const int pinEcho = 18; // Receptor Ultrasonido
const int pinServo = 4; // Motor del garaje
const int pinLEDLuces = 2; // Iluminación automática de la casa
// Variables de estado
int estadoPIR = 0;
int nivelLuz = 0;
long duracion;
float distancia;
void setup() {
Serial.begin(115200);
// Configuración Módulo 1 [cite: 448, 450, 451]
pinMode(pinPIR, INPUT);
pinMode(pinLEDRojo, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
// Configuración Módulo 2
pinMode(pinLDR, INPUT);
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
pinMode(pinLEDLuces, OUTPUT);
miGaraje.attach(pinServo);
miGaraje.write(0); // Garaje cerrado al iniciar
Serial.println("MendelBot: ¡Sistema Integrado ECO-HÁBITAT 2050 Iniciado!");
}
void loop() {
// --- 1. SEGURIDAD (Módulo 1) ---
estadoPIR = digitalRead(pinPIR);
if (estadoPIR == HIGH) {
Serial.println("¡INTRUSO DETECTADO! Activando Alarma...");
// Alarma intermitente [cite: 468]
for (int i = 0; i < 5; i++) {
digitalWrite(pinLEDRojo, HIGH);
digitalWrite(pinBuzzer, HIGH);
delay(150);
digitalWrite(pinLEDRojo, LOW);
digitalWrite(pinBuzzer, LOW);
delay(150);
}
}
// --- 2. ILUMINACIÓN AUTOMÁTICA (Módulo 2 - Física de la Luz) ---
nivelLuz = analogRead(pinLDR);
if (nivelLuz > 2500) { // Umbral de oscuridad
digitalWrite(pinLEDLuces, HIGH);
} else {
digitalWrite(pinLEDLuces, LOW);
}
// --- 3. ACCESO AL GARAJE (Módulo 2 - Física del Sonido) ---
digitalWrite(pinTrig, LOW);
delayMicroseconds(2);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
duracion = pulseIn(pinEcho, HIGH);
distancia = duracion * 0.0343 / 2; // Cálculo basado en la velocidad del sonido
if (distancia > 0 && distancia < 12) {
Serial.print("Vehículo a: ");
Serial.print(distancia);
Serial.println("cm. Abriendo garaje...");
miGaraje.write(90); // Abre la vara
delay(5000); // Tiempo para que entre el carro
miGaraje.write(0); // Cierra automáticamente
}
delay(200); // Estabilidad del sistema
}