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 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).
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).
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) |