samedi 16 mars 2019

Mesure de la pression dans un liquide avec BMP180 et Arduino

J'ai déjà eu l'occasion de vous présenter le capteur de pression et de température BMP180 pour la mesure de la pression atmosphérique; je l'avais également utilisé lors de la fabrication d'une flûte à bec MIDI. Cette-fois, j'utilise le même capteur pour mesurer la pression dans un liquide, à différentes profondeurs.

Principe de fonctionnement

Évidemment, il n'est aucunement question de plonger un circuit électronique dans l'eau. C'est plutôt une extrémité d'un tube de plastique qui est plongée dans l'eau. L'autre extrémité du tube est reliée à une coquille de plastique hermétiquement fermée (sans fuite d'air) dans laquelle se trouve le capteur BMP180.

Au départ, lorsque le tube est hors de l'eau, la pression dans la coquille est égale à la pression atmosphérique ambiante. Si on plonge l'extrémité du tube dans l'eau, un peu d'eau monte dans le tube, poussée par la pression du liquide qui est plus grande que la pression atmosphérique. Cette montée de liquide dans le tube a pour effet de comprimer l'air enfermé dans la coquille, et d'augmenter sa pression, jusqu'à ce qu'un équilibre s'installe: la pression atmosphérique dans la coquille (mesurée par le BMP180) est alors égale à la pression dans le liquide (à la position de la surface du liquide dans le tube).



Circuit

Un module BMP180 (modèle GY-68) comporte quatre connecteurs: deux pour son alimentation électrique, et deux pour la communication I2C avec le microcontrôleur.


  • Broche VIN du BMP180: 5 V de l'Arduino*
  • Broche GND du BMP180: GND de l'Arduino
  • Broche SCL du BMP180: broche A5 de l'Arduino
  • Broche SDA du BMP180: broche A4 de l'Arduino
* car le module GY-68 comporte un régulateur de tension.

(ces connexions supposent l'utilisation d'un Arduino Uno).




Fabrication de la sonde

Le capteur de pression BMP180 est inséré dans une coquille rigide. J'ai utilisé une coquille en plastique de Kinder Surprise qui était inutilement grosse (ce qui a pour inconvénient de faire monter le liquide très haut dans le tube: il est donc impossible de mesurer la pression jusqu'au fond du récipient qui contient le liquide). Autant que possible, essayez de trouver un récipient rigide tout juste assez grand pour contenir le capteur.


Des trous permettent le passage du tube (à plonger dans le liquide) et des fils (pour la connexion à l'Arduino).


Il faut ensuite rendre la coquille parfaitement hermétique, pour éviter toute fuite d'air. Pour ce faire, j'ai utilisé une généreuse quantité de ruban gommé. Si le niveau de liquide dans le tube monte jusqu'au niveau de liquide dans le récipient, c'est qu'il y a une fuite d'air et il faut trouver une façon de l'éliminer­.


Sketch

Après avoir installé la bibliothèque SFE_BMP180 proposée par Sparkfun, j'ai modifié un des exemples fournis afin de n'afficher que la pression (en Pascal) dans le moniteur série.




Expérimentation et résultats

J'ai cherché à vérifier expérimentalement cette relation entre la pression dans un liquide et la profondeur:

        p = ρgh

où p est la pression relative (par rapport à la surface du liquide) en Pascal (Pa)
     ρ est la masse volumique du liquide en kg/m3 (1000 kg/m3 pour l'eau)
     g est l'accélération gravitationnelle à la surface de la terre (9,8 m/s2)
     h est la profondeur, mesurée par rapport à la surface du liquide (en mètres)

Compte tenu de notre façon de mesurer la pression, la profondeur "h" est la distance verticale entre la surface du liquide dans le récipient et la surface du liquide à l'intérieur du tube de la sonde.

Il faut également noter que le BMP180 mesure la pression absolue: la valeur mesurée est déjà d'environ 100 000 Pa à la surface du liquide (pression atmosphérique), alors que l'équation suppose une pression relative (nulle à la surface).

J'ai donc démarré le sketch présenté plus haut afin d'afficher dans le moniteur série la pression mesurée, et j'ai noté cette pression pour plusieurs profondeurs différentes, par bonds de 5 mm.

Après transcription des mesures dans un tableur (Excel ou LibreOffice Calc) et transformation de la pression absolue en pression relative (en soustrayant de chaque pression mesurée la pression atmosphérique normale), j'ai produit un graphique de la pression (en Pa) en fonction de la profondeur (en mètre).




J'ai obtenu une droite dont la pente est de 9690 Pa/m.  En divisant la pente par 9,8 m/s2, on trouve une masse volumique expérimentale de 989 kg/m3 , ce qui n'est pas très loin des 1000 kg/m3 prévus.

À lire également



Yves Pelletier   (TwitterFacebook)

5 commentaires:

  1. Ce petit montage devrait intéressé de nombreux industriels pour la mesure de niveau d'un fluide dans une cuve . Il faudrait saisir la densité du produit et afficher la hauteur de ce produit par rapport au point bas de la sonde . Une précision de 2 à 3 % et généralement plus que suffisante . A partir de cette mesure il faut prévoir des points d'alarme qui seront introduits dans l'automatisme ( à relais ou automate programmable ). Dans un tel dispositif on ajoute , si possible , une sonde tout ou rien niveau haut et une autre niveau bas ( plus bas que le tube de mesure ) qui permettra un étalonnage automatique .
    Techniciens à vos arduino

    RépondreSupprimer
    Réponses
    1. c'est très courant dans l'industrie des procédés, la mesure de niveau par pression hydrostatique.
      http://www.instrumentation-industrielle.fr/EMERSON/niveau.htm
      Et le pressostat de la machine à laver fonctionne sur ce principe...

      Supprimer
  2. Bonjour,
    Merci pour ce montage très simple et très intéressant. Je compte utiliser ce principe pour mesurer le niveau d'eau de ma piscine. Petite proposition d'amélioration pour tous ceux qui comme moi ont essayé de rendre ce p... d'oeuf Kinder étanche sans succès après plusieurs heures : j'ai finalement utilisé une simple bouteille vide dans laquelle j'ai glissé le capteur et que j'ai retournée dans le liquide à mesurer.
    Merci beaucoup pour ce tuto

    RépondreSupprimer
    Réponses
    1. Bonjour, j'essaie moi-même depuis quelque temps de rendre étanche la boîte où est situé le capteur ce que je n'arrive pas complétement à cause de l'espace laissé à l'air par les câbles arduino (j'ai pris un tupperwar donc hermétique au départ auquelle j'ai percé 2 trous l'un pour les câbles et l'autre pour le tube). J'ai essayé avec de nombreux rubans adhésifs et/ou colle à silicone mais rien n'y fait...J'ai remarqué votre solution de prendre une bouteille vide et la retournée mais auriez-vous plus de détail à ce sujet comme par exemple comment avez-vous fait passé les fils? , avez-vous fixé le capteur au fond de la bouteille?, percé quand même un trou?...
      Si quelqu'un à des idées pour rendre cette boîte au maximum hermétique à l'air je suis désespéré... ;)

      Supprimer
  3. Bonjour et Merci pour ce tuto.
    sauriez vous jusqu'à quelle profondeur on pourrait aller avec ce capteur?

    RépondreSupprimer