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.
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é).
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é).
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.
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.
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.
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).
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.
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é :
Mêmes essais avec le DHT22 (que j'ai retrouvé) - avec PIC programmé avec le bon fichier *.hex :
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é.
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.
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 !
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).