#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Definir pines del sensor DHT22
#define DHTPIN 4
#define DHTTYPE DHT22
// Definir pines del relé
const int relayPin = 8;
// Definir dirección I2C de la pantalla LCD
const int address = 0x27;
const int rows = 2;
const int cols = 16;
// Crear instancia del sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
// Crear instancia de la pantalla LCD
LiquidCrystal_I2C lcd(address, rows, cols);
// Variables para almacenar valores de temperatura y humedad
float temperature;
float humidity;
// Variable para controlar el estado del riego
bool riegoEnCurso = false;
// Niveles de humedad y temperatura para activar el riego
const int umbralHumedad = 50;
const float umbralTemperatura = 28;
// Tiempo de riego en milisegundos
const int tiempoRiego = 7000; // 7 segundos
void setup() {
// Inicializar pines del relé como salida
pinMode(relayPin, OUTPUT);
// Inicializar comunicación I2C y la pantalla LCD
lcd.init();
lcd.backlight();
// Iniciar la comunicación con el sensor DHT22
dht.begin();
}
void loop() {
// Leer datos del sensor DHT22
leerSensorDHT22();
// Condición para activar el riego
if (!riegoEnCurso && humidity < umbralHumedad && temperature > umbralTemperatura) {
activarRiego();
delay(tiempoRiego);
desactivarRiego();
}
}
void leerSensorDHT22() {
// Iniciar la comunicación con el sensor DHT22
dht.begin();
// Leer valores de temperatura y humedad
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Si se produce un error, mostrar mensaje
if (isnan(temperature) || isnan(humidity)) {
lcd.print("Error sensor DHT22!");
} else {
// Mostrar valores de temperatura y humedad en la pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Humedad: ");
lcd.print(humidity);
lcd.print("%");
}
}
void activarRiego() {
// Activar el relé (encendiendo la bomba de agua)
digitalWrite(relayPin, HIGH);
// Cambiar estado de la variable `riegoEnCurso` a `true`
riegoEnCurso = true;
// Mostrar mensaje "Regando..." en la pantalla LCD
lcd.setCursor(0, 1);
lcd.print("Regando...");
}
void desactivarRiego() {
// Desactivar el relé (apagando la bomba de agua)
digitalWrite(relayPin, LOW);
// Cambiar estado de la variable `riegoEnCurso` a `false`
riegoEnCurso = false;
// Leer y mostrar nuevamente los valores de temperatura y humedad
leerSensorDHT22();
}