#include <DHT.h> // Incluye la biblioteca DHT para el sensor de temperatura y humedad
#include <SoftwareSerial.h> // Incluye la biblioteca SoftwareSerial para la comunicación con el módulo SIM800L
#define DHT_PIN 2 // Pin donde está conectado el sensor DHT22
#define AMMONIA_PIN A0 // Pin analógico donde está conectado el sensor de amoníaco
#define PHONE_NUMBER "1234567890" // Reemplaza con el número de teléfono para recibir alertas SMS
#define AMMONIA_THRESHOLD 500 // Define el umbral para los niveles de amoníaco
DHT dht(DHT_PIN, DHT22); // Inicializa el objeto DHT para el sensor de temperatura y humedad
SoftwareSerial sim800l(10, 11); // RX, TX para la comunicación con el SIM800L
void setup() {
Serial.begin(9600); // Inicializa la comunicación serial a 9600 baudios para la depuración
dht.begin(); // Inicializa el sensor DHT
sim800l.begin(9600); // Inicializa la comunicación con el módulo SIM800L
}
void loop() {
delay(2000); // Ajusta el retardo según tus requisitos
float temperature = dht.readTemperature(); // Lee la temperatura del sensor DHT
float humidity = dht.readHumidity(); // Lee la humedad del sensor DHT
int ammoniaValue = analogRead(AMMONIA_PIN); // Lee el valor del sensor de amoníaco
// Comprueba si las lecturas de los sensores son válidas
if (!isnan(temperature) && !isnan(humidity)) {
// Comprueba si la temperatura y los niveles de amoníaco exceden los umbrales
if (temperature >= 28 && temperature <= 32 && ammoniaValue > AMMONIA_THRESHOLD) {
sendAlertSMS(); // Envía la alerta SMS
}
} else {
Serial.println("Error leyendo datos del sensor."); // Imprime un mensaje de error si hay problemas con los sensores
}
}
void sendAlertSMS() {
sim800l.println("AT+CMGF=1"); // Establece el modo SMS a texto
delay(1000);
sim800l.print("AT+CMGS=\"");
sim800l.print(PHONE_NUMBER); // Envía el número de teléfono al que se enviará el SMS
sim800l.println("\"");
delay(1000);
sim800l.print("Alerta: ¡La temperatura y/o los niveles de amoníaco han excedido el límite!"); // Envía el mensaje de alerta
sim800l.write(26); // Finaliza con Ctrl+Z
delay(1000);
}