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.
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
- Les SHT71 et SHT75 ne sont plus très bien distribués à
l'écriture de
ces lignes (03/2020). Je dois préciser que j'avais commencé cet article
en 2013... Le "remplaçant suggéré SHT85" (communication série I2C) ne peut pas
fonctionner avec le programme établi ici. Pour autant, j'ai
pensé intéressant de mettre à jour cet article, qui avait
mijoté assez longtemps ;)
- La compensation en température n'est pas encore implémentée.
- Le
programme complet est disponible gratuitement sous sa forme
compilée, mais le code source ne peut être délivré qu'à ceux qui
possèdent mon livre Microcontrôleurs
PIC et MikroPascal (sur demande à l'adresse mail de mon site et avec
justificatif d'achat).
Schéma 003 - avec 2 afficheurs 7 segments
Le montage ne comporte que peu de composants...
... mais un composant particulier s'y est insinué, c'est vrai :
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.
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 :
- séparer totalement le traitement des commandes et celui de
la réception des données
- augmenter le plus possible la vitesse de transmission des données
entre
SHT7x et PIC en restant dans des limites acceptables. Il faut en effet que cela
fonctionne même avec une longueur de câble "conséquente" entre le
capteur et le microcontrôleur (plus la vitesse de transfert est élevée et plus la distance doit être raccourcie)
- faire en sorte qu'une commande ou une réception de données
survienne pendant un état stable d'un des afficheurs (il ne faut donc
pas que ladite transmission de données - de 1, 2 ou 3 octets - dure plus
de 10 ms)
Résultat conforme à celui attendu :
On voit mieux en grossissant :
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).
De plus, la sortie Tx (broche RB2 du PIC) délivre les valeurs
sous forme texte.
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.