Buenas tardes a todos! Modifique mi codigo asistiendome con chatgpt. La logica del codigo tendria que ser la siguiente: que lea temperatura y humedad y en base a los parametros que le seteo prenda o apague los distintos dispositivos que correspondan. Ademas al agregarle el RTC quiero que diferencie entre dia y noche, asi puedo setear parametros distintos para ambas situaciones. Y me muestre la temperatura y humedad en la pantalla led constantemente.
Queria que me den su opinion y/o correcion para el codigo.
#include <DHT.h>
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C, columnas y filas del LCD
// Valores de temperatura y humedad mínimos y máximos para el día y la noche
float tempMinDia = 24.0; // Temperatura mínima durante el día
float tempMaxDia = 26.0; // Temperatura máxima durante el día
float humMinDia = 55.0; // Humedad mínima durante el día
float humMaxDia = 70.0; // Humedad máxima durante el día
float tempMinNoche = 20.0; // Temperatura mínima durante la noche
float tempMaxNoche = 24.0; // Temperatura máxima durante la noche
float humMinNoche = 50.0; // Humedad mínima durante la noche
float humMaxNoche = 65.0; // Humedad máxima durante la noche
// Define el intervalo de tiempo para la lectura de sensores (9 segundos)
unsigned long previousMillis = 0;
const unsigned long interval = 9000; // Intervalo de 9 segundos
// Define el intervalo de tiempo para el día
int horaDiaInicio = 7; // Hora de inicio del día (7:00 AM)
int horaDiaFin = 20; // Hora de finalización del día (8:00 PM)
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
setupRelay();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Ajusta la hora y la fecha una vez
}
void loop() {
DateTime now = rtc.now();
int currentHour = now.hour();
// Comprueba si es de día o de noche
if (currentHour >= horaDiaInicio && currentHour < horaDiaFin) {
// Valores diurnos
controlDevices(tempMinDia, tempMaxDia, humMinDia, humMaxDia);
} else {
// Valores nocturnos
controlDevices(tempMinNoche, tempMaxNoche, humMinNoche, humMaxNoche);
}
// Realiza la lectura de sensores y control de dispositivos
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
controlDevices(temperature, temperature, humidity, humidity);
showTemperatureAndHumidity(temperature, humidity);
}
}
void setupRelay() {
pinMode(8, OUTPUT); // Pin IN1 (caloventor)
pinMode(9, OUTPUT); // Pin IN4 (extractor)
pinMode(10, OUTPUT); // Pin IN6 (humificador)
pinMode(11, OUTPUT); // Pin IN8 (intractor)
}
void controlDevices(float minTemp, float maxTemp, float minHumidity, float maxHumidity) {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
// Controlar caloventor
if (temperature < minTemp) {
Serial.println("Encendiendo caloventor");
digitalWrite(8, LOW);
} else if (temperature > maxTemp) {
Serial.println("Apagando caloventor");
digitalWrite(8, HIGH);
}
// Controlar extractor
if (temperature > maxTemp) {
Serial.println("Encendiendo extractor");
digitalWrite(9, LOW);
} else {
Serial.println("Apagando extractor");
digitalWrite(9, HIGH);
}
// Controlar humificador
if (humidity < minHumidity) {
Serial.println("Encendiendo humificador");
digitalWrite(10, LOW);
} else {
Serial.println("Apagando humificador");
digitalWrite(10, HIGH);
}
// Controlar intractor
if (humidity > maxHumidity) {
Serial.println("Encendiendo intractor");
digitalWrite(11, LOW);
} else {
Serial.println("Apagando intractor");
digitalWrite(11, HIGH);
}
}
void showTemperatureAndHumidity(float temp, float hum) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.setCursor(0, 1);
lcd.print("Humedad: ");
lcd.print(hum);
}