samedi 11 juin 2016

Mesurer la pression atmosphérique avec BMP180 et Arduino (ou ESP8266, ESP32, STM32...)

Cet article a été mis à jour le 16 janvier 2021 (ajout des instructions pour les cartes ESP8266, ESP32 et STM32).

Dans cet article, je vais vous expliquer comment j'ai utilisé un capteur BMP180 pour mesurer la pression atmosphérique.  Pour tester le capteur, je l'ai placé à l'intérieur d'un récipient hermétique mis sous pression grâce à une pompe à vélo.

Le BMP180

Le BMP180 est un circuit intégré mis au point par Bosch Sensortec conçu pour mesurer la pression atmosphérique avec précision.  Typiquement, il est utilisé pour des observations météorologiques ou pour la détermination de l'altitude à partir de la pression.

Le circuit intégré est minuscule; pour nous faciliter la tâche, c'est important de nous procurer un breakout tout fait, qui pourra facilement être inséré dans une breadboard, ou branché à une carte Arduino. Le module que j'ai utilisé porte le numéro GY-68.

Connexions du module GY-68 à un Arduino Uno

Le BMP180 utilise le protocole i2c, nous ne sommes donc pas surpris de constater qu'il comporte 4 connecteurs:
  • VIN doit être branché à la sortie 5 V de l'Arduino*
  • GND doit être branché à une des broches GND de l'Arduino
  • SCL doit être branché à l'entrée A5 de l'Arduino Uno**
  • SDA doit être branché à l'entrée A4 de l'Arduino Uno**
* Le module GY-68 comporte un régulateur de tension 662K permettant de l'alimenter à 5 V. Ce n'est pas le cas de tous les modules BMP180, toutefois; certains d'entre eux (comme celui conçu par Sparkfun)), doivent être alimentés à 3,3 V pour ne pas être endommagés.

** Ces broches sont différentes pour certains modèles d'Arduino, comme par exemple Mega et Leonardo.


Connexions du module GY-68 à un ESP8266
  • VIN branché à 3,3 V  de l'ESP8266
  • GND branché à une des broches GND de l'ESP8266
  • SCL branché à la broche GPIO 5 de l'ESP8266
  • SDA branché à la broche GPIO 4 de l'ESP8266


Connexions du module GY-68 à un ESP32
  • VIN branché à 3,3 V  de l'ESP32
  • GND branché à une des broches GND de l'ESP32
  • SCL branché à la broche D22 de l'ESP32
  • SDA branché à la broche D21 de l'ESP32


Connexions du module GY-68 à un STM32F103C8T6 "Blue Pill"

  • VIN branché à 3,3 V de la Blue Pill
  • GND branché à une des broches GND de la Blue Pill
  • SCL branché à la broche B6 de la Blue Pill
  • SDA branché à la broche B7 de la Blue Pill


Connexions du module GY-68 à un STM32 Nucleo (F030R8)

  • VIN branché à 3,3 V de du Nucleo
  • GND branché à une des broches GND du Nucleo
  • SCL branché à la broche SCL/D15 du Nucleo
  • SDA branché à la broche SDA/D14 du Nucleo



Bibliothèque Sparkfun

Plutôt qu'étudier la fiche technique du BMP180 afin de tout programmer moi-même, j'ai installé la bibliothèque conçue par Sparkfun.

Après avoir procédé à l'installation de cette bibliothèque, vous  pouvez jeter un coup d'oeil à l'exemple "SFE_BMP180_example" qui montre comment mesurer la température et la pression, en plus de calculer la pression au niveau de la mer en utilisant l'altitude.


Dispositif pour tester le capteur

Pour vérifier que le capteur fonctionnait adéquatement, j'ai construit un petit récipient dans lequel il était possible d'augmenter la pression grâce à une pompe conçue pour gonfler les ballons.


Le capteur BMP180 se trouve à l'intérieur du récipient, alors que l'Arduino est à l'extérieur:  les fils qui relient le BMP180 à l'Arduino passent par un petit trou, calfeutré avec de l'epoxy.


Voici le dispositif complet.  J'ai ajouté une brique par-dessus le récipient pour éviter que le couvercle s'ouvre trop tôt sous l'effet de la pression (un couvercle vissable aurait donné de meilleurs résultats).


Sketch

L'exemple "SFE_BMP180_example" fourni avec la bibliothèque affiche un certain nombre d'informations inutiles, et le délai de 5 secondes entre deux mesures consécutives ne convenait pas à mes besoins.  Je l'ai donc modifié pour qu'il n'affiche rien d'autre que la pression en hectopascals, en prenant deux mesures à chaque seconde.

D'après ce que j'ai compris, il est nécessaire de prendre une mesure de température avant de prendre la mesure de pression, c'est pourquoi j'ai laissé en place la fonction getTemperature même si je n'affiche pas la valeur mesurée.


Résultats

Voici ce que ça donne.  Au moment de la mesure, la pression atmosphérique était d'environ 1002 hPa, mais elle a grimpé jusqu'à 1059 hPa pendant que je pompais de l'air à l'intérieur du récipient.


À lire également



Yves Pelletier   (TwitterFacebook)

7 commentaires:

  1. Bravo mais nous esperond la voir à video merci infiniment

    RépondreSupprimer
  2. bonjour
    blog tres instructif, merci
    une question : pourquoi doit-on brancher le bpm180 sur le 3v3, le module integre un reg 662k 3v3 qui permet de l'alimenter en 5 volts ?

    RépondreSupprimer
    Réponses
    1. C'est vrai! J'ai fait tous mes tests à 3,3 V (sans problème), mais la présence du régulateur permet d'utiliser une alimentation de 5 V.

      Supprimer
  3. bonjour, lors de la mise en place du programme sur arduino, quand le veux vérifier celui ca ne fonctionne pas pourriez vous m'aider svp. Merci

    RépondreSupprimer
  4. Je viens ici déterrer ce post, car il y a une information erronée qui circule sur le net. Si on utilise un Arduino, il faut alimenter le BMP180 breakout board en 5V et surtout pas en 3.3V. En effet, la petite carte contient un régulateur. Par ailleurs, si vous l'alimentez en 3.3V, les bus data et données de l'Arduino étant en 5V, vous vous trouvez à injecter du 5V sur l'alimentation 3.3V de l'Arduino. C'est pas bon !! Pour vous en persuader, branchez un oscillo sur votre 3.3V. A chaque lecture du BMP180 par l'Arduino vous verrez votre 3.3V monter à 4V, 4,5V, à la récurrence de votre interrogation.
    Qu'on se le dise ! Si vous utilisez un micro-contrôleur alimenté en 3.3V, alors oui vous pouvez l'alimenter en 3.3V ( même si je ne sais pas comment le régulateur sur la carte va réagir .... ).

    RépondreSupprimer
    Réponses
    1. J'ai vérifié et, effectivement, la tension d'entrée passe de 3,3 V à 4,2 V! Je vais modifier le schéma...

      Supprimer