Hola, necesito un poco de orientación sobre un problema. A ver si alguien puede aportarme un poco de luz.
Tengo un proyecto, en teoría simple, pero que lleva meses dándome problemas diversos. Estoy usando un sensor de temperatura dht-22 para controlar un congelador industrial. Como no llega la señal wifi, necesito un cable de 10 metros para llevar la placa que es un NodeMCU hasta un lugar con cobertura.
Todo funciona perfecto un tiempo indeterminado, hasta que el sensor da error al realizar las lecturas. Puede estar funcionando unas horas o unos días, pero como mucho en dos días deja de dar lecturas. Simplemente con desconectar y conectar el dht-22 vuelve todo a la normalidad, por un tiempo…
Pensando que podía ser una mala conexión por alguna vibración, al ser los conectores del dht-22 tan finos, les soldé unos conectores Dupont, pero el problema persiste. También he probado con varios sensores.
Tengo únicamente una resistencia de 10K entre Vcc y el Pin Output del sensor, no hay nada más.
Serán los 10m de cable…? los -19º que afectan al sensor…? Puedo verificar algo por software?
Estoy estudiando la comunicación RS485 para instalar un conversor MAX485 cerca del sensor de temperatura, pero no tengo muy claro que sea la longitud del cable ya que en teoría he leído algún proyecto funcionando con mayores longitudes.
Si alguien tiene alguna experiencia al respeto, pudieran darme algún consejo, o prueba para ver o descartar problemas se lo agradecería.
Un saludo.
La solución: Según los expertos es un error común con los dht22 den NAN de forma esporádica. Aparte del pin para leer datos, alimentamos el sensor a través de otro pin, recibirá sólo 3v pero en principio es suficiente. Cuando el sensor de errores de lectura apagamos el sensor y encendemos por software.
En el setup abrimos y damos corriente al sensor.
const byte pinPowerDHT22 = 10;
Y cada vez que tengamos lecturas incorrectas, apagamos y encendemos.
digitalWrite(pinPowerDHT22, LOW);
delay(100); // demosle unos instantes para que todo se estabilice.
digitalWrite(pinPowerDHT22, HIGH); // Listo otra vez energizado.
