FEATHER-MICROPYTHON-BMP180
Introduction
Le BMP180 de précision Bosch est la meilleure solution à petit prix pour mesurer la pression barométrique et la température. Comme la pression varie avec l'altitude, vous pouvez également utiliser ce senseur comme altimètre!
Crédit: AdaFruit Industries www.adafruit.com
Le senseur est souder sur une carte avec un un régulateur de tension 3.3V, un convertisseur de tension sur le bus I2C (level shifter) et des résistances pull-up sur les broches I2C.
Le BMP180 est la prochaine génération de senseur Bosch et remplace le célèbre BMP085. La bonne nouvelles c'est qu'il est totalement identique au BMP085 en ce qui concerne le FirmWare / Logiciel / Interfacing.
Cette carte est totalement compatible avec la logique 5V, et 3.3V grâce régulateur de tension 3.3V et Level Shifter I2C inclus sur le breakout. Vous pouvez aussi bien l'utiliser sur un Arduino (5v), un Raspberry-Pi (3.3v) ou ESP8266 (3.3v).
Quelques détails techniques:
- Vin: 3 à 5V DC (continu)
- Logique: compatible 3V à 5V (utilisable aussi bien en 3.3v qu'en 5v).
- Gamme de mesure de pression: 300-1100 hPa (9000m à -500m sous le niveau de la mer)
- Précision en pression: 0.03hPa / 0.25m
- Précision en température: +-2°C
- Température de fonctionnement: -40 à +85°C.
- Précision sur température: +/- 2°C
- Cette carte/puce utilise l'adresse I2C 7-bits 0x77.
- Fiche technique du BMP180
Schéma
Installer
L'utilisation requière l'installation d'une bibliothèque spécifique. Vous trouvez celle-ci ici:
Vous devrez copier les fichiers suivant sur votre carte MicroPython
- bmp180.py dans le répertoire racine.
Pour savoir comment copier vos fichiers sur votre carte MicroPython Feather ESP8266 Huzza, vous pouvez vous référer aux ressources suivantes:
Outil simplifié de transfert de fichiers et de contrôlez de carte depuis une connexion série. ESP8266 compatible.
Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.
Tester
Nous allons nous connecter en WebREPL pour tester notre code. Vous pouvez également réaliser ce test en REPL Série via la liaison USB-Série (si celle-ci est disponible).
La connexion REPL et WEBRepl sont abordés dans nos tutoriels généraux ESP8266 sous MicroPython
# Utilisation du breakout BMP180 (ADA1603) avec Feather ESP8266 Python
#
# Shop: http://shop.mchobby.be/product.php?id_product=397
# Wiki: https://wiki.mchobby.be/index.php?title=MicroPython-Accueil#ESP8266_en_MicroPython
from bmp180 import BMP180
from machine import I2C, Pin
# Bus I2C
# Ne pas utiliser la broche standard SCL (broche 5) car perturbe la
# sequence de boot lorsque l'on utilise un bloc d'alim USB
#
i2c = I2C( sda=Pin(4), scl=Pin(2), freq=20000 )
bmp180 = BMP180( i2c )
# 0 précision la plus basse, mesure rapide
# 3 précision la plus élevée; mesure plus lente
bmp180.oversample_sett = 2
# Pression au niveau de la mer (en millibar * 100)
bmp180.baseline = 101325
# Température sur le BMP
temp = bmp180.temperature
print( "Temperature: %.2f deg.Celcius" % temp )
p = bmp180.pressure
print( "pressure: %.2f mbar" % (p/100) )
print( "pressure: %.2f hPa" % (p/100) )
# Altitude calculée a partir de la difference de pression
# entre le niveau de la mer et "ici"
altitude = bmp180.altitude
print( "altitude: %.2f m" % altitude )
La pression PNM comme sur les stations météos
Cette section est importante car elle explique étape par étape comment afficher la pression comme celles affichées sur les stations météo de références (ou professionnelles).
Pour commencer, les stations météos affichent des pressions PNM (PNM: Pression Niveau Mer ou SLP: Sea Level Pressure).
La pression PNM c'est comme si on relevait la pression non pas à votre altitude réelle mais à une altitude correspondant au niveau de la mer. En gros, cela revient à creuser un trou en dessous de chez vous... jusqu'au niveau de la mer puis de relever cette pression au fond de ce trou.
Avoir des pressions PNM (donc toutes à la même altitude - au même niveau-) c'est bien pratique pour déterminer les mouvements d'air des zones de pression la plus élevées vers les zones de pression plus faible.
Nous venons donc de dire qu'il faut "creuser un trou sous la maison pour revenir jusqu'au niveau de la mer". Pas besoin de faire un vrai trou, il suffit de connaître la hauteur de ce trou (donc notre altitude) puis d'ajouter la pression correspondant à cette colonne d'air.
Voici la marche à suivre:
- Relevez la pression hPa (ou mmbar) au niveau de la mer (sur une station météo de référence)
- saisissez cette valeur comme baseline (n'oubliez pas de multiplier par 100)
- Utilisez le senseur pour déterminer votre l'altitude.
- Calculer la valeur de compensation (colonne d'air) en hPa = hauteur-en-m / 8.3
Ensuite, vous pourrez relever la pression du senseur (sans vous préoccuper de la baseline) PUIS ajouter la valeur de compensation calculée -> Voilà! Vous avez la Pression PNM (celles affichées sur les stations météo de référence).
# pression moyenne au niveau de la mer (non essentielle pour Pression PNM) p.baseline = 101325 # pression PNM p = bmp180.pressure + compensation
p contiendra alors la valeur de pression normalisée au niveau de la mer (PNM).
Par contre, l'altitude absolue ne sera plus mesurée fiablement (à moins de pouvoir faire une mise-à-jour de p.baseline régulièrement). Il sera toujours possible d'utiliser la valeur de l'altitude pour détecter une différence de niveau si votre senseur est embarqué sur un "ballon sonde". Dans le cas d'une station météo fixe, l'altitude ne sera plus d'une très grande utilité :-) ... c'est la pression PNM qui nous intéresse
Prenez le temps de lire les points suivants, ils contiennent toutes les informations nécessaires pour comprendre et réaliser les opérations décrites ci-dessus. |
La pression au niveau de la mer varie!
Une valeur standard de la pression au niveau de la mer est de 1013.25 mbar (ou 1013.25 hPa).
Cependant, cette valeur varie en fonction des conditions atmosphérique et de la quantité de vapeur d'eau dans l'air.
Par exemple, ce jour, la pression est de 1002.00 hPa à la Panne (En bordure de mer, Belgique). La Belgique étant un petit territoire relativement plat, la variation de pression à la mer est forcement un élément plus important qu'ailleurs.
Cette valeur est importante si vous avez besoin de relever votre altitude avec une certaine précision en vue de calculer la colonne d'air de compensation (pour calculer les pressions PNM)
J'ai donc corrigé ma baseline comme suit (valeur en hPa * 100):
bmp180.baseline = 100200
Vous pouvez facilement prendre connaissance de cette pression en consultant un site météo local.
Je vous propose ce lien vers meteobelgique.be
Le senseur ne me donne pas la bonne altitude!
Mon senseur m'indique une altitude à 189m alors que le site météorologique, à deux pas de chez moi, est à 120m de haut (en haut de la tour du service d'incendie)!
L'altitude peut être déduite de la différence entre la pression atmosphérique locale et la pression atmospherique au niveau de la mer.
Pour relever votre altitude avec précision avec un BMP180, vous devez connaître la pression au niveau de la mer (baseline) avec la même précision.
Une fois la pression de la baseline corrigée avec:
bmp180.baseline = 100200 # Pression du jour au niveau de la mer (multiplier par 100)
mon senseur retourne une altitude de 104m, nettement plus convenable.
La pression atmosphérique semble incorrecte!
Mon senseur retourne la valeur de 98909 (soit 989.09 hPa) alors que la station météo de référence indique 1002 hPa!
Dans l'absolu, la valeur est bonne mais pas ne tient pas compte de la normalisation/compensation PNM appliqué par la station de référence.
Nous allons faire ce petit calcul ensemble...
Pour commencer: vous aurez lu les points précédents et vous savez donc :
- Faites en sorte que la pression au niveau de la mer corresponde à la valeur du jour (baseline=100200)
- Ceci fait, relevez votre altitude à l'aide du senseur (le mienne est de 104 m)
- La pression diminue de 1hPa chaque fois que l'on monte en altitude de 8.3m .
Ensuite, la station météo:
Les stations météos normalisent la valeur de la pression atmosphérique pour la ramener "au niveau de la mer" (PNM: Pression Niveau Mer ou SLP: Sea Level Pressure).
Cela signifie que la station météo appliquent une correction (compensation) comme indiqué en début de cette section.
Pour ma station de référence, il s'agit de 120m. En gros, la correction consiste à ajouter une colonne d'air de 120m au dessus du senseur donc une correction de (120 / 8.3) hPa = 14.45 hPa.
Appliquons la correction à la mesure notre BMP180:
Dans notre cas précis, notre altitude est de 104m. Rapellez-vous, la pression diminue de 1hPa tous les 8.3m.
Pour 104m la colonne d'air correspondante représente une pression de 104 / 8.3 = 12.53 hPa
Le senseur BMP180 retourne la valeur 989.09 hPa, la valeur corrigée au niveau de la mer est 989.09 + 12.53 = 1001.62 hPa. Soit la valeur de la station de météo de référence (1002 hPa) à deux pas de la maison.
Vous aurez sans doute noté que la pression de la station de référence est de 1002 hPa, tout comme la pression au niveau de la mer (aussi 1002 hPa). C'est un pure hasard du jour, ces deux valeurs sont habituellement différentes. |
Encore Plus
Voyez:
- Pression Atmosphérique expliquée: https://fr.wikipedia.org/wiki/Pression_atmosph%C3%A9rique
- nos autres tutoriels MicroPython sur ESP8266
- tutoriels MicroPython (généraux).
- Le GitHub de MCHobby consacré à l' ESP8266 sous MicroPython
Où acheter
- BMP180 - mesure de pression et température
- Feather ESP8266 Huzzah
- Huzzah ESP8266 WiFi breakout
- La gamme MicroPython
Tutoriel réaliser par Meurisse D. pour MC Hobby SPRL
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.