#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2 // Pin del sensor DHT22
#define DHTTYPE DHT22 // Definimos el tipo de sensor como DHT22
#define LDRPIN A0 // Pin del sensor de luz (LDR)
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Configuración de la dirección I2C del LCD
void setup() {
Serial.begin(9600);
dht.begin();
lcd.begin(16, 2); // Inicializa la pantalla LCD con 16 columnas y 2 filas
lcd.backlight(); // Enciende la luz de fondo del LCD
lcd.print("Environmental");
lcd.setCursor(0, 1);
lcd.print("Monitoring");
delay(2000);
lcd.clear();
}
void loop() {
// Esperamos entre lecturas para que el sensor pueda estabilizarse
delay(2000);
// Leemos la humedad y la temperatura
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Leemos el valor de luz del LDR
int lightLevel = analogRead(LDRPIN);
// Comprobamos si alguna lectura ha fallado y salimos en caso afirmativo
if (isnan(humidity) || isnan(temperature)) {
lcd.clear();
lcd.print("Sensor Error!");
Serial.println("Failed to read from DHT sensor!");
return;
}
// Invertimos la lectura para que 0 sea oscuridad y 100% sea máxima luz
float lightPercentage = ((1023 - lightLevel) / 1023.0) * 100;
// Mostramos las lecturas en la consola serial
Serial.print("Humedad: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.print(" °C\t");
Serial.print("Luz: ");
Serial.print(lightPercentage);
Serial.println(" %");
// Mostramos las lecturas en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print(" %");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luz: ");
lcd.print(lightPercentage);
lcd.print(" %");
}