// Este programa es útil para monitorear condiciones ambientales en tiempo real utilizando un sensor DHT22 y un microcontrolador ESP32.
// se puede usar una resistencia entre 4.7K y 10K segun se quiera.
#include <DHT.h>
//#include <LiquidCrystal.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
//LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
//#define pinTemp A5
byte grado[8] = {
0b00100,
0b01010,
0b00100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
// Variable para alternar entre las pantallas
int screenState = 0;
unsigned long previousMillis = 0;
const long interval = 5000; // Intervalo de tiempo para alternar entre pantallas (5 segundos)
// Definir el pin del sensor DHT
#define DHTPIN 4 // Pin digital conectado al sensor DHT
#define DHTTYPE DHT22 // Definir el tipo de sensor DHT
// Inicializar el sensor DHT
DHT dht(DHTPIN, DHTTYPE);
float temperature;
float humidity;
int counter;
void setup() {
// Configuración inicial
Serial.begin(9600);
Serial.println("INICIO PROGRAMA");
dht.begin(); // Iniciar el sensor DHT
//pinMode(pinTemp,INPUT);
lcd.createChar(0, grado); // Cargar el símbolo de grados en la posición 0
lcd.begin(16, 2);
lcd.write("Temperatura :");
// you can now interact with the LCD, e.g.:
//lcd.print("Temperatura :");
}
void loop() {
// Leer la temperatura y la humedad del sensor DHT
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Comprobar si hay algún error en la lectura
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Error obteniendo los datos del sensor DHT22");
return;
}
Serial.println("Data: " + String(counter));
// Imprimir los valores de temperatura en Celsius
float temperatureC = temperature;
Serial.print("Temperatura Celsius:\t");
//Serial.print(temperature);
Serial.print(temperatureC);
Serial.println("C");
// Imprimir los valores de temperatura en Fahrenheit
float temperatureF = dht.readTemperature(true);
Serial.print("Temperatura Fahrenheit:\t");
//Serial.print(dht.readTemperature(true));
Serial.print(temperatureF);
Serial.println("F");
// Convertir a Kelvin
float temperatureK = temperatureC + 273.15;
Serial.print("Temperatura Kelvin:\t");
Serial.print(temperatureK);
Serial.println("");
// Convertir a Rankine
float temperatureR = ((temperatureC) * (9.0 / 5.0)) + 491.67;
Serial.print("Temperatura Rankie:\t");
Serial.print(temperatureR);
Serial.println("");
// Imprimir la humedad en porcentaje
float humedad = humidity;
Serial.println("Humedad: \t\t" + String(humidity) + "%");
// Imprimir el índice de calor en Celsius
float indiceCalorC = dht.computeHeatIndex(temperature, humidity, false);
Serial.print("Índice Calor Celsius:\t");
//Serial.println(dht.computeHeatIndex(temperature, humidity, false));
Serial.println(indiceCalorC);
// Imprimir el índice de calor en Fahrenheit
float indiceCalorF = dht.computeHeatIndex(temperature, humidity, true);
Serial.print("Índice Calor Fahrenheit:");
//Serial.println(dht.computeHeatIndex(temperature, humidity, true));
Serial.print(indiceCalorF);
Serial.println("");
// Obtener el tiempo actual
unsigned long currentMillis = millis();
// Verificar si ha pasado el intervalo de tiempo
if (currentMillis - previousMillis >= interval) {
// Guardar el tiempo actual
previousMillis = currentMillis;
// Alternar el estado de la pantalla
screenState = !screenState;
}
// Mostrar en el LCD
//lcd.clear(); // Limpia el LCD antes de escribir
if (screenState == 0) {
lcd.setCursor(0,0);
lcd.print("Temperatura: "); // Borra la línea anterior
lcd.setCursor(0,1);
lcd.print(" "); // Borra la línea anterior
lcd.setCursor(0, 1);
// Mostrar Celsius y Fahrenheit
lcd.print(temperatureC);
lcd.write(byte(0)); // Escribe el símbolo de grados
lcd.print("C");
if(temperatureC<99.99 && temperatureF>0){
lcd.print(" ");
}
lcd.print(temperatureF);
lcd.write(byte(0)); // Escribe el símbolo de grados
lcd.print("F");
// } else {
// // Mostrar Kelvin y Rankine
// lcd.print(temperatureK);
// lcd.write(byte(0)); // Escribe el símbolo de grados
// lcd.print("K");
// if(temperatureK<99.99 && temperatureR>0){
// lcd.print(" ");
// }
// lcd.print(temperatureR);
// lcd.write(byte(0)); // Escribe el símbolo de grados
// lcd.print("R");
// }
} else {
lcd.setCursor(0,0);
lcd.print("Humedad/IndiceC:"); // Borra la línea anterior
lcd.setCursor(0,1);
lcd.print(" "); // Borra la línea anterior
lcd.setCursor(0, 1);
// Humedad %
lcd.print(humedad);
//lcd.write(byte(0)); // Escribe el símbolo de grados
lcd.print("%");
lcd.print(" ");
//lcd.print("i:");
lcd.print(indiceCalorC);
//lcd.write(byte(0)); // Escribe el símbolo de grados
lcd.print("C");
//lcd.print("-");
//lcd.print(indiceCalorF);
//lcd.print("F");
}
delay(1000); // Esperar 1 segundo antes de la siguiente lectura
counter++;
}