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

Dernière mise à jour : 26/07/2015

Présentation

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

indicateur_taux_humidite_004_proto_001d

La plage de mesure de la tempéraure s'étend de 0°C à +50°C, et celle d'humidité de 20% à 90%.

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é.

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

Le capteur DHT11 possède 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 DHT pour les interrogations, et du DHT vers le PIC pour les réponses). La ligne DATA est à l'état haut au repos grâce à la présence de R1. 

Récupération des données issues du DHT11
Chaque paquet de données qu'envoie le DHT11 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). Les octets #2 et #4 - parties décimales - sont toujours à $00 et ne seront pas utilisés. La transmission des données s'effectue en trois étapes :
1 - le PIC "interroge" le DHT11 en mettant à l'état bas la ligne DATA pendant 20 ms (18 ms suffisent)
2 - Le DHT11 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 DHT11 envoie les 40 bits de données sous forme de 5 octets, que le PIC lit à la queue-leu-leu.
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. Comme les octets des parties décimales (octets #2 et #4) sont toujours à $00, il est inutile de les traiter après réception. Les mesures sont répétées toutes les 400 ms, on a donc une fréquence de rafraîchissement de 2,5 fois par seconde.

Transmission des mesures sur port série
Les valeurs de température et d'humidité relative sont transmises sur la broche RB2/TX à la vitesse de 19200 bauds, après chaque acquisition.

indicateur_taux_humidite_004_com_001a

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 est optionnelle, le montage fonctionne même si on ne l'utilise pas. 

Affichage
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 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 DHT11
- à T2 (30 ms) fin de demande de valeur au DHT11 et lecture de la réponse envoyée par le DHT11
- à 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.

Prototype

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_001b indicateur_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%.

Logiciel du PIC

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

Circuit imprimé

Non réalisé.

Historique

26/07/2015
- Première mise à disposition.