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

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);
  }