Présentation de l'activité et objectif
On suppose qu'on dispose d'un fichier au format csv contenant les positions d'un objet au cours du temps.
On souhaite écrire un programme permettant :
d'ouvrir ce fichier de pointage ;
de créer les grandeurs nécessaires au calcul de l'énergie cinétique, de l'énergie potentielle de pesanteur et de l'énergie mécanique ;
de calculer les valeurs de ces énergies au cours du mouvement ;
de tracer la représentation graphique de leurs variations au cours du temps.
On ne revient pas ici sur l'obtention du fichier de pointage au format csv, la méthode est identique à celle vue lors de l'étude des variations de la vitesse.
Attention : Disposer d'un environnement de programmation Python
Pour réaliser cette activité il vous faut un environnement de programmation Python :
soit installé par vos soins du type Anaconda qui offre un environnement très complet quoiqu'un peu lourd ;
soit en récupérant un environnement autonome : Thonny Python (version Windows) qu'il suffit d'extraire et qui se lance en exécutant le fichier Thonny.exe dans le dossier une fois décompressé.
Ces environnements présentent l'avantage d'offrir un éditeur, une console et un explorateur de variables au sein de la même fenêtre.
Construction du programme Python⚓
Rappel : Expressions utiles au calcul des énergies
Expressions des énergies
On rappelle la définition du vecteur vitesse et les éléments nécessaires à la détermination de la valeur de la vitesse :
avec
d'où la valeur de la vitesse :
Programme à compléter
Question⚓
On donne ci-dessous le programme commenté à compléter pour obtenir le tracé des vecteurs vitesse et variation de vitesse.
Vous pourrez en faire un copier-coller dans votre éditeur Python en activant d'abord l'affichage en texte brut :
Le programme complété doit permettre :
d'obtenir les valeurs de l'énergie cinétique Ec, potentielle de pesanteur Ep et mécanique EM à tout instant ;
la représentation graphique des variations de chaque énergie au cours du temps.
Rappel sur le traitement des listes et la syntaxe Python :
len(nom_liste) renvoie le nombre de termes d'une liste ;
le premier terme d'une liste a pour indice 0 et le dernier len(liste)-1 ;
en Python, la syntaxe de la puissance est le double astérisque ** : \(b^2\) s'écrit dans un programme b**2.
Questions :
Dans une boucle for, range(50) permet de faire varier l'indice de 0 à 49 : la valeur 50 n'est pas atteinte.
Pourquoi choisit-on range(1, len(t) - 1) aux lignes 47 et 48 du programme ?
Compléter le programme (lignes 47 à 49) de façon à obtenir les coordonnées du vecteur vitesse au point n°i (listes vx et vy) et la valeur de la vitesse (liste v).
Compléter les lignes 55 à 57 de façon à calculer les énergies Ep, Ec et Em.
Une fois votre programme complété, testez-le avec le fichier csv modèle à télécharger et en considérant un objet de masse \(m=150\ \mathrm g\) : Mouvement parabolique modélisé.
# Ce programme permet d'obtenir les variations des énergies potentielle, cinétique
# et mécanique au cours du temps à partir d'un fichier csv contenant les positions
# x et y au cours du temps (obtenu par un pointage sur une vidéo)
# Les zones marquées À COMPLÉTER attendent que vous entriez les valeurs ou expressions correctes.
from tkinter.filedialog import askopenfilename
import matplotlib.pyplot as plt
# Ouverture du fichier de mesure en mode interactif - NE PAS MODIFIER LES LIGNES 10 À 35
name = askopenfilename(filetypes =(("Fichier CSV", "*.csv"),("Fichier Texte","*.txt"),("Tous les fichiers","*.*")),title = "Choisir un fichier")
sep = ";" # caractère séparateur du csv -peut être une virgule, un point-virgule ou une tabulation noté \t
entete = 1 # nombre de lignes d'entete (lignes qui ne sont pas des données)
f = open(name,"r")
data = f.readlines() #on lit toutes les lignes et on met ça dans une liste -un élément par ligne-
f.close() #on referme le fichier
data = data[ entete : ] # on supprime les lignes d'en-tête qui ne nous intéressent pas
# on construit les listes de valeurs utiles
t = []
x = []
y = []
for ligne in data:
ligne = ligne.replace("," , ".") #change les virgules en point => format numérique différent sur excel et sur python
ligne = ligne.strip().split(sep) #on sépare les différents élément en utilisant le caractère séparateur défini
ligne = list(map(float,ligne)) #on converti chaque élément en flottant
#on rentre les valeurs dans les lites adaptées
t.append(ligne[0])
x.append(ligne[1])
y.append(ligne[2])
# FIN D'IMPORTATION DES DONNÉES DE POSITION
m = float(input("Entrez la masse de l'objet en kg : ")) # Saisie au clavier de la masse de la balle
g = 9.8 # intensité de la pesanteur
dt = t[1] - t[0] # Calcul de l'intervalle de temps entre deux pointages
"""Calcul des coordonnées des vecteurs vitesse
Compléter les zones indiquées en adaptant en Python les relatins données dons
la description de l'activité"""
vx = [À COMPLÉTER for i in range(1, len(t)-1)] # la vitesse n'est pas calculable à la première et à la dernière position
vy = [À COMPLÉTER for i in range(1, len(t)-1)] # même remarque
v = [À COMPLÉTER for i in range(len(vx))]
"""Calcul des énergies
Compléter les zones indiquées en adaptant en Python les relatiosn données dans
la description de l'activité"""
Ep = [À COMPLÉTER for val in y[1:-1:]] # y[1:-1:] : on ne calcule pas pour la première et la dernière position
Ec = [À COMPLÉTER for val in v]
Em = [À COMPLÉTER for i in range(len(Ep))]
# Calcul des coordonnées des vecteurs variation de vitesse
"""Les listes en abscisses et ordonnées doivent avoir les mêmes dimensions :
on supprime la première et la dernière date de la liste t"""
plt.close()
plt.plot(t[1:-1:], Ep, "b+", label = "Énergie potentielle")
plt.plot(t[1:-1:], Ec, "r+", label = "Énergie cinétique")
plt.plot(t[1:-1:], Em, "g+", label = "Énergie mécanique")
plt.title("Évolution des énergies au cours du temps")
plt.xlabel("t (s)")
plt.ylabel("Énergies en J")
plt.grid()
plt.legend()
plt.show()
Solution⚓
Le calcul de la valeur de la vitesse au point n°i fait appel aux points suivant (i+i) et précédent (i-1). On ne peut donc pas déterminer la vitesse pour les premier et dernier pointages.
Voir programme complété ci-dessous.
Voir programme complété ci-dessous.
# Ce programme permet d'obtenir les variations des énergies potentielle, cinétique
# et mécanique au cours du temps à partir d'un fichier csv contenant les positions
# x et y au cours du temps (obtenu par un pointage sur une vidéo)
# Les zones marquées À COMPLÉTER attendent que vous entriez les valeurs ou expressions correctes.
# IMPORTATION DES BIBLIOTHÈQUES NÉCESSAIRES
from tkinter.filedialog import askopenfilename
import matplotlib.pyplot as plt
#on peut donner le chemin d'accès vers le fichier ou la fonction askopenfilename
name = askopenfilename(filetypes =(("Fichier CSV", "*.csv"),("Fichier Texte","*.txt"),("Tous les fichiers","*.*")),title = "Choisir un fichier")
sep = ";" #caractère séparateur du csv -peut être une virgule, un point-virgule ou une tabulation noté \t
entete = 1 #nombre de lignes d'entete
f = open(name,"r")
data = f.readlines() #on lit toutes les lignes et on met ça dans une liste -un élément par ligne-
f.close() #on referme le fichier
data = data[ entete : ] #on supprime les lignes d'en-tête qui ne nous intéressent pas
#on construit les listes de valeurs utiles
t = []
x = []
y = []
for ligne in data:
ligne = ligne.replace("," , ".") #change les virgules en point => format numérique différent sur excel et sur python
ligne = ligne.strip().split(sep) #on sépare les différents élément en utilisant le caractère séparateur défini
ligne = list(map(float,ligne)) #on converti chaque élément en flottant
#on rentre les valeurs dans les lites adaptées
t.append(ligne[0])
x.append(ligne[1])
y.append(ligne[2])
m = float(input("Entrez la masse de l'objet en kg : ")) # Saisie au clavier de la masse de la balle
g = 9.8 # intensité de la pesanteur
dt = t[1] - t[0] # Détermination de l'intervalle de temps entre deux pointages
# Calcul des coordonnées des vecteurs vitesse
vx = [(x[i+1] - x[i-1]) / (2 * dt) for i in range(1, len(t)-1)] # la vitesse n'est pas calculable à la première et à la dernière position
vy = [(y[i+1] - y[i-1]) / (2 * dt) for i in range(1, len(t)-1)] # même remarque
v = [(vx[i]**2 + vy[i]**2)**0.5 for i in range(len(vx))]
# Calcul des énergies
Ep = [m * g * val for val in y[1:-1:]]
Ec = [0.5 * m * val**2 for val in v]
Em = [Ep[i] + Ec[i] for i in range(len(Ep))]
# Calcul des coordonnées des vecteurs variation de vitesse
"""Les listes en abscisses et ordonnées doivent avoir le même nombre de termes :
on supprime le premier et le dernier terme de cette liste"""
plt.close()
plt.plot(t[1:-1:], Ep, "b+", label = "Énergie potentielle")
plt.plot(t[1:-1:], Ec, "r+", label = "Énergie cinétique")
plt.plot(t[1:-1:], Em, "g+", label = "Énergie mécanique")
plt.title("Évolution des énergies au cours du temps")
plt.xlabel("t (s)")
plt.ylabel("Énergies en J")
plt.grid()
plt.legend()
plt.show()
Étude énergétique d'autres mouvements⚓
Exploitez votre programme Python avec les vidéos proposées dans cette partie.
Vous pouvez télécharger les fichiers de pointage proposés ou réaliser vos propres mesures avec Pymecavidéo en suivant la méthode rappelée ci-dessous.
Questionnement sur la conservation de l'énergie mécanique
Question⚓
À l'aide de votre programme en Python et après avoir effectué les pointages des positions ou récupéré les fichiers csv correspondants, tracez les représentations graphiques des variations des énergies potentielle, cinétique et mécanique au cours du temps.
L'énergie mécanique se conserve-t-elle lors de ces mouvements ? Distinguer les phases où la conservation semble assurée et proposer des explications physiques à sa non conservation.