Dernière mise à jour :
13/08/2023
Présentation
Cet indicateur d'humidité relative est basé sur l'emploi d'un capteur
numérique BM
E280,
qui permet également la
mesure de la pression atmosphérique (baromètre) et de la
température.
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.
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 :
Affichage en version 7 afficheurs :
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 (BM
E280), 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 :
-
iMSB, iLSB et ixLSB sont les valeurs brutes de mesure récupérées dans
les registres $F7 à $F9
-
dig_T1, dig_T2 et dig_T3 sont les valeurs de
compensation récupérées dans les registres $88 à $8D
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 :
- Coefficient filtre = 16 (_FILTER_COEFF_16)
- Suréchantillonnage pour Temperature = 2x (_OVERSAMP_2X)
- Suréchantillonnage pour Humidité = 1x (_OVERSAMP_1X)
- Suréchantillonnage pour Pression = 16x (_OVERSAMP_16X)
- Mode = Normal (_NORMAL_MODE)
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.
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).
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.
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 :
Là aussi, fonctionnement sans encombre.
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 BM
E280 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
Version du 11/08/2023
Version avec 7 afficheurs
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.