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

Dernière mise à jour : 29/03/2020

Présentation

Cet indicateur est basé sur l'emploi d'un capteur "numérique" Sensirion SHT71 ou SHT75, capteur d'humidité mais aussi de température, bien plus performant que l'humidistance H1 de Philips ou le capteur d'humidité H25K5.

indicateur_taux_humidite_003_anim_001a

Ce capteur est aussi, malheureusement, fort coûteux (au moins 30 euros) et moins facile à trouver que les deux autres.
Deux montages ont été étudiés :
- schéma 003 : avec affichage sur deux digits 7 segments
- schéma 003b : avec affichage sur un écran LCD 

Avertissements


Schéma 003 - avec 2 afficheurs 7 segments

Le montage ne comporte que peu de composants...

indicateur_taux_humidite_003_temp

... mais un composant particulier s'y est insinué, c'est vrai :

SHT71_001
Capteur SHT75

Le bouton-poussoir SW1 permet de choisir le mode d'affichage : Température seule, Humidité seule ou les deux en alternance toutes les deux secondes. Le choix est conservé en EEPROM et rappelé à la remise sous tension. Les deux voyants LED1 et LED2 permettent à tout instant de savoir à quoi se rapporte la valeur affichée. Même si une valeur affichée supérieure à 50 fait plus penser au taux d'hygrométrie, cela ajoute un certain dynamisme au montage ;)

Principe de fonctionnement général
Le logiciel du PIC gère plusieurs actions : lecture du capteur "numérique" SHT7x (SHT71 ou SHT75) et affichage sur deux afficheurs sept segments en mode multiplexé de la température et du taux d'humidité (seulement la température, seulement le taux d'humidité ou les deux en alternance, selon le mode défini par pression du bouton-poussoir SW1). Le mode d'affichage multiplexé permet de réduire le nombre de fils de câblage et la consommation globale. Ici, la fréquence de raffraichissement est de 100 Hz (50 Hz pour chaque digit), ce qui fait que la bascule entre les deux digits s'effectue toutes les 10 ms (ainsi, pas de soucis de scintillement lumineux désagréable). Cependant, dans le cas de cette réalisation, cela ne va pas sans poser de problème, du fait même du principe de fonctionnement du capteur SHT7x. Voyons pourquoi.

Problème posé par la lecture du capteur SHT7x
Avant toute chose, rappelons comment exploiter le capteur SHT7x. On doit lui envoyer une commande (1 octet) qui précise le type de mesure qu'on attend de lui, température ou humidité. Une fois que le capteur a reçu cette commande, il faut lui laisser le temps de réaliser la mesure et mettre à disposition le résultat qui est fourni sur 2 octets (pour la valeur, à laquelle on peut ajouter 1 octet pour le contrôle de validité checksum CRC si on le souhaite). Le temps d'attente nécessaire entre la réception de la commande et la mise à disposition du résultat est globalement compris entre 80 ms et 200 ms, il dépend de la résolution choisie (temps plus long avec la résolution par défaut qui est de 14 bits pour la température et de 12 bits pour le taux d'humidité). Pour savoir si la commande envoyée a été acceptée par le capteur, il faut ausculter la ligne DATA que le SHT7x force à 0 si tout va bien (acquitement ACK) et attendre que cette ligne DATA soit relâchée (qu'elle repasse au +Valim). Si cette "longue" procédure d'attente est réalisée dans une simple boucle (delay, while ou repeat) par le microcontrôleur, le multiplexage d'affichage s'arrête temporairement pendant ce temps-là (Nota 1), ce qui est plutôt gênant puisqu'alors on ne visualise plus la valeur en cours sur les afficheurs (un seul digit reste allumé). Les deux lignes Disp_1 (Digit 1) et Disp_2 (Digit 2) du graphe suivant montrent les "trous d'affichage" entre l'envoi d'une commande et la réception du résultat de la mesure demandée. On y voit qu'un digit est alimenté tandis que l'autre n'y est pas.
(Nota 1) : En réalité, le multiplexage qui est géré par les interruptions d'un Timer pourrait continuer, mais dans mon programme, j'ai fait le choix de ne pas surcharger la procédure d'interruption et de faire faire le gros du travail dans le corps principal du programme. Cette contraite liée au mode d'affichage "alternance Température / Humidité" aurait été vite levée pour l'affichage en permanence d'une même valeur.

indicateur_taux_humidite_003_graph_001a

Pour limiter ce désagrément visuel (que j'ai un peu "forcé" pour le mettre en évidence), j'ai pris les décisions suivantes :
Résultat conforme à celui attendu :

indicateur_taux_humidite_003_graph_001b

On voit mieux en grossissant :

indicateur_taux_humidite_003_graph_001c

Les impulsions visibles sur la ligne Debug marquent chaque changement de digit et surviennent donc toutes les 10 ms. Cela permet de voir que les messages les plus longs véhiculés sur les lignes DATA et CLOCK (3 octets) tiennent dans le gabarit.

Schéma 003b - avec écran LCD

Dans ce montage, la lecture du SHT7x se fait de la même façon que dans le précédent, mais l'affichage est cette fois assuré par un écran LCD des plus classiques et bon marché (entre 1 et 2 euros en cherchant bien).

indicateur_taux_humidite_003b

De plus, la sortie Tx (broche RB2 du PIC) délivre les valeurs sous forme texte.

indicateur_taux_humidite_003b_term_001a

Remarque : la sortie Tx2 n'a été utilisée que pendant la phase de mise au point, pour vérifier les données brutes émises par le capteur dès leur réception par le PIC (impulsion brève pour les états logiques bas et impulsion large pour les états logiques hauts, sans aucun protocole de transmission). Cette sortie peut être ignorée en utilisation nominale.

Logiciel du PIC

Les logiciels compilés (*.hex) sont disponibles en libre service dans l'archive suivante.
Indicateur taux humidité 003/003b - PIC 16F648A - 29/03/2020
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

29/03/2020
- Première mise à disposition.