#include <LiquidCrystal.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Sensor DHT
#define DHTPIN 2
#define DHTTYPE DHT22 // Cambia a DHT22 si usas DHT22
DHT dht(DHTPIN, DHTTYPE);
// Sensor DS18B20
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensorDS18B20(&oneWire);
// Buzzer
#define BUZZER_PIN 10
// Temperaturas criticas
#define TEMP_AMB_CRITICA 35.0
#define TEMP_SUP_CRITICA 40.0
void setup() {
lcd.begin(16, 2);
dht.begin();
sensorDS18B20.begin();
pinMode(BUZZER_PIN, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Sistema minero");
lcd.setCursor(0, 1);
lcd.print("Iniciando...");
delay(2000);
lcd.clear();
}
void loop() {
float humedad = dht.readHumidity();
float tempAmbiente = dht.readTemperature();
sensorDS18B20.requestTemperatures();
float tempSuperficie = sensorDS18B20.getTempCByIndex(0);
bool alerta = false;
if (!isnan(tempAmbiente) && tempAmbiente >= TEMP_AMB_CRITICA) {
alerta = true;
}
if (tempSuperficie != DEVICE_DISCONNECTED_C && tempSuperficie >= TEMP_SUP_CRITICA) {
alerta = true;
}
lcd.clear();
if (isnan(humedad) || isnan(tempAmbiente)) {
lcd.setCursor(0, 0);
lcd.print("Error DHT");
} else {
lcd.setCursor(0, 0);
lcd.print("A:");
lcd.print(tempAmbiente, 1);
lcd.print("C ");
lcd.print("H:");
lcd.print(humedad, 0);
lcd.print("%");
}
lcd.setCursor(0, 1);
if (tempSuperficie == DEVICE_DISCONNECTED_C) {
lcd.print("Error DS18B20");
} else {
lcd.print("S:");
lcd.print(tempSuperficie, 1);
lcd.print("C ");
if (alerta) {
lcd.print("ALERTA");
} else {
lcd.print("OK");
}
}
if (alerta) {
tone(BUZZER_PIN, 1000); // Suena a 1000 Hz
} else {
noTone(BUZZER_PIN); // Apaga el buzzer
}
delay(1000);
}