#include <DHT.h>
// Pines para el sensor DHT22
#define DHT_PIN D10
#define DHT_TYPE DHT22
// Pines para botones y LEDs
const int boton1 = D2;
const int boton2 = D3;
const int ledTemperatura = D4;
const int ledHumedad = D5;
// Umbrales de alarma
const float TEMP_UMBRAL = 45.0;
const float HUM_MIN = 25.0;
const float HUM_MAX = 60.0;
// Variables de estado
bool alarmaTemperatura = false;
bool alarmaHumedad = false;
// Objeto DHT
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
// Configurar pines
pinMode(boton1, INPUT_PULLUP);
pinMode(boton2, INPUT_PULLUP);
pinMode(ledTemperatura, OUTPUT);
pinMode(ledHumedad, OUTPUT);
// Iniciar sensor DHT
dht.begin();
// Iniciar comunicación serial
Serial.begin(9600);
Serial.println("Sistema de Alarma DHT22 Iniciado");
}
void loop() {
// Leer sensor cada segundo
leerSensor();
// Verificar botones - ambos apagan todas las alarmas
verificarBotones();
// Controlar LEDs
controlarLEDs();
delay(1000); // Esperar 1 segundo
}
void leerSensor() {
// Leer temperatura y humedad
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
// Verificar si la lectura es válida
if (isnan(temperatura) || isnan(humedad)) {
Serial.println("Error leyendo sensor DHT22");
return;
}
// Mostrar valores en serial
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print("°C | Humedad: ");
Serial.print(humedad);
Serial.println("%");
// Verificar umbrales y activar alarmas
if (temperatura > TEMP_UMBRAL) {
alarmaTemperatura = true;
Serial.println("ALARMA: Temperatura alta!");
}
if (humedad < HUM_MIN || humedad > HUM_MAX) {
alarmaHumedad = true;
Serial.println("ALARMA: Humedad fuera de rango!");
}
}
void verificarBotones() {
// Cualquier botón apaga ambas alarmas
if (digitalRead(boton1) == LOW || digitalRead(boton2) == LOW) {
alarmaTemperatura = false;
alarmaHumedad = false;
Serial.println("Todas las alarmas desactivadas");
delay(300); // Debounce
}
}
void controlarLEDs() {
// Controlar LED de temperatura
digitalWrite(ledTemperatura, alarmaTemperatura ? HIGH : LOW);
// Controlar LED de humedad
digitalWrite(ledHumedad, alarmaHumedad ? HIGH : LOW);
}