Vérification de la loi Boyle Mariotte : Interface Homme Machine Labview
Le programme Labview est disponible sur ce lien.
Le programme Arduino doit répondre lorsque le programme Labview lui envoie le volume. La réponse est du type : 20\t1200...\r\n (volume -> pression etc fin de ligne)
Voici un exemple du programme Arduino compatible :
// 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/hPa 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);
}