#include <DHT.h>
#include <LiquidCrystal.h>
#define DHTPIN 1 // Pin de datos para el DHT11
#define DHTTYPE DHT22 // Tipo de sensor, puedes cambiar por DHT22
float humedad;
float temperaturaC;
float temperaturaF;
float sensacionC;
float sensacionF;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Crear el objeto lcd con R/W a GND
DHT sensorDHT(DHTPIN, DHTTYPE); // Crear el objeto de tipo DHT
int PinRojo = 6; //Asignacion del puerto digital 6 para el color rojo
int PinVerde = 7; //Asignacion del puerto digital 7 para el color Verde
int PinAmarillo = 8; //Asignacion del puerto digital 8 para el color Amarillo
byte grados[] = {
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000
};
void setup() {
lcd.begin(16, 2); // Inicializar el lcd 16x2
lcd.setCursor(0, 0); // Mover el cursor a la posición 0,0
lcd.print("Automatizacion");
lcd.setCursor(0, 1); // Mover el cursor a la posición 0,1
lcd.print("para Todos");
delay(5000); // Realizar una pausa de 5 segundos
lcd.createChar(0, grados);
sensorDHT.begin();
//Configuramos los puertos digitales 6, 7, 8 y 10 como salidas
pinMode(PinVerde,OUTPUT);
pinMode(PinRojo,OUTPUT);
pinMode(PinAmarillo,OUTPUT);
//Inicializamos los puertos 6, 7 y 8 como nivel logico 0
digitalWrite(PinAmarillo, LOW);
digitalWrite(PinRojo, LOW);
digitalWrite(PinVerde, LOW);
}
void loop() {
delay(100); // Retardo para el sensor
humedad = sensorDHT.readHumidity();
temperaturaC = sensorDHT.readTemperature();
temperaturaF = sensorDHT.readTemperature(true);
if ( isnan(humedad) || isnan(temperaturaC) || isnan(temperaturaF) ) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error en el");
lcd.setCursor(1, 8);
lcd.print("sensor");
return; // Si hubo un error en la lectura, el programa sale,
// reiniciando la función loop,
} // si no hubo error, el programa continúa.
sensacionC = sensorDHT.computeHeatIndex(temperaturaC, humedad, false);
sensacionF = sensorDHT.computeHeatIndex(temperaturaF, humedad);
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(5, 0);
lcd.print(temperaturaC);
lcd.setCursor(9, 0);
lcd.write((byte)0);
lcd.setCursor(10, 0);
lcd.print("C");
if(temperaturaC < 20){ //Si la temperatura es menor a 20 grados
lcd.setCursor(0,1); //Configuramos en la primera columna y segunda fila el mensaje de temperatura baja
lcd.print("Temperatura Baja"); //Presentamos el mensaje Temperatura Baja
digitalWrite(PinAmarillo, HIGH); //Enciende el led amarillo
digitalWrite(PinVerde, LOW); //Apaga el led Verde
digitalWrite(PinRojo, LOW); //Apaga el led Rojo
}
else if(temperaturaC > 30){ //Si la temperatura es mayor a 30 grados
lcd.setCursor(0,1); //Configuramos en la primera columna y segunda fila el mensaje de temperatura baja
lcd.print("Temperatura Alta"); //Presentamos el mensaje Temperatura Alta
digitalWrite(PinAmarillo, LOW); //Apaga el led amarillo
digitalWrite(PinVerde, LOW); //Apaga el led Verde
digitalWrite(PinRojo, HIGH); //Enciende el led Rojo
}
else{ //Si no se cumple con las condiciones anteriores
lcd.setCursor(0,1); //Configuramos en la primera columna y segunda fila el mensaje de temperatura baja
lcd.print("Temperatura Norm"); //Presentamos el mensaje Temperatura normal
digitalWrite(PinAmarillo, LOW); //Apaga el led amarillo
digitalWrite(PinVerde, HIGH); //Enciende el led Verde
digitalWrite(PinRojo, LOW); //Apaga el led Rojo
}
}