Relé deja de funcionar

Hola a tod@s

Tengo un sistema funcionando ok con dht22, arduino uno, y relé 4 ptos con opto acoplador. Y ya me ha pasado 2 veces q parece siga funcionando todo bien, lecturas sensor, activación relé 230 v... Pero pasa q se queda siempre funcionando aun a consigna high a una determinada humedad sensor dht.

He leído en foros q a veces cuando se va la luz...se queda siempre on, y al reprogramar se activa relé. Así solucione la otra vez me pasó, ahora después de varios días yendo bien, dejó de funcionar y recargando código... No funciona relé.

Sí podéis echar un cable... Muchas gracias

:o

y el código ?

y el esquema ?

Cuando lea las normas se dará cuenta de como presentar un tema.
Mientras la gran mayoría cree que nosotros tenemos la capacidad de entender con 5 lineas todo un problema.

Lee las Normas del foro.

Hola de nuevo,

disculpad la falta de info, pero abri el post con el movil y tenía previsto pasaros hoy código...

para que veáis que sí he leído normas, mirad otra consulta que hice:

https://forum.arduino.cc/index.php?topic=597598.0

además viendo un post similar, se entiende de ese foro que la causa del problema fue el tipo de periférico:

https://forum.arduino.cc/index.php?topic=431146.0

mi código:

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 6         // Pin which is connected to the DHT sensor.

#define DHTTYPE DHT22     // DHT 22 (AM2302)

DHT_Unified dht(DHTPIN, DHTTYPE);

#include <I2CSoilMoistureSensor.h>

const int sensorPin = A0;

#include <LiquidCrystal.h> // para LCD 16x2
//#include  <LiquidCrystal_I2C.h>
 
//Crear el objeto LCD con los números correspondientes (rs, en, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
 
//Dibujo caracter grado
byte grado[8] =
 {
 0b00001100,
 0b00010010,
 0b00010010,
 0b00001100,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000
 };
 
//iniciamos los relay y asignamos pines
int relay2 = 9;
 
void setup() {
  
  // Comenzamos el sensor DHT
  Serial.begin(9600); 
  dht.begin();
   
   // Inicializar el LCD con el número de  columnas y filas del LCD
  lcd.begin(16, 2);
  lcd.createChar(1, grado);// agregamos el caracter grado 
   
  // Escribimos el Mensaje en el LCD.
  lcd.setCursor(0, 0);
  lcd.print("Iniciando...");
  lcd.setCursor(0, 1);
  lcd.print("MICROCLIMA_THC");
 
  // Inicializar el pin digital relays, como salidas
  pinMode(relay2, OUTPUT);   

 
  // Apagamos todos los relays
  digitalWrite(relay2, HIGH); //apagamos el relay

}
  
void loop() {
    // Esperamos 5 segundos entre medidas
  delay(5000);

  int humedadcogollo = analogRead(sensorPin);

  sensors_event_t event;  
  dht.temperature().getEvent(&event);
    if (isnan(event.temperature)) {
    Serial.println("Error reading temperature!");
  }
  else {
    Serial.print("Temperature: ");
    Serial.print(event.temperature);
    Serial.println(" *C");
}
  dht.humidity().getEvent(&event);

    if (isnan(event.relative_humidity)) {
    Serial.println("Error reading humidity!");
  }
  else {
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
  }

   Serial.print("Hcogollo: ");
   Serial.print(humedadcogollo);
   Serial.print("  aire1023");
 
  // Escribir en LCD humedad y temperatura
 
  lcd.setCursor(0, 0);
  lcd.print("Humedad: ");
  lcd.print(event.relative_humidity);
  lcd.print(" %");
 
  lcd.setCursor(0, 1);
  lcd.print("Hcogo: ");
  lcd.print(humedadcogollo);
  lcd.write(1); //Imprimimos nuestro caracter Grados
  lcd.print("/1023");
 
  //Relay : 2
  if(event.relative_humidity>45){
    digitalWrite(relay2, LOW); //encendemos el relay
  }else{
    digitalWrite(relay2, HIGH); //apagamos el relay
  }
}

Además adjunto fotos del montaje y como veréis en el detalle del relé, el relay1 está quemado. Antes de que pasará la incidencia objeto de consulta, me equivoqué en la conexion del cableado al relay1 y saltó el diferencial. Menos mal que no quemó el arduino...pero quizá sea la causa del problema actual?

Un saludo y gracias
Jorge

Hola! usa una bateria de movil, asi, aparte de estabilizar la corriente, te protege ante fallos electricos y no se te cuelga el arduino, es como un sai en miniatura, y ya que estas, ponle un sensor de luz y que te avise si se va la luz cuando no se tiene que ir :stuck_out_tongue_winking_eye:

Salu2

Bueno he mirado tu código y he visto algunas cosas para prestar atención.

En el ejemplo de la librería DHT de Adafruit veo que hacen primero esto

dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println("Error reading humidity!");
  }
  else {
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
  }

Tu en cambio haces

dht.humidity().getEvent(&event);

y mucho despues luego de otros procedimientos consultas

 if (event.relative_humidity > 45){
      digitalWrite(relay2, LOW); //encendemos el relay
  } else{
      digitalWrite(relay2, HIGH); //apagamos el relay
  }

Este comentario lo hago porque no he usado esta librería.

Supongamos que no sea el problema y me enfoco en algo que no haría como tu has hecho.
Y es el ultimo código donde comandas el relé.

Tu consulta dice si la humedad > 45 activas sino desactivas.

Que pasa cuando estas en en umbral 45.0 45.1?
Tu rele se vuelve loco. Volverse loco significa que lo que este del otro lado se prende/apaga muchas veces.

Por otro lado poner un rele a trabajar asi no esta bien.

Lo que debs hacer es usar lo que se llama una histeresis.

Si activas cuando es > 45.0 pero desactivas digamos a 44.5%

 if (event.relative_humidity > 45.0){
      digitalWrite(relay2, LOW); //encendemos el relay
  } 

   if {event.relative_humidity > 44.5)
      digitalWrite(relay2, HIGH); //apagamos el relay
  }

Espero que sean float.

Buenos días!!

El sistema lleva 5 días trabajando bien con el código que viene adjunto antes. Si se repite la historia, es probable que en unos días deje de funcionar el relé para que dar ON siempre, aún vuelgas a cargar código, o reiniciar sistema...Un expediente X :slight_smile: alguien esta ahí fuera.

Seguiré reportando, y probaré vuestras recomendaciones, seguro que vuelvo a tener que darle una vuelta a este poltergeist.