1ère PC : Mesurer une pression à l’aide d’un microcontrôleur et tester la loi de Mariotte.

Ressource proposée par : JF. AMIOTTE-SUCHET

Démarche pédagogique choisie :

Les élèves mettent en route le système de mesure en exécutant les programmes fournis pour afficher la tension du capteur. Il procède ensuite à l’étalonnage du capteur afin de relier tension et pression. Ils adaptent le programme pour afficher la pression et finissent par tester la loi de Mariotte. Pour cette dernière partie, le travail est peu guidé, c’est aux élèves de proposer et mettre en œuvre une démarche.
Dans la version Python, pour des élèves rapides et à l’aise avec Python, on peut demander l’automatisation des mesures et du tracé de la caractéristique. Dans ce cas, l’utilisateur entre seulement le volume réglé dans la seringue et le programme se charge de récupérer la pression, de stocker les valeurs et tracer la courbe correspondante

1ère étape : Mesure de la tension fournie par le capteur via le microcontrôleur
  • Les élèves mettent en route le système de mesure en exécutant les programmes fournis pour afficher la tension du capteur.
2ème étape : Étalonnage du capteur
  • Étalonnage du capteur.
  • Modification du programme pour afficher la valeur de la pression plutôt que la tension.
3ème étape : Vérification de la loi de Mariotte

Matériel nécessaire

Capteur pression Carte Arduino Pressiomètre

Capteur de pression MPX4250AP

Fil de connexion Microcontrôleur (carte ArduinoTM) Seringue Pressiomètre (ex. Jeulin)

 


Proposition n°1 : Utilisation du logiciel Arduino IDE (avec affichage dans son moniteur série)

On utilise le logiciel Arduino IDE pour charger les programmes dans la carte et on observe les valeurs mesurées (tension, pression) dans le moniteur série du logiciel. Pour le tracé et la modélisation des courbes, on prendra un tableur (ex Excel).

Montage 1

Montage

Programme permettant la mesure, la conversion et l’affichage de la tension.

int val;                          // déclaration des variables de type
float tension;                    // int : entier et float : décimal
float pression;

void setup()
{
    Serial.begin(9600);            //fixe debit communication
}                                  // du port série

void loop()
{
    val = analogRead(A0);          //lecture A0 variant de 0 à 1023 
    tension = val*5/1023.0;         //convertit la plage 0-1023
                                  //en 0-5 vlots
        
    
    Serial.print("Tension = ");   //affichage de la tension
    Serial.print(tension);        // dans le moniteur série
    Serial.println(" Volts");
    
    delay(1000);                  //pause de 1000ms
}

Programme permettant la mesure, la conversion et l’affichage de la pression après étalonnage.

Il suffit d’ajouter la ligne issue de l’étalonnage et de modifier l’affichage.

pression = 498.6*tension + 116;    

Serial.print("Pression = ");   //affichage de la pression
Serial.print(pression);        // dans le moniteur série
Serial.println(" hPa");

Proposition n°2 : Utilisation du logiciel Arduino IDE (avec affichages un écran LCD externe)

On utilise le logiciel Arduino IDE pour charger les programmes dans la carte et on observe les valeurs mesurées (tension, pression) sur un afficheur externe. L’idée est de montrer que le système de mesures peut être autonome (pas besoin du PC pour afficher). Les librairies incluses dans le programme sont valables pour un afficheur couleur, elles peuvent être différentes pour un autre afficheur (voir doc technique). Pour le tracé et la modélisation des courbes, on prendra un tableur (ex Excel).

Montage 2 LCD

Montage

Programme permettant de mesurer la tension et de l’afficher sur un écran LCD

#include <Wire.h>                 //importation des librairies
#include <rgb_lcd.h>              //pour l'afficheur
rgb_lcd lcd;                      //creation de l'objet afficheur
int val;                          // déclaration des variables de type
float tension;                    // int : entier et float : décimal
float pression;

void setup()                    //exécuté 1 fois à la mise sous tension
{
    lcd.begin(16, 2);           //configure l'afficheur 16 lig 2 col
    lcd.setRGB(255, 255, 0);    //couleur de fond (R, G, B)
    lcd.print("Tension :");     //affichage 1ere ligne
}                             

void loop()                       //exécuté en boucle
{
    val = analogRead(A0);         //lecture A0 variant de 0 à 1023 
    tension = val*5/1023.0;       //convertit la plage 0-1023
                                  //en 0-5 vlots
        
    lcd.setCursor(0, 1);          //placement curseur debut 2eme ligne
    lcd.print(tension);           //affichage de la tension
    lcd.print(" Volts   ");
    
    delay(1000);                  //pause de 1000ms
}

Proposition n°3 : Utilisation du logiciel EduPython et affichage des résultats dans la console

Il est également possible de piloter la carte à microcontrôleur ArduinoTM en langage Python.

Dans cette version, tout se fait avec Python, pas besoin de tableur. On affiche les valeurs mesurées (tension, pression) dans la console et on utilise les librairies Matplotlib et Numpy pour tracer et modéliser les caractéristiques.

Programme permettant d’afficher la mesure de la tension dans la console d’EduPyhton

from microcontroleurs import arduino

#creation de la commuication avec la carte arduino
#le numero du port COM est à modifier
macarte = arduino("COM35")

#lecture de A0 variant de 0 à 1023
val = macarte.entree_analogique(0)

#convertit la plage 0-1023 en 0-5Volts
tension = val * 5 / 1023

#affichage de la tension dans la console
print("tension = ",tension," volts")

#arret de la communication avec la carte arduino
macarte.fermer()

Le tracé de la courbe et sa modélisation est réalisée de façon “classique” dans python

import matplotlib.pyplot as plt
import numpy as np

#deux listes vides pour mettre les mesures
#separees par des virgules
tension = []
pression = []

#donne l'equation de la caractéristique
modele=np.polyfit(tension,pression,1)
print("pression = ",modele[0]," x tension + ",modele[1])

# trace la courbe pression en fonction de la tension
plt.plot(tension,pression, marker="+")
plt.title("pression = f(tension)")
plt.xlabel("Tension (V)")
plt.ylabel("Pression (hPa)")
plt.show()

Programme permettant éventuellement d’automatiser les mesures et les calculs

from microcontroleurs import arduino
import matplotlib.pyplot as plt
import numpy as np

#creation de la commuication avec la carte arduino
#le numero du port COM est à modifier
macarte = arduino("COM35")

#crée deux listes vides pour mettre les mesures
volume = []
invP = []

#demande à l'utilisateur le nb de points de mesure
nb_points=int(input("Entrez le nombre de points de mesure :"))

#remplit les listes avec les valeurs
for i in range(nb_points):
    #ajoute le volume entre par l'utilisateur dans la liste
    volume.append(int(input("Entrez le volume en cm3 :")))
    #ajoute 1/P mesuree par le capteur à la liste
    tension=macarte.entree_analogique(0) * 5 / 1023
    invP.append(1/(498.6*tension + 116))

#arret de la communication avec la carte arduino
macarte.fermer()
print(volume)
print(invP)
#equation de la caractéristique
modele=np.polyfit(invP,volume,1)
print("volume = ",modele[0]," x 1/P + ",modele[1])

# trace la courbe pression en fonction de la tension
plt.plot(invP,volume, marker="+")
plt.title("volume = f(1/P)")
plt.xlabel("1/P (hPa-1)")
plt.ylabel("volume (cm3)")
plt.show()

Propositions d’activité expérimentale :

TP Loi Mariotte (version Arduino et affichage dans le moniteur série)
TP Loi de Mariotte (version Arduino et écran LCD)
TP Loi de Mariotte (version Python)