# -*- coding: utf-8 -*- ''' Tristan Varrin, 1A, B3a Mars 2024 Modélisation Kart course 1, APP : E3 fun cup ''' # Importation des librairies import numpy as np import matplotlib.pyplot as plt # Récupération des caractéristiques des moteurs M = np.loadtxt('Moteurs.txt') Mots = {} Mots['Intitulés'] = ['V','Inom','Pnom','Cnom','Regen','Vitesse (tr/min)','Poids'] Mots['ME0708'] = M[0] Mots['ME0709'] = M[1] Mots['ME0909'] = M[2] Mots['ME1003'] = M[3] Mots['ME1004'] = M[4] Mots['ME1007'] = M[5] Mots['ME1008'] = M[6] Mots['PMG132'] = M[7] # Valeurs constantes g = 9.81 #m/s2 Mch = 50 #kg - Poids Chassis Mpilote = 60 #kg - Poids Pilote induct_mot = 20 #mH - Induction moteur R = 0.15 #m - Rayon Roues V_1bat = 6 #V - Tension 1 batterie E_1bat = 5 #Ah - Energie 1 batterie M_1bat = 0.78 #kg - Poids 1 batterie f = 1 # - Coefficient de frottement roue/sol fair = 0.1814 # - Coeff frottements air #fpoids = 0.14 # - Coeff frottements poids k=2.52 Dist = 1000 #m - Distance totale à parcourir dt = 0.1 #s - pas de temps # Enregistrement des résultats X=np.array([0]) V=np.array([0]) # A choisir Nbr_Série = 8 Nbr_Para = 5 Moteur = 'ME0708' #r = 0.5 #Valeurs changeantes M_Bat = M_1bat * Nbr_Para * Nbr_Série V_Bat = V_1bat * Nbr_Série E_Bat = E_1bat * Nbr_Para V_nom=Mots[Moteur][0] I_nom=Mots[Moteur][1] P_nom=Mots[Moteur][2] C_nom=Mots[Moteur][3] Regen=Mots[Moteur][4] Vit_max=Mots[Moteur][5] * 2 * np.pi / 60 Mmot = Mots[Moteur][6] #print("vmax =", Vit_max*R*r*3.6) #print('cmax =', C_nom/r) masse = M_Bat + Mch + Mpilote + Mmot # Définition de la fonction d'accélération def acceleration(v,r): return (C_nom / (masse * r * R)) - (fair / masse) * v**2 - (k * v) / masse #(fpoids / masse) * masse*g # Résolution numérique avec la méthode d'Euler def vitesse(v0, pastps, temps,r): niter = int(temps / pastps) T = np.linspace(0, temps, niter) vit = np.zeros_like(T) vit[0] = v0 for i in range(1, niter): a = vit[i-1] + acceleration(vit[i-1],r) * pastps if a > Vit_max * r * R : vit[i] = Vit_max * r * R else : vit[i] = a return T, vit # Paramètres de simulation v0 = 0 # Vitesse initiale du kart (m/s) pastps = 0.01 # Intervalle de temps entre chaque pas de simulation (s) temps = 100 # Temps total de simulation (s), juste une valeur arbitrairement grande pour s'assurer qu'on couvre une distance de 1000m # Etude de r nbr = 101 rapp = np.linspace(0, 1, nbr) Distances = np.zeros(nbr) Temps = np.zeros(nbr) for k in range(nbr): r = int(100*rapp[k])/100 T, vit = vitesse(v0, pastps, temps,r) distance_parcourue = np.trapz(vit, T) index_1000m = np.argmax(np.cumsum(vit * pastps) >= Dist) temps_1000m = T[index_1000m] print("Alpha = ", r,", Temps pour parcourir 1000m:", temps_1000m, "s") Distances[k] = distance_parcourue Temps[k] = temps_1000m plt.plot(rapp,Distances) Results = np.array([rapp, Distances, Temps])