Page annexe sur les capteurs électroniques de pression
|
Maj : 05/10/20
Abstract :
Résumé : |
Les capteurs de pression atmosphérique
Il existe une grande variété de capteurs électroniques pour les diverses gammes de pressions, et cette page n’est pas restrictive à un seul type, la suite est valable aussi pour tous les autres modèles de capteurs de différents fabricants. ! Les datasheets de Bosch sont très instructifs, il faut les étudier avec soin. Chaque nouvelle génération de capteurs est meilleure que la précédente. Il existe toutes les bibliothèques d’exploitation. La liaison se fait au choix en I2C ou SPI. Pour les non micro-informaticiens, ce sont les protocoles de liaison série basiques. Ces capteurs Bosch sont complexes en comportent beaucoup de registres subtils, mais heureusement de nombreuses bibliothèques sur Github en rendent l’utilisation sur Arduino immédiate. |
BMP280 |
Si l’on cherche une valeur précise et répétitive de la pression, plus précisément du QNH, les choses ne sont pas si simples !
Prenons par exemple l’ancienne génération BMP280 dont j’ai testé beaucoup d’exemplaires montés en parallèles. Le datasheet nous donne :
Relative accuracy ±0.12 hPa, equiv. to ±1 m (950 … 1050hPa @25°C) _____ Et absolute accuracy ±1.7 hPa
Il faut donc s’attendre pour une pression normale de 1013.25 hPa (ramenée à l’altitude) de lire entre 1011 et 1015 hPa, avec les mêmes tolérances entre anticyclone 1025 hPa et dépression 980 hPa.
Il faut donc s’attendre pour une pression normale de 1013.25 hPa (ramenée à l’altitude) de lire entre 1011 et 1015 hPa, avec les mêmes tolérances entre anticyclone 1025 hPa et dépression 980 hPa.
En traçant simultanément les courbes de divers capteurs placés au même endroit dans les mêmes conditions, il est surprenant de constater que les courbes ne sont absolument pas parallèles et « tricotent » avec des écarts bien supérieurs aux prévisions ! Cela semblerait provenir du fait que les composants montés sur les platines chinoises sont des seconds choix éliminés au contrôle.
Une correction élémentaire du premier degré (y = a x + b) minimisera le problème. Tous les calculs se feront évidemment en flottant : Valeur retenue = (Valeur lue * coefficient multiplicateur) + offset Suivant les cartes, mes coefficients multiplicateurs sont entre .99 et 1.1 et les offsets de +/- 3 hPa Les valeurs retenues des capteurs se font après un filtrage comme décrit ici : Filtrage par pondération temporelle Pour rester simple, je ne parle que de la méthode rustique de compensation externe, mais en étudiant le document Bosch, vous verrez que l’on peut agir aussi subtilement sur les réglages internes ! |
Ancienne génération |
Banc d’étalonnage des capteurs de pressions
L’instrument de base indispensable est un baromètre de Torricelli comme décrit,
Si les valeurs divergent trop, il est inutile de continuer, les résultats ne seront pas interprétables.
|
||
Le bidon plastique L’enceinte de mesure choisie est un bidon plastique à gros bouchon. Un tube en cuivre provenant d’un coaxial semi rigide adopté en hyperfréquences, servira pour raccorder le tuyau. Il ne reste plus qu’à placer le capteur 4 fils (I2C) ou 6 fils (SPI). Un Arduino extérieur permettra de lire les valeurs. L’air s’infiltre dans le multiconducteur, il faut noyer toutes les extrémités des fils après soudure. Premier essai en immergeant le bidon dans un seau d’eau et en sur-gonflant : |
Dépression et compression Un aspirateur permet de réaliser au mieux une dépression de 200 hPa : 1203 hPa -> 803 hPa.
Comme le montre la courbe, fuite 45 hPa en 24 h, la première réalisation a échoué, je n'ai pas su parvenir à une étanchéité suffisante. Ma première approche avait été d’utiliser un pot de miel en verre dont le couvercle était découpé pour passer une prise DB9 et le raccord d'un tuyau, le tout noyé dans un bloc de silicone. |
Premier échec du bocal |
Résultat des tests Observez la courbe <Pression> après mise en forte dépression sur 24 heures.
|
Déformation
|
|
Vous comprendrez mieux en corrélant la courbe des pressions avec celle des températures du BMP280. J’ai fait le même test en surpression, résultats identiques (mais en sens inverse) : L’enceinte est donc validée comme parfaitement étanche L’enceinte étant est étanche à des écarts dix fois supérieurs à ceux des mesures réelles (pour rappel anticyclone 1025 hPa et dépression 980 hPa), elle sera donc parfaitement étanche dans une plage d’étalonnage de 1013.25, + 10 hPa et - 25 hPa.
|
Test en forte dépression |
|
Astuce : Brancher le réservoir Le bouchon vissé sur le verre fuit, il sera impossible de faire l’étanchéité avec un autre bouchon percé. J’ai adopté les raccords et Tés pour arrosage automatique, très communs, faciles à adapter sur des tuyaux souples divers. La petite marque au feutre blanc correspond au zéro de l’échelle, niveau du mercure à 760 mm et 20°C. Il faut ajuster à la goutte près pour aligner ce niveau. Alternative Il est aussi possible de ne pas monter de prise. Avec un bocal plus grand, un Arduino alimenté sur accumulateur permettra de gérer un afficheur visible au travers du verre, c’est une cause de fuites en moins. Les bacs pour congélation avec couvercle plastique et valve d’aspiration conviennent très bien aussi en dépression, mais ne le couvercle sautera en compression. |
|
Programme d’étalonnage du BMP280
Après avoir rentré votre altitude dans le #define (ici 238), votre bon type de baromètre, et chargé le bon driver, vous obtiendrez cet affichage série 115200 bauds : Altitude = 238 m ... Coefficient d'altitude = 1.028692 ... Température = 25.74 °C ... Coefficient temp = 1.004685 989.45 hPa ... 742.15 mm Hg <-- Lecture brute du BMP280 Les valeurs à retenir sont sur la dernière ligne, après les deux corrections multiplicatives, ici en pression ambiante : |
Le programme |
|
Remarque 1 : BMP280 ou BME280 ? Même si vous avez un BMP280, il vaut mieux utiliser la bibliothèque BME280 plus évoluée que celle du BMP280. Evidement vous lirez un taux d’humidité à zéro.
J’ai commandé plusieurs lots de BME280 chinois à pas cher… En réalité il s’agissait de BMP280 hors tolérances et ré étiquetés BME…
Remarque 3 : Attention aux subtilités du C ! Si vous écrivez : mais si vous écrivez Par contre en écrivant /100.0 , vous divisez bien un uint32_t par un double, la conversion implicite vous donne bien un float avec toutes ses décimales.
Remarque 4 : Pourquoi garder la température initiale pendant les mesures. En début de manipulations, la température du mercure est équilibrée avec celle du BMP280. Lors des tests, en augmentant / diminuant la pression dans l’enceinte, le BMP280 va s’échauffer/ se refroidir (loi des gaz parfaits), alors que la température du mercure ne bougera absolument pas. Le firmware Bosch corrige la température dans l’affichage de la pression, c’est pour cela qu’il ne fait pas faire intervenir la température instantanée. |
|
Pour lancer les mesures précises, il est préférable d’attendre que le vent soit très faible, en effet le QNH de la station de référence peut différer du local lors des mouvements des masses d’air. Sans vent, le champ des pressions ramené au QNH est équipotentiel.
Après de nombreuses courbes Excel, avec des pas de pression très petits, il s’est avéré que cela était inutile, la réponse du BMP280 étant assez linéaire. Il suffit alors de prendre seulement deux points, l’un en dépression -200 hPa, l’autre en compression +200 hPa. C’est très loin des valeurs réalistes de nos futures variations de pression, mais cet écart énorme permet de réduire les erreurs de lecture de hauteur de la hauteur de mercure.
Cela permet de calculer la pente et l’offset de la droite, courbe du premier degré, y = a x + b
<y> est la valeur lue sur le BMP280, en mm Hg, donnée par le petit programme joint qui intègre les compensations
<x> la hauteur de mercure lue.
Vous devriez trouver la pente a = 1 et l'offset b = 0.
La réalité sera moins glorieuse avec un composant chinois de second choix.
Fin de la page annexe sur les capteurs électroniques Retour à la page principale sur les baromètres