#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 2 // Pin del sensor DHT11
#define DHTTYPE DHT11 // Tipo de sensor DHT
#define FC28_PIN A1 // Pin analógico para el sensor FC-28
#define LCD_RS 12 // Pin RS del LCD
#define LCD_EN 11 // Pin E del LCD
#define LCD_D4 7 // Pins D4-D7 del LCD
#define LCD_D5 6
#define LCD_D6 5
#define LCD_D7 4
#define POT_PIN A0 // Pin del potenciómetro
#define RELAY_PIN 8 // Pin para controlar el relé o transistor
// Inicializar el LCD
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
// Inicializar el sensor DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Inicialización de la pantalla LCD
lcd.begin(16, 2);
// Inicialización del sensor DHT
dht.begin();
// Inicialización del pin de control del relé o transistor
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Apagar inicialmente la bomba de agua y la luz
// Mostrar mensaje inicial en la pantalla LCD
lcd.print("Invernadero");
lcd.setCursor(0, 1);
lcd.print("Cargando...");
delay(2000); // Espera para que se lea el mensaje inicial
// Limpiar la pantalla
lcd.clear();
}
void loop() {
// Lectura de la humedad y temperatura
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Lectura del sensor de humedad FC-28
int soilMoisture = analogRead(FC28_PIN);
// Lectura del valor del potenciómetro para controlar la velocidad de la pantalla
int delayTime = map(analogRead(POT_PIN), 0, 1023, 200, 2000); // Mapear el valor a un rango de tiempo razonable
// Mostrar la humedad y temperatura en la pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
// Controlar la bomba de agua y la luz según los valores de humedad y temperatura
// Ejemplo básico: activar la bomba si la humedad del suelo es baja y encender la luz si la temperatura es alta
if (soilMoisture < 500) {
// Encender la bomba de agua
digitalWrite(RELAY_PIN, HIGH);
} else {
// Apagar la bomba de agua
digitalWrite(RELAY_PIN, LOW);
}
// Espera antes de volver a actualizar la pantalla (controlado por el potenciómetro)
delay(delayTime);
}