1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #Importation des modules utilisés
import serial
import numpy as np
import matplotlib.pyplot as plt
from math import exp
from scipy.optimize import curve_fit
#Définition de la fonction pour la modélisation
def fonction( x, a):
return ((exp(1)**(-1*a*x)))
#Ouverture de la liaison série
try :
arduino=serial.Serial("COM3", baudrate=115200, timeout=1)
except:
print("Vérifier le port série")
#Initialisation des variables
rawdata=[]
compt=0
#Réception et stockage des données
while compt<50:
rawdata.append(str(arduino.readline()))
compt+=1
#Fonction de nettoyage pour supprimer
def nettoie(L):
newL=[]
for i in range (len(L)):
temp=L[i][2:]
newL.append(temp[:-5])
return newL
cleandata=nettoie(rawdata)
print(cleandata)
#Ecriture des données dans un fichier texte
#Une ligne par donnée
def write(L):
file=open("data.txt", mode="w")
for i in range(len(L)):
file.write(L[i]+"\n")
file.close()
write(cleandata)
temps,tension=np.loadtxt("data.txt", delimiter=";",unpack=True)
#modele=np.polyfit(logtension,temps,1)
#print("logtension = ",modele[0]," x temps + ",modele[1])
#print("tau = ")
#Modélisation des données expérimentales
params, covar = curve_fit(fonction, temps, tension, p0 = 1e-3)
print(params, covar)
modele = []
for val in temps:
modele.append(fonction(val, params))
#Affichage des données expérimentales + modélisées
plt.plot(temps, tension, 'o', label="valeurs expérimentales")
plt.plot(temps, modele, label="modele".format(*params))
plt.legend()
plt.title("modélisation de lacharge d'un condensateur")
plt.xlabel('Temps (s)')
plt.ylabel('U(condensateur) (V)')
plt.show() |
Partager