BTS Mesure BTS Mesure
DébutTP 1UARTLED RGBBilanCapteursDataloggingStationUltrasonCAN seriePontRégulationCO2

Vérification de la loi Boyle Mariotte

Dans cet exemple on mesure une surpression
à l'aide d'un capteur MPX5500 DP
On remplit un tableau de mesure du type :
 


On vérifie ensuite que PV = ctse.
Pour cela on vérifie que P(1/V) est une droite
qui passe par l'origine si le capteur est bien étalonné...
 

Dans cet exemple l'exploitation des mesures est faite par un programme python qui communique  avec  un Arduino.

Cette Interface Homme Machine peut aussi être développée en langage Labview (programme présenté ici)

Labview est le prochain langage informatique spécialement adapté aux techniciens et ingénieurs que nous étudierons.

L'Arduino assure la partie mesure. L'utilisateur envoie le volume de la seringue et l'Arduino lui renvoie les mesures.
Voici le programme utilisé pour cet exemple (avec un MPX5500)  :

 



Les programmes python, arduino et différentes ressources sont disponibles sur ce lien.
// Après essai la tension de sortie ne dépasse pas 1.1 V avec le MPX5500
// Pour être plus précis on peut utiliser la référence interne de 1.1 V 
// Ainsi la résolution de l'Arduino est d'environ 1 mV au lieu de 5 mV
float Vout,q=1.1/1024; // q= quantum Arduino

int Pmano,Pabs; // Pmano et Pabs en hPa sans chiffre après la virgule
float PV; // en Joule
int Vseringue=20;
// Capteur différentiel : il faut donner la pression atmosphérique en hPa pour calculer la pression absolue 
const int Patm=1010; // http://www.meteociel.fr/previsions/30982/saint_maximin_la_sainte_baume.htm

void setup() {
  Serial.begin(9600); 
  analogReference(INTERNAL);            // Vref = 1.1 V q = 1,07 mV au lieu de 4,88 mV
  Serial.println("mL\thPa\thPa\tV\tJ");  
  // Sur le moniteur série activer le retour ligne sinon l'Arduino attend le timeout de 1s de la méthode parseInt()
}

void loop() {
   
  Vout=q*analogRead(A0);
  Pmano=10*((Vout-0.200)/0.007);    // MPX5500DP datasheet : VOUT= VS*(0.0018*P+0.04)=0.009*P+0.200 avec P en kPa et Pmano en hPa
  // Fait à confirmer : la sensibilité pour obtenir une droite passant par l'origine est de 7mV/kPa au lieu de 9 mV/kPa annoncé par le constructeur
  Pabs=Pmano+Patm;
  //Pabs=10*((Vout/5.0)+0.095)/0.009;    // MPX5100AP datasheet : VOUT = VS (P x 0.009 - 0.095)
  delay (200);
  if (Serial.available()) demandeMesure();
}

void demandeMesure() {
  Vseringue=Serial.parseInt(); // Lit le volume seringue envoyé par le moniteur série
  while (Serial.available()) Serial.read();   // Vide le buffer Serial s'il reste des caractères...  
  PV=1E-4*Pabs*Vseringue;// Pabs en hPa et Veringue en mL
  String message = String(Vseringue) +"\t" + String(Pabs) + "\t" + String(Pmano) + "\t" + String(Vout,3) + "\t" + String(PV,3) ;
  Serial.println(message);
  }

Programme minimaliste

Pour ceux qui débutent, voici un programme  minimaliste qui affiche  P toutes les secondes :

float Vout;
float q=5.0/1024; // q= quantum Arduino

int Pmano,Pabs; // Pmano et Pabs en hPa sans chiffre après la virgule
int Patm=1010; // http://www.meteociel.fr/previsions/30982/saint_maximin_la_sainte_baume.htm

void setup() {
  Serial.begin(9600); 
  Serial.println("P en hPa");  
}

void loop() {
  Vout=q*analogRead(A0);
  Pmano=10*((Vout-0.200)/0.007);    // MPX5500DP datasheet : VOUT= VS*(0.0018*P+0.04)=0.009*P+0.200 avec P en kPa et Pmano en hPa
  // Fait à confirmer : la sensibilité pour obtenir une droite passant par l'origine est de 7mV/kPa au lieu de 9 mV/kPa annoncé par le constructeur
  Pabs=Pmano+Patm; 
  Serial.println(Pabs);
  delay (1000);
}