Saludos y una ronda para tod@s!
Estoy haciendo una incubadora. Resumiendo, la arduino uno, me lee la temperatura y humedad exterior e interior y en base a las lecturas y al paso de los días, se activan 3 relés: uno que controla una resistencia, el otro un nebulizador de humedad y el último una bandeja de volteo de los huevos.
La tengo conectada a un display 20X4 con I2C, a un DHT22, un DHT11 y una fuente de 12v.
La cosa es que cuando inicio ,a veces me salen caracteres raros en el LCD y otras me sale todo bien. En cualquier caso, el programa se ejecuta correctamente, hace lo que yo quiero pero se acaba colgando, sin excepción. A veces tarda mas, otras menos. Se apaga la pantalla, se quedan las lecturas fijas sin variación.. en fin, que no se me ocurre qué mirar. Soy novato y es mi primer proyecto, así que si alguien puede echar un cable... Pues yo muy agradecido!!
Pego el código:
//CONTROL LCD
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);
//CONTROL TEMPERATURA Y HUMEDAD INTERIOR Y EXTERIOR
#include <DHT.h>
#include <DHT_U.h>
DHT dht1(2, DHT22);
DHT dht2(3, DHT11);
float TI; // temperatura interior
int HI; // humedad interior
int TE; // temperatura exterior
int HE; // temperatura exterior
//CONTADOR DE DIAS
unsigned long days;
//Rotación
int RELE_ROTACION = 9;
//Temperatura
int RELE_TI = 5;
//Humedad
int RELE_HI = 10;
void setup()
{
lcd.setBacklightPin (3, POSITIVE);
lcd.setBacklight (HIGH);
lcd.begin(20, 4);
lcd.clear();
dht1.begin();
dht2.begin();
pinMode (RELE_TI, OUTPUT);
pinMode (RELE_ROTACION, OUTPUT);
pinMode (RELE_HI, OUTPUT);
}
void loop(){
TI = dht1.readTemperature();
HI = dht1.readHumidity();
TE = dht2.readTemperature();
HE = dht2.readHumidity();
days = millis()/86400000;
//Temperatura
if(days>18) {
if (TI<=35.6) { digitalWrite(RELE_TI,HIGH); }
else { digitalWrite(RELE_TI,LOW); }
}
if(days<=18) {
if (TI<=37.5) { digitalWrite(RELE_TI,HIGH); }
else { digitalWrite(RELE_TI,LOW); }}
// ROTACION
if ((days > 3) && (days <= 18)) {digitalWrite(RELE_ROTACION, HIGH);}
else {digitalWrite(RELE_ROTACION, LOW);}
// HUMEDAD
if(days>=18) {
if (HI<80) { digitalWrite(RELE_HI,HIGH); }
else { digitalWrite(RELE_HI,LOW); }
}
if(days<18) {
if (HI<60) { digitalWrite(RELE_HI,HIGH); }
else { digitalWrite(RELE_HI,LOW); }}
lcd.setCursor ( 0 , 0 );
lcd.print (" DIAS INC. ");
lcd.print (days);
lcd.setCursor ( 0 , 1 );
lcd.print (" TI:");
lcd.print (TI);
lcd.print ("\337C ");
lcd.print (" TE:");
lcd.print (TE);
lcd.print ("\337C");
lcd.setCursor ( 0 , 2 );
lcd.print ( " HI:" );
lcd.print (HI);
lcd.print ( "%" );
lcd.print ( " HE:" );
lcd.print (HE);
lcd.print ( "%" );
lcd.setCursor ( 0, 3 ); // Iniciar en la columa 1 fila 3
lcd.print ( " C:" );
if (digitalRead (RELE_TI) == (1)) { lcd.print("ON ");}
else { lcd.print("OFF"); }
lcd.print ( " H:" );
if (digitalRead (RELE_HI) == (1)) { lcd.print("ON ");}
else { lcd.print("OFF"); }
lcd.print ( " R:" );
if (digitalRead (RELE_ROTACION) == (1)) { lcd.print("ON ");}
else { lcd.print("OFF"); }
delay( 1000 );
}