[SOLUCIONADO] dht-22 lecturas nan

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.

Según la hoja de datos la distancia permitida es de hasta 20 m así que la distancia no debería generar problemas, tampoco la tempratura de trabajo porque tolera hasta -40°C.
¿Qué tipo de cable está usando?
El fabricante recomienda, para distancias largas, usar cable mallado.

Saludos

Mira, el DHT22 debe tener algun inconveniente porque ese mismo problema lo hemos experimentado muchos. La solución ha sido, usar un pin para alimentarlo y cuando recibes NAN lo apagas y vuelves a encender.
En teoría el problema tiene que ver con una parte de la rutina que no se ajusta a los tiempos que requiere para devolver los datos pero luego de un debate amplio (que debes buscar y que ahora no recuerdo el nombre) no pudimos resolverlo.
La solución simple es la que te he dicho. Un pin lo alimenta o bien puedes usar un PMOS desde VCC o un NMOS desde VCC para cortar la alimentación y restaurarla cuando el DHT no este enviando datos.

Imaginé que el problema podría llegar a pasar por ese lado porque me llamó la atención que la hoja de datos tenga tantas referencias a los tiempos de las señales que parecen ser muy estrictos.
Ni lo insinúe porque no tengo experiencia con el sensor así que nada podía aportar al respecto pero, en lo personal, me sirve para tenerlo presente cuando necesite utilizarlo.
Gracias por el aporte @surbyte.

Como siempre gracias por su atención y compartir sus experiencias.

Gatul, el cable que uso es un cable de 6 hilos de los usados en videoporteros o telefonillos, con un simple aislamiento blanco de pvc.

Surbyte, he llegado a pensar que el problema era por la longitud del cable y las bajas temperaturas que afectaría a la conductividad, por que en casa no he tenido nunca ese problema dejando el mismo equipo funcionando varios días consecutivos.

Busqué en el foro y encontré alguna discusión sobre la longitud del cable, pero proyectos con 20m funcionaban sin problemas. Al no encontrar nada, pensé que era un problema de mi proyecto.

Nunca se me hubiera ocurrido usar un pin para alimentarlo y cuando recibes NAN simplemente reiniciar… Para ser sincero, de electrónica no se demasiado y voy estudiando según necesidades. Usar un PMOS, NMOS desde VCC, ahora mismo no se a que te refieres, pero me pongo a estudiarlo.

Muchas gracias, me traía loco este proyecto en teoría tan simple.

¿Me recomiendan otro tipo de sensor? En teoría el dht-22 me pareció de lo mejor que había.

Un saludo.

Imagino que quiso decir que en lugar de alimentarlo directamente desde el pin (que tal vez no entregue la corriente suficiente) puedes "ayudarlo" conmutando un transistor MOSFET canal P conectado a Vcc o uno canal N conectado a GND, que haría las veces de interruptor.
De lo contrario tampoco le entendí. :wink:

En cuanto al cable, en próximos proyectos ten en cuenta el cable de red UTP Categoría 5 que tiene 4 pares trenzados y no es tan costoso (de hecho, en Argentina es más barato que el de portero eléctrico de 4 pares).
En este caso, enviando la señal por uno de los cables de un par y masa por el otro, te proporcionaría un blindaje bastante aceptable.
Y si el presupuesto alcanza, hay una versión con blindaje de aluminio que es para exteriores, que ya es palabras mayores.
Al menos comparado con el cable multipar para porteros eléctricos que tienen, los buenos, 3 ó 4 torzadas por metro contra la misma cantidad por pulgada en el UTP, son el día y la noche. Calcula que unos están pensados para trabajar en el orden de los kHz y los otros entre los 10 y 100 MHz, necesariamente son mejores los de red.
Solo una sugerencia para que tengas en cuenta.

Saludos

Mira, el DHT22 consume unos pocos mA de modo que no hace falta usar un driver (PMOS o NMOS extra). El tema es si no te gusta desde lo electrónico que no reciba los 5V pero tampoco ese es problema porque lo he usado con 3.3V y funciona bien asi que en este punto olvida la sugerencia de usar transitores que actúen como llaves o reles y solo lo alimenten o no. Olvida eso.

Un pin le da 5V (por supuesto que será menos). Otro pin es el que tienes ahora para leer los datos

supongamos defines a pin 10 para darle energía al DHT22.

const byte pinPowerDHT22 = 10;

Simplemente cuando recibas NAN, pones

digitalWrite(pinPowerDHT22, LOW);
delay(100);                                        // demosle unos instantes para que todo se estabilice.
digitalWrite(pinPowerDHT22, HIGH);  // Listo otra vez energizado.

No olvides en el setup tambien incluir esto

digitalWrite(pinPowerDHT22, HIGH);

Gatul, muchas gracias por el aporte de los cables. Sin duda lo tendré en cuenta.

Surbyte, el tema de alimentar el sensor por un pin está controlado, y ya estudié algo sobre transistores MOSFET. De momento cambiaré para darle energía a través de un pin, como indicas.

En paralelo tengo el mismo proyecto (que no implantaré hasta que no resuelva esto), pero controla tres sensores dht22 con un nodeMCU. Si recordáis hice una consulta porque quería controlar los sensores con el expansor de pines PCF8574 y no era capaz. Ja ja ja este se pone más interesante. Que por cierto lleva funcionando una semana en mi mesa sin ningún problema, y tendré que modificarlo con esta nueva información que me aportas.

Como siempre gracias por vuestra ayuda.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.