Loi de Mariotte avec capteur Grove

Capteur de pression absolue MPX5700AP

Le MPX5700AP est un capteur piézorésistif de pression absolue (150 à 7000 hPa).

Capteur MPX5700AP Grove (image : seeedstudio)

Schéma électrique (source : Freescale Semiconductor, Inc.)

La sortie du capteur est une tension analogique. La relation avec la pression suit une fonction affine telle que :

Pression

Tension de sortie

0 hPa

0,2 V

7000 hPa

4,7 V

La documentation technique donne une précision est de \(\pm2,5~\%\) de la plage totale de variation. Cette précision tient compte de la variation de la pression par rapport à la valeur nominale, de la linéarité, de l’hystérésis de pression, de l’hystérésis thermique et de la déviation de la sortie par rapport à la température.

Avertissement

Pour une meilleure précision, il convient d’étalonner le capteur à partir d’une mesure précise de la pression atmosphérique.

Calcul de la pression

La mesure de pression (en hPa) est donnée par la relation pour une alimentation de 5 V :

\[\boxed{P = \dfrac{P_{max}}{V_{max}-V_{min}} \times (v_{out}-V_{min})}\]

Soit :

\[P = \dfrac{7000}{4,7-0,2} \times (v_{out}-0,2) \quad\implies\quad \boxed{P = \dfrac{7000}{4,5}\times (v_{out}-0,2)} \quad ({\rm hPa})\]

Mesure simple de la pression absolue

Le programme ci-dessous calcule et affiche la pression du capteur à partir de sa tension de sortie. La valeur de la tension de sortie du capteur est donnée à titre informatif.

/*
 * Mesure d'une pression absolue
 * Capteur Grove MPX5700AP (150 hPa à 7000 hPa) branché sur la broche A0
 * David THERINCOURT - 2025
 */

float VCC = 5.00;                        // Tension d'alimentation de l'Arduino
float tension;                           // Tension du capteur
float pression;                          // Pression calculée

void setup() {
   Serial.begin(9600);                    // Initialisation du port série
   Serial.println("-----");               // Affichage initial
}

void loop() {
   tension = analogRead(A0)*VCC/1023.0 ;  // Lecture de la tension sur A0 en volt
   pression = 7000/4.5*(tension-0.2) ;    // Calcul de la pression en hPa
   Serial.print(tension);                 // Affichage
   Serial.print("V \t");                  // ...
   Serial.print(pression);                // ...
   Serial.println(" hPa");                // ...
   delay(1000);                           // Temporisation
}

Exemple de mesures obtenues dans le moniteur série d’Arduino IDE

Vérification de la loi de Mariotte

Le programme ci-dessous saisie au clavier le volume \(V\) puis affiche la mesure de la pression \(P\) correspondante. Ces mesures sont affichées au format CSV pour permettre une exportation des données par copier-coller dans un grapheur (ex. Regressi, www.desmos.com, …)

/*
 * Mesure d'une pression absolue - Vérification de la loi de Mariotte
 * Capteur Grove MPX5700AP (150 hPa à 7000 hPa) branché sur la broche A0
 * David THERINCOURT - 2025
 */

float VCC = 5.0;    // Tension d'alimentation
float volume;       // Volume de la seringue
float tension;      // Tension sortie capteur
float pression;     // Pression mesurée

void setup() {
   Serial.begin(9600);                                  // Initialisation communication série
   Serial.println("Saisir le volume au clavier en mL"); // Affichage
   Serial.println("---- CSV ----");                     // ...
   Serial.println("Vs ; P");                            // ...
   Serial.println("mL ; hPa");                          // ...
}

void loop() {
   while (Serial.available()==0){}         // Attente message (Cocher "Pas de fin de ligne")
   volume = Serial.parseFloat();           // Extraction de la valeur du volume
   tension = analogRead(A0)*VCC/1023.0 ;   // Lecture de la tension sur A0 en volt
   pression = 7000/4.5*(tension-0.2) ;     // Calcul de la pression en hPa
   Serial.print(volume,0);                 // Affichage de mesures en CSV
   Serial.print(" ; ");                    // ...
   Serial.println(pression,0);             // ...
}

Avertissement

Pour commencer une nouvelle série de mesure, il faut relancer le programme en appuyant sur le bouton RESET du microcontrôleur.

Exemple de mesures obtenus dans le moniteur série d’Arduino IDE

Le volume final est donné par la relation :

\[V = V_s + V_0\]
  • \(V_s\) est la volume de la seringue ;

  • \(V_0\) est le volume additionnel contenu dans le tube et le capteur.

Résultats

Le volume \(V_0\) est négligé.