#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 2 // Pin del sensor DHT22
#define DHTTYPE DHT22 // Tipo de sensor
#define BUZZER 3 // Pin del buzzer o LED de alarma
#define POT_PIN A0 // Pin del potenciómetro
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Variables para umbrales
int warningThreshold = 28; // Umbral de advertencia
int alarmThreshold = 30; // Umbral de alarma
// Lista para registro de datos
float tempReadings[10];
int readingIndex = 0;
void setup() {
lcd.begin(16, 2);
dht.begin();
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
lcd.print("Inicializando...");
delay(2000);
lcd.clear();
}
void loop() {
// Leer temperatura del sensor
float temp = dht.readTemperature();
// Leer valor del potenciómetro y actualizar umbral de alarma
int potValue = analogRead(POT_PIN);
alarmThreshold = map(potValue, 0, 1023, 30, 36); // Ajuste dinámico del umbral entre 25°C y 35°C
// Registrar lectura de temperatura en el array
tempReadings[readingIndex] = temp;
readingIndex = (readingIndex + 1) % 10;
// Mostrar en el monitor serial
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.print(" C, Umbral: ");
Serial.print(alarmThreshold);
Serial.println(" C");
// Validar si el sensor funciona correctamente
if (isnan(temp)) {
lcd.setCursor(0, 0);
lcd.print("Error al leer");
return;
}
// Mostrar temperatura en el LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
// Evaluar niveles de temperatura
if (temp >= alarmThreshold) {
digitalWrite(BUZZER, HIGH);
lcd.setCursor(0, 1);
lcd.print("ALERTA: ALTA TEMP");
} else if (temp >= warningThreshold) {
digitalWrite(BUZZER, LOW);
lcd.setCursor(0, 1);
lcd.print("ADVERTENCIA ");
} else {
digitalWrite(BUZZER, LOW);
lcd.setCursor(0, 1);
lcd.print("Temp: OK ");
}
delay(2000); // Esperar 2 segundos entre lecturas
}