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. |
![]() 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);
}