Buenas! Recien estoy arrancando en este mundillo por ende soy SUMAMENTE NOVATO tanto en programacion como en arduino.
Basicamente estoy creando un proyecto de un higrometro casero para que me mantenga parametros de humedad y temperatura.
Tengo un:
- arduino uno (no original)
-Protoboard
-DHT22
-Pantalla led
-Rele de 8 canales
-Caloventor
-Humificador
-Extracotor
-Intractor
El problema que estoy teniendo es que CREO que el codigo esta bien, pero el funcionamiento del hardware esta mal.
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C, columnas y filas del LCD
float targetTemperature = 25.0; // Configura la temperatura deseada
float targetHumidity = 60.0; // Configura la humedad deseada
unsigned long previousMillis = 0;
const long interval = 5000; // Intervalo de 5 segundos
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
setupRelay();
}
void loop() {
unsigned long currentMillis = millis();
// Controlar el tiempo para la lectura y actualización
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Controlar dispositivos
controlDevices(temperature, humidity);
// Mostrar temperatura y humedad en el LCD
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 temperature, float humidity) {
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
if (temperature < targetTemperature) {
Serial.println("Encendiendo caloventor");
digitalWrite(8, HIGH); // Enciende caloventor
} else {
Serial.println("Apagando caloventor");
digitalWrite(8, LOW); // Apaga caloventor
}
if (temperature > targetTemperature) {
Serial.println("Encendiendo extractor");
digitalWrite(9, HIGH); // Enciende extractor
} else {
Serial.println("Apagando extractor");
digitalWrite(9, LOW); // Apaga extractor
}
if (humidity < targetHumidity) {
Serial.println("Encendiendo humificador");
digitalWrite(10, HIGH); // Enciende humificador
} else {
Serial.println("Apagando humificador");
digitalWrite(10, LOW); // Apaga humificador
}
if (humidity > targetHumidity) {
Serial.println("Encendiendo intractor");
digitalWrite(11, HIGH); // Enciende intractor
} else {
Serial.println("Apagando intractor");
digitalWrite(11, LOW); // Apaga intractor
}
}
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);
}
El problema que estoy teniendo es mas que nada en los relees que abren y cierran el pase de la electricidad a los tomas donde se enchufan los dispositivos. El dht22 sensa correctamente los parametros pero se encienden los rele que no deberian, es decir
seteo:
Temperatura en 25°C
Humedad en 60%
Cuando la temperatura baja, el caloventor deberia encender y cuando se pasa del parametro establecido deberia encender el extractor. Lo mismo con la humedad si esta por debajo del parametro deberia encender el humificador y si se pasa prender el intractor.
Incluso puse para imprimirlo en el monitor serial y esta correcta la logica.
Pero a la hora de encender los relee encienden los incorrectos (me guio por la luz roja)
, y ya revise las conexiones.
Nose que puede ser alguna idea?



