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

Dernière mise à jour : 13/08/2023

Présentation

Cet indicateur d'humidité relative est basé sur l'emploi d'un capteur numérique BME280, qui permet également la mesure de la pression atmosphérique (baromètre) et de la température.
   
indicateur_taux_humidite_004b_6-digits_pcb_3d_front  indicateur_taux_humidite_004b_7-digits_pcb_3d_front  
Circuits imprimés en version 6 afficheurs et 7 afficheurs
   

Les plages de mesure sont les suivantes :

- Température : 0 à +80°C
- Humidité : 0% à 100%
- Pression : 300 hPa à 1100 hPa

Remarque : le capteur BMP280 est reconnu par le système, mais ne peut pas être utilisé. Il ne délivre en effet aucune donnée d'humidité relative, ce qui est un peu gênant pour un système qui à la base est un indicateur... de taux d'humidité.

   

Schéma

Ce montage à base de PIC 18F45K80 est relativement simple à construire et permet d'afficher de manière fixe ou alternée la température, le taux d'humidité et la pression atmosphérique.
   
indicateur_taux_humidite_004b
   
Version 6, 7 ou 8 afficheurs
La version à 8 afficheurs est un luxe que je m'étais permis au départ. Au final, 6 ou 7 afficheurs suffisent. Pour la version 6 afficheurs, le premier est isolé des 5 autres sur le circuit imprimé, car il n'est là que pour afficher la lettre qui indique le type de paramètre en cours d'affichage : "H" pour humidité, "t" pour température et "P" pour pression.

Affichage en version 6 afficheurs :
   
indicateur_taux_humidite_004b_6-digits_disp_h_0490 indicateur_taux_humidite_004b_6-digits_disp_t_0230indicateur_taux_humidite_004b_6-digits_disp_p_10100
   
Affichage en version 7 afficheurs :
   
indicateur_taux_humidite_004b_7-digits_disp_h_0570 indicateur_taux_humidite_004b_7-digits_disp_t_0210indicateur_taux_humidite_004b_7-digits_disp_p_09900
   
Avertissement "BMP280 ou BME280"

Le capteur BME280 à lui seul coûte plus de 15 euros à l'unité, on peut donc s'étonner de trouver des modules précâblés et prêt à l'emploi dotés de ce composant pour un coût de seulement 3 ou 4 euros. Pour entretenir la confusion, certains sites proposent à la vente des modules estampillés "BMP280/BME280", ce qui signifie que le module en question peut être doté soit d'un BMP280 soit d'un BME280... Curieusement, la plupart du temps il s'agit du BMP280 qui est bien moins coûteux, et on s'étonne que les valeurs qu'on cherche à lire ne puissent être obtenues... Distinguer l'un de l'autre n'est pas compliqué : le boîtier du BMP280 est rectangulaire, alors que celui du BME280 est carré.

Au démarrage, le logiciel du PIC questionne le capteur raccordé au système et espère y trouver un modèle valide (BME280).


Récupération des données issues du BME280
Après avoir vérifié la présence d'un capteur valide (BME280), le logiciel récupère la valeur des trois paramètres pression, température et humidité. En absence de capteur valide, le système boude et se met en pause.
   
Périodicité de lecture des paramètres
J'ai adopté un rythme de mesure toutes les deux secondes, bien que dans la pratique une mesure toutes les minutes suffirait.

Valeurs standards et compensées
Le BME280 délivre des informations brutes qui pourraient probablement être utilisées telles quelles (après traduction en langage clair, cela va de soi). Toutefois, l'exploitation directe de ces données brutes (sans compensation), qui ne réclame que très peu d'efforts de programmation, ne permettrait pas de bénéficier de la haute précision à laquelle on peut prétendre. Pour profiter au mieux du capteur, il est nécessaire de traiter davantage les valeurs brutes avec des formules de compensation exploitant des valeurs de calibrage stockées par le fabricant dans le capteur lui-même (paramètres en lecture seule rangés dans les registres P1 à P9, T1 à T3 et H1 à H6). C'est ce qui est fait dans la présente réalisation.

Exemple (en langage Pascal) pour la mesure de la température avec compensation :

   

iAdc := ((iMSB * 65536) + (iLSB * 256) + ixLSB) / 16
var1 := ((((iAdc SHR 3) - (dig_T1 SHL 1))) * (dig_T2)) SHR 11;
var2 := (((((iAdc SHR 4) - (dig_T1)) * ((iAdc SHR 4) - (dig_T1))) SHR 12) * (dig_T3)) SHR 14;
T := ((var1 + var2) * 5 + 128) SHR 8;

   

Remarque : le fabricant Bosch précise dans son datasheet que les formules de compensation qu'il propose offrent le maximum d'efficacité (de précision) avec une "gestion mathématique" sur PC 64 bits. Ce n'est pas le cas ici, mais la précision demeure toutefois excellente.


Filtrage et suréchantillonnage
Des fonctions intégrées au capteur BME280 permettent par suréchantillonnage et filtrage de réduire le bruit et d'obtenir ainsi des valeurs plus précises et plus stables, au détriment d'un temps de réactivité moindre - ce qui est loin de présenter un soucis dans la présente application. Les valeurs que j'ai utilisées sont les suivantes :
   
Extrapolation de paramètres additionnels
A partir des trois paramètres disponibles, il est possible d'en extraire deux autres, qui sont l'altitude et le points de rosée. Ces deux paramètres, non délivrés par le capteur BME280 lui-même, peuvent être obtenus par des calculs intermédiaires. Les valeurs obtenues par ces extrapolations ne sont pas très précises, mais leur ordre de grandeur correct les rend intéressantes à connaître.
Dans la plage de pression qui nous intéresse ici, la variation de pression atmosphérique est de 0,108 hectopascal par mètre d'altitude. Mais il faut aussi se souvenir que la pression atmosphérique, si elle dépend de l'altitude, dépend aussi de la météo... l'affaire n'est pas simple !
Ces valeurs interpolées sont actuellement calculées et transmises sur le port série, mais leur "fiabilité" n'a pas été vérifiée.
   
Transmission des mesures sur port série
Les valeurs de pression, de température et d'humidité relative sont transmises au format texte (ASCII) sur la broche RC6/TX1 à la vitesse de 57600 bauds, après chaque acquisition (toutes les 2 secondes), à raison d'une ligne par ensemble de valeurs.
   
indicateur_taux_humidite_004b_comm_001a 
   
Les valeurs A (Altitude) et D (point de rosée, DewPoint) n'ont pas été vérifiées.

La sortie Tx du PIC (broche RC6) devra ê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 des diverses valeurs

Les valeurs de pression, de température et de taux d'humidité relative sont affichées de manière fixe ou alternée. Dans ce dernier cas, chacune des trois valeurs est affichée pendant deux secondes environ. La sélection du mode d'affichage (pression seulement, température seulement, taux d'humidité seulement ou valeurs alternées) se fait en pressant le bouton SW1/Mode. Toute modification du mode d'affichage est conservée en EEPROM, le dernier mode sélectionné est rappelé au démarrage suivant. A tout instant, une LED indique le paramètre actuellement affiché.

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. Au total, 14 fils suffisent pour la version à 6 afficheurs (6 pour afficheurs + 7 pour segments + 1 pour point décimal). J'aurais pu utiliser un écran LCD à la place des afficheurs 7 segments pour afficher tous les paramètres en même temps, mais pour ce montage je préférais pouvoir distinguer les chiffres de loin. 

Le rafraichissement de l'affichage LED se fait à un rythme de 1000 Hz, soit toutes les 1 ms, ce qui correspond à un taux de plus de 100 Hz pour chacun des afficheurs et garantit toute absence de scintillement gênant.
   

Prototype

Réalisé selon l'implantation montrée plus loin pour la version 6 afficheurs et testé avec 3 capteurs BME280 (un module WeatherClick de MikroElektronica et deux modules chinois premier prix).

photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001a photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001b mikroe_wheater-click-i2c mikroe_wheater-click-spi
   
Les deux photos de droite qui précèdent montrent le module Weather Click de Mikroe avant modification (livré configuré en I2C grâce à des résistances de 0 ohms servant de strap) et après modification (configuration en SPI en déplaçant les straps). Comme en attestent les photos suivantes, la lecture des trois paramètres pression, température et humidité s'effectue correctement.
   
photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001c photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001d photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001e
   
En réalité, le montage n'a pas fonctionné du premier coup. En cause, une piste manquante sur le circuit imprimé qui empêchait la communication entre le PIC et le module BME280. L'ajout d'un simple fil électrique sur le prototype a résolu le problème, le fichier PCB proposé est mis à jour. A la suite de ces tests, j'ai continué avec les modules chinois premier prix reliés par un câble en nappe à 6 conducteurs :
   
photos5/electronique_bme280-module-1_001a photos5/electronique_bme280-module-1_001b photos5/electronique_bme280-module-1_001c bme280-module-2_001a
   
Là aussi, fonctionnement sans encombre.
   
photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001f photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001g photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001h photos5/electronique_indicateur_taux_humidite_004b_proto_rm_001i
   
C'est le raccord un peu fou effectué pour le test de ces petits modules chinois qui m'a poussé à prévoir un emplacement dédié sur le PCB.

   

Logiciels du PIC

Fichiers binaires compilés *.hex (à flasher dans le PIC) dans l'archive zip dont le lien suit.
Indicateur taux d'humidité 004b - 18F45K80 - pour BME280 uniquement, versions 6 et 7 afficheurs - (30/07/2023)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Circuits imprimés (PCB)

Deux versions ont été développées, une avec 6 afficheurs et l'autre avec 7 afficheurs, les deux réalisées en double face, surface totale de 100x80 mm.

Remarque : j'ai prévu un emplacement pour un module click board Weather de Mikroelektronika, mais n'importe quel autre module configuré pour une communication en SPI et acceptant une alimentation de 3V3 convient (modules chinois premier prix testés OK).

   
Version avec 6 afficheurs
   
indicateur_taux_humidite_004b_6-digits_pcb_components_top
Version du 11/08/2023
   
Version avec 7 afficheurs
   
indicateur_taux_humidite_004b_7-digits_pcb_components_top 
Version du 11/08/2023
   
Dessin des circuits imprimés (format PDF) - 10/08/2023

   

Historique

13/08/2023
- Ajout photos prototype.
- Correction dessin circuit imprimé (PCB) suite à oubli d'une piste.
- Ajout emplacement pour module BME280 premier prix sur les PCB "6 afficheurs" et "7 afficheurs".

30/07/2023
- Première mise à disposition.