Loi de Mariotte - utilisation d’un dispositf à microcontrôleur
Dispositif
La seringue est branchée sur le capteur de pression, lui-même relié au port grove PIN0 de la carte microbit.
La carte est branchée sur un port USB de l’ordinateur.
L’écran LED de la carte microbit affichera la valeur de la tension sur PIN0.
Grâce à sa liaison série sur le port USB, le logiciel Mu affichera les données mesurées au cours de l’acquisition sous un format: [(volume1, tension1), (volume2, tension2), ...]
Editeur Mu
Lancer l’editeur Mu. Choisir au demarrage le mode BBC microbit.
Dans la fenêtre d’edition, coller le script suivant:
from microbit import *
datas = []
v = 70
while True:
if button_a.is_pressed():
display.clear()
lecture = pin0.read_analog()
v = v -10
display.scroll(lecture)
datas.append((v,lecture))
print(datas)
elif button_b.is_pressed():
datas = []
v = 70
display.scroll("RAZ")
else:
display.show(Image.SQUARE)
Questions: à partir de la lecture du script…
- A quoi servent les 2 premières lignes sous l'import de la librairie microbit:
datas = []
, etv = 70
?
- Que se passe t-il lorsque l’on appuie sur le bouton a de la carte microbit?
- Que se passe t-il lorsque l’on appuie sur le bouton b?
- Comment faudrait-il adapter le script pour réaliser une mesure de pression pour des volumes décroissants d’air, de 5mL en 5mL?
Téléversement du programme
Appuyer sur le bouton FLASHER pour téléverser le programme dans la carte microbit.
REPL
Pour afficher les sorties textuelles de la carte microbit (print()
), il faudra ouvrir l’interface avec le bouton REPL.
Pour démarrer le programme d’acquisition, appuyer sur le bouton de démarrage du programme au dos de la carte.
Lors de l’appui sur le bouton a, une nouvelle mesure est enregistrée. la liste des valeurs acquises est alors affichée dans la fenêtre du logiciel.
Lors de l’appui sur le bouton b, la liste est remise à zero (recommencer l’acquisition).
Mesurer
Enregistrer votre première valeur, pour un volume de 60mL:
- appuyer sur le bouton a.
Pour enregistrer votre 2e valeur:
- maintenir la pression pour un volume de 50mL
- appuyer sur le bouton a
Vous devriez voir à l’écran la liste [(volume1, tension1), (volume2, tension2)]
.
Verifier que les volumes enregsitrés correspondent bien aux positions du piston lors de l’acquisition, sinon recommencer (bouton b).
Copier les valeurs
A la fin de l’acquisition (volume de 30, ou 20 mL):
- Selectionner les valeurs directement dans la fenêtre du REPL.
- Clic droit: enregistrer
Traitement des données
Graphique volume - tension
Se rendre sur l’application en ligne : basthon.fr
Choisir Notebook
Ecrire dans la cellule du notebook datas =
et coller les valeurs mesurées.
A la suite, coller le script suivant:
import matplotlib.pyplot as plt
volume = []
tension = []
inv_volume = []
pression = []
for mesure in datas:
volume.append(mesure[0])
tension.append(mesure[1])
plt.xlabel("Volume mL")
plt.ylabel("Tension")
# Plot
plt.plot(volume,tension,'o') # nuage de points de l'acquisition
# affichage
plt.show()
Executer la cellule (Maj + Entrée) ou bonton triangle sur la barre de commande du logiciel.
Quelle est l’allure de la courbe tension = f(volume)?
Etude de l’evolution de la pression
Dans la boucle : for mesure in datas:
, ajouter les instructions qui permettront de completer la liste inv_volume
. On veut mettre dans cette liste inv_volume
les valeurs calculées à partir de $1 / volume$
Comme les valeurs du volume sont mises dans mersure[0]
cela donne dans le script python:
for mesure in datas:
volume.append(mesure[0])
tension.append(mesure[1])
inv_volume.append(1/mesure[0])
Tracer alors le graphique tension = f(
inv_volume
). Que constatez-vous?
Utiliser la fonction d’etalonnage
La tension du capteur correspond à une certaine valeur de pression.
- A l’aide d’un manomètre, mesurer la pression atmosphérique
Po
en hPa - Relever la valeur de tension donnée par le capteur à pression
Uo
La valeur de tension est exprimées en unités, un nombre compris entre 0 et 1023 (codage de la valeur en 10 bits).
Le coefficient de conversion tension-pression est donné à 8 hPa/unite
Pour une tension U mesurée lors de l’experience (exprimé en unités, la pression P correspondante est donnée par:
$$P = Po + 8\times(U-Uo)$$
Utilisez cette relation d’etalonnage pour créer une nouvelle liste pression
à partir de celle tension
. Par exemple, avec Po=1000hPa, et Uo=190 unités:
pression.append(1000 + 8 * (mesure[1] - 190))
Tracer alors le graphique pression = f(
inv_volume
). Que constatez-vous?
Mise en evidence la loi de Mariotte
La loi de Mariotte s’énonce ainsi:
$$P \times V = Constante$$
Cette loi est-elle en accord avec la courbe obtenue?
Prolongement: Modelisation
Adapter alors le script suivant pour obtenir la courbe modélisée $P = f(\tfrac{1}{V})$
Cellule python 1: équation de la courbe modélisée
from scipy import stats
import numpy as np
inv_volume_np = np.asarray(inv_volume)
pression_np = np.asarray(pression)
a, b, r_value, p_value, std_err = stats.linregress(inv_volume, pression)
a, b, r_value
Cellule python 2 créer une fonction de prédiction à partir du modèle
def H(x,a,b):
return a * x + b
Cellule python 3 graphique avec courbe modélisée
plt.clf()
plt.plot(inv_volume_np,pression_np,'o') # nuage de points de l'acquisition
plt.plot(inv_volume_np, H(inv_volume_np,a, b), c='r')
plt.show()