problème lecture DHT22 sur câble

bonjour,

j'ai un DHT22 qui fait des caprices.
Il marchait fort bien, puis j'ai démonté/remonté mon installation. Depuis, il me renvoie toujours T=0°C RH=0% sans code d'erreur (il dit OK).
La librairie utilisée est celle de Rob Tillaard. Les branchements sont vérifiés 100 fois (4.7k entre +5 et signal). Le système a déjà fonctionné au poil.

Je change le DHT22 au bout du câble : pareil.
Je débranche un des 3 brins du câble : la lib me remonte une erreur claire.
Je remplace le câble de 6m par 3 fils Dupont : ça remarche.
J'embarque le câble et je refais ces manips sur un autre Arduino, même conclusion : ça vient du câble.

Je teste les 3 brins du câble au Metrix, il y a continuité. C'est du câble audio blindé 4 conducteurs. Longueur 6m. A fonctionné pendant plusieurs semaines.

J'essaye une autre librairie, la dénommée SimpleDHT. Et là surprise, ça fonctionne avec le câble !

Je place quelques print() dans la lib de R. Tillard pour voir les 40 bits qu'elle reçoit du DHT22.
Avec le câble c'est 0 0 0 0 0
Sans le câble c'est OK (2 D 0 E6 F5)

L'effet de ce câble sur la lib R. Tillaard est de lui faire lire toujours 0, sans remonter d'erreur.
Mais pas d'effet sur la lib SimpleDHT.
Quelqu'un connaît un exorciste pour câble ?

Déja fonctionnement du DHT22.

L'information de température, d'humidité et de somme de controle tient dans 40 bits.
Pour continuer l'explication il faut signaler que l'info envoyée par le DHT est codée.
Je vais donc réserver (comme c'est dit dans les textes officiels)

  • le terme de "bit" pour l'information finale 1 ou 0,
  • employer le terme d'élément binaire 1 ou élément binaire 0 pour les signaux codés qui sont envoyés.

Les bits d'information 0 ou 1 sont constitués de deux éléments binaires : un élément binaire 0 suivi d'un élément binaire 1.
Si je prend la datasheet du produit je vois que l'élément binaire 0 fait toujours 50µs
Par contre pour le bit 0 l'élément binaire 1 fait 26 µs et pour le bit 1 il fait 70µs.

bit 0 ---> |_____|¯¯¯¯|

bit 1 ---> |_____|¯¯¯¯¯¯¯¯¯¯¯¯¯¯|

Le décodage pour savoir si on a affaire à un bit 0 ou à un bit 1 consiste à voir si le temps de l'élément binaire 1 est plus court ou plus long que celui de l'élément binaire 0

Influence du câble :
C'est le même schéma électrique que l'I2C sauf que le protocole n'est pas celui de l'I2C.
Un câble apporte de la capacité.
Tu as placé 4,7k en résistance de "pull up". Dans les faits le montage de sortie dit à "collecteur ouvert" n'est rien d'autre qu'un montage à émetteur commun qui a la résistance de collecteur placée à l'extérieur du circuit intégré.
Dans ce montage l'impédance de sortie est égale à la valeur de la résistance de collecteur.

Le problème va être la charge d'un condensateur à travers une résistance élevée.
Tu émets ceci :
|¯¯¯¯¯¯¯¯|____

Avec un câble court tu obtient
|¯¯¯¯¯¯¯¯|____

Avec un câble long tu obtiens :
/¯¯¯¯¯¯¯_____

et plus le câble est long, plus les temps de montée et descente du signal s'avachissent et comme il s'agit de mesurer un temps il peut se produire des ratés dans la mesure.

Pourquoi cela fonctionne encore avec une bibliothèque et pas avec l'autre il faudrait décortiquer la méthode de discrimination entre les 1.

Je ne garanti pas que cela fonctionnera mais tu peux essayer mettre 1k à la place 4,7k.
De baisser la valeur de la résistance par 5 c'est comme si tu baissais la valeur de la capacité du câble par 5.
En fait tu laisses la 4.7k et tu ajoutes en parallèle la résistance qui va bien pour faire autour de 1k ( entre 1k et 1,2k).

Merci pour cette réponse détaillée.

Ce câble a fonctionné pendant des semaines. Il est devenu bizarre après que je l'ai démonté/remonté.
Au passage, j'ai remplacé les vilains bouts de ruban adhésifs que j'avais utilisés par de la gaine thermorétractée.
Voilà maintenant mon câble a un look "pro" mais y marche pu' :sob:

On apprend vite à se méfier du trop visible pour être honnete. Tu es sûr que rien d'autre, qui peut paraître insignifiant, n'a été modifié ?
En baissant la valeur de la résistance est ce que celà à fait quelque chose ?