Electronique > Réalisations > Affichage / Mesures > Indicateur taux humidité (hygromètre) 004

Dernière mise à jour : 13/08/2023

Présentation

Cet indicateur est basé sur l'emploi d'un capteur numérique DHT11 ou DHT22. Les performances de ces capteurs en terme de précision ne sont pas extraordinaires (surtout avec le DHT11), mais leur faible coût (1,50 euro pour fonctions température et humidité) peut inciter à les essayer. En tout cas moi, je me suis laissé tenter.
   
indicateur_taux_humidite_004_pcb_3d_front  indicateur_taux_humidite_004_proto_001d
   

La plage de mesure de la température s'étend de 0°C à +50°C avec une précision de +/-2°C pour le DHT11, ou de 0°C à +80°C avec une précision de +/-0,5°C pour le DHT22. La plage de mesure du taux d'humidité s'étend de 20% à 90% avec une précision de +/-5% pour le DHT11, ou de 5% à 95% avec une précision de +/-2% pour le DHT22.

De toute évidence, on s'orientera de préférence vers le DHT22...

   

Schéma

Ce montage à base de PIC 16F628A est simple et permet d'afficher de manière fixe ou alternée la température et le taux d'humidité. Sans rien modifier au montage, on peut utiliser le DHT11 ou DHT22 (le logiciel du PIC doit toutefois correspondre au type de capteur utilisé).

indicateur_taux_humidite_004
Les broches RB1 (Rx) et RA4 (Debug) du PIC ne doivent être raccordée à rien.

Les capteurs DHT11 et DHT22 possèdent 4 broches, mais 3 seulement sont réellement utilisées, la broche 3 n'est raccordée à rien (NC = Non Connecté).

dht11_001a

Le PIC interroge le capteur par le biais de la broche 2, cette ligne de liaison DATA travaille dans les deux sens (du PIC vers le DHTxx pour les interrogations, et du DHTxx vers le PIC pour les réponses). La ligne DATA est à l'état haut au repos grâce à la présence de R1.

Important : j'ai oublié de les inclure sur le schéma, mais des résistances de limitation de courant sont nécessaires entre les lignes de sortie du PIC et les 7 segments des afficheurs, de DispA à DispG (entre RA2/DispA et segment A, entre RA3/DispB et segment B, etc, jusqu'à entre RB6/DispG et segment G). Pour un courant de 10 mA dans les afficheurs, il convient d'utiliser des résistances de 330 ohms.

   
indicateur_taux_humidite_004_disp_res
   
Récupération des données issues du DHTxx (DHT11 ou DHT22)

Chaque paquet de données qu'envoie le DHTxx en réponse aux requêtes du PIC est organisée sous la forme d'une trame de 40 bits : 16 bits pour la valeur d'humidité (8 bits pour partie entière et 8 bits pour partie décimale), 16 bits pour la valeur de température (8 bits pour partie entière et 8 bits pour partie décimale) et 8 bits pour parité/contrôle (checksum). Pour le DHT11, les octets #2 et #4 - parties décimales - sont toujours à $00 et ne sont pas utilisés.

La transmission des données s'effectue en trois étapes :
1 - le PIC "interroge" le DHTxx en mettant à l'état bas la ligne DATA pendant un certain temps (20 ms pour le DHT11, 1,5 ms pour le DHT22)
2 - Le DHTxx répond par un signe de présence (acquittement par état bas de 80 us suivi d'un état haut de 80 us)
3 - Le DHTxx envoie les 40 bits de données sous forme de 5 octets, que le PIC lit à la queue-leu-leu, bit par bit.

La distinction entre les bits 0 et 1 se fait par la durée des états hauts. Un état haut qui dure 26 à 28 us correspond à un bit "0", alors qu'un état haut qui dure 70 us correspond à un bit "1". Il suffit donc de mesurer le temps qui sépare un front montant d'un front descendant. Si ce temps dépasse 40 us, on peut dire que l'on a affaire à un bit "1". Le PIC est cadencé par l'horloge interne de 4 MHz, et les 40 bits de données doivent être traités assez rapidement pour n'en louper aucun. Les mesures sont répétées toutes les 1000 ms, on a donc une fréquence de rafraîchissement de 1 fois par seconde.


Transmission des mesures sur port série
Une fois "traduites" par le PIC, les valeurs de température et d'humidité relative sont transmises au format texte (ASCII) sur la broche RB2/TX à la vitesse de 19200 bauds, après chaque acquisition, à raison d'une ligne par couple de valeurs.

indicateur_taux_humidite_004_com_001c indicateur_taux_humidite_004_com_001c
Avec le DHT11 (écran de gauche), il est inutile d'afficher les décimales...

La sortie Tx (broche RB2 du PIC) doit être raccordée :
- soit sur un adaptateur UART-TTL/UART-RS232 si l'envoi des données doit se faire via un port COM RS232 standard
- soit sur un adaptateur UART-TTL/USB si l'envoi des données doit se faire via un port USB (port COM virtuel)
Cette sortie Tx est optionnelle, le montage fonctionne même si on ne l'utilise pas. 
   
Affichage LED 7 segments
Les valeurs de température et du taux d'humidité relative sont affichées de manière fixe ou alternée. Dans ce dernier cas, chacune des deux valeurs est affichée pendant deux secondes environ. La sélection du mode d'affichage (température seulement, taux d'humidité seulement ou les deux alternés) se fait en pressant le bouton SW1/Mode. Le choix est conservé en EEPROM et rappelé au démarrage suivant. Quand la valeur affichée corespond à la température, la LED Température s'allume (broche RB7 du PIC à l'état bas), et quand elle correspond au taux d'humidité, la LED Humidité s'allume (broche RB7 du PIC à l'état haut). Dans la pratique, il me semble conseillé de placer les deux LED juste à côté des deux afficheurs 7 segments.

indicateur_taux_humidite_004_front_001a

L'affichage se fait en mode multiplexé, ce qui permet d'économiser sur le nombre de lignes d'E/S, autrement dit sur le nombre de broches nécessaires du PIC. Le multiplexage est bien pratique, mais dans le cas présent il m'a demandé un peu de travail car il a fallu jongler entre les temps d'acquisition du DHT11 et le multiplexage d'affichage. Au final j'ai retenu la chronologie suivante, avec le Timer 0 configuré pour déclencher une interruption toutes les 10 ms :
- à T1 (10 ms) début de demande de valeur au DHTxx
- à T2 (30 ms) fin de demande de valeur au DHTxx et lecture de la réponse envoyée par le DHTxx
- à T3 (40 ms) envoi des valeurs sur le port série (RB2/Tx)
- à T4 (400 ms) reset pour cycle suivant

En parallèle, le raffraichissement de l'affichage se fait toutes les 10 ms et donc à 100 Hz (50 Hz pour chacun des deux afficheurs), pas de scintillement visible.

A noter que si les valeurs transmises par le port série comportent les décimales utiles avec le DHT22, ces décimales ne sont pas affichées avec les deux afficheurs LED.

   

Prototypes

Trois prototypes ont été réalisés, deux par moi (en 2015 et 2023) et un par Alain E. (en 2023) que je remercie pour ses retours.

Mon prototype #1 (2015)
Réalisé autour de ma platine EasyPic 7 et avec mon afficheur 7 segments 007 (deux afficheurs utilisés sur les quatre).

indicateur_taux_humidite_004_proto_001a indicateur_taux_humidite_004_proto_001bindicateur_taux_humidite_004_proto_001c 

Lors des tests, il faisait environ 25°C dans la pièce et le taux d'humidité relative affiché était de 57%. En soufflant sur le capteur bouche grande ouverte (air chaud), le taux d'humidité affiché a grimpé à 75%.
   
Mon prototype #2 (2023)
Circuit imprimé réalisé en simple face, dessiné selon le modèle d'implantation proposé par Alain E.
   
indicateur_taux_humidite_004_proto_rm_001a indicateur_taux_humidite_004_proto_rm_001b
   
A gauche (LED verte allumée) : affichage température. A droite (LED jaune allumée) : affichage taux d'humidité.
Capteur utilisé = DHT11 - je vous laisse deviner que je ne retrouve pas mon DHT22...
Notez l'arrivée directe de l'alimentation +5 V par des grip-fils. N'ayant plus de régulateur de tension 78L05 en stock, je me suis permis un court-circuit provisoire entre l'entrée et la sortie dudit régulateur (on le voit bien à l'emplacement de U101 en agrandissant les photos).
Une fois réceptionné mon régulateur de tension 78L05 et le connecteur jack d'alimentation soudé, le circuit est finalisé :

indicateur_taux_humidite_004_proto_rm_001c indicateur_taux_humidite_004_proto_rm_001e indicateur_taux_humidite_004_proto_rm_001f
   
Mêmes essais avec le DHT22 (que j'ai retrouvé) - avec PIC programmé avec le bon fichier *.hex :
   
indicateur_taux_humidite_004_proto_rm_001g indicateur_taux_humidite_004_proto_rm_001h
   
Difficile de comparer les DHT11 et DHT22 avec le même circuit imprimé. Pour bien faire, il me faudrait assembler un second exemplaire, un avec DHT11 et l'autre avec DHT22, et placer les deux côte à côte.
   
Prototype de Alain E.
Réalisé sur circuit imprimé.

indicateur_taux_humidite_004_proto_ae_001a  indicateur_taux_humidite_004_proto_ae_001b  

Fonctionnement OK pour les deux modes d'affichage taux d'humidité et température. Le défaut d'affichage visible sur la photo ci-devant à droite est due à une erreur de tracé du circuit imprimé, corrigée entre temps.

   

Logiciels du PIC

Fichiers binaires compilés *.hex (à flasher dans le PIC) dans l'archive zip dont le lien suit.
Indicateur taux d'humidité 004 - 16F628A - pour DHT11 et DHT22 - (01/07/2023)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Circuit imprimé

Deux dessins d'implantation sont proposés, ils sont très très ressemblant (et pour cause) ! Le circuit accepte aussi bien le DHT11 que le DHT22, mais il faut programmer le PIC avec le bon fichier compilé (*_dht11.hex ou *_dht22.hex).
   
Circuit de Alain E.
L'implantation qui suit est proposée par Alain E., que je remercie.
   
indicateur_taux_humidite_004_pcb_ae_top
   
Typon de Alain E.
   
Mon dessin
Je me suis basé sur l'implantation de Alain pour réaliser mon circuit imprimé. Copie quasi conforme, je n'ai pas beaucoup de mérite !
   
indicateur_taux_humidite_004_pcb_components_top
   
Typon au format PDF - 28/06/2023

   

Historique

13/08/2023
- Ajout photos prototype équipé du DHT22.

16/07/2023
- Correction bug logiciel dédié au DHT11. Les mesures étaient trop rapprochées (toutes les 400 ms) et le DHT11 répondait correctement une fois sur deux (lorsque la lecture était incorrecte, l'affichage montrait deux tirets). Le problème était lié à la mise à jour du logiciel pour permettre la lecture du DHT22 (ce dernier pouvant être interrogé à un rythme plus élevé, j'avais raccourci les intervales de mesure).
- Ajout photos de mon prototype #2.

02/07/2023
- Ajout possibilité de lecture du capteur DHT22 (plus précis que le DHT11).
- Ajout du dessin de mon PCB, largement inspiré de (pour ne pas dire copié sur) celui de Alain E.

21/05/2023
- Ajout précision sur limitation de courant des segments lumineux des afficheurs 7 segments.
- Ajout typon (PCB) et photos du prototype de Alain E. que je remercie.

26/07/2015
- Première mise à disposition (pour DHT11).