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.

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

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.

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.

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