Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.4 kB
1
Indexable
Never
import numpy as np
import matplotlib.pyplot as plt

# Dados Físicos.    
rho = 1.29  
cr = 0.013
g = 9.81 
inc = 0 #Inclinação da estrada em percentagem
alpha = np.arctan(inc / 100) #inclinação em rad

#Dados do Veículo

m = 730 # massa do veículo em kg
af = 1.7995
cd = 0.33
p = 38 # potência do motor em hp
p_watts = p * 746 # potência do motor em watts


#Força de resistencia constante
F0 = m * g * (cr * np.cos(alpha) + np.sin(alpha))

#Constante de resistência
c = 0.5 * rho * af * cd



#Força máxima de tração das rodas
mu = 0.8 #coeficiente atrito
Fmax = mu * m * g * np.cos(alpha)


#força resultante no veículo

f = lambda v: (p_watts / v) - F0 - c*v**2



#Condições simulação

v0 = 1 #velocidade inicial
t0 = 0 #tempo inicial
tf = 60 #tempo final
dt = 0.01 #steps temporais

t = [t0]
v = [v0]
F = [f(v0)]

while t[-1] < tf:
    F_atual = f(v[-1])
    if F_atual > Fmax:
        F_atual = Fmax
    dv = F_atual/m*dt # variação da velocidade em cada iteração
    v.append(v[-1] + dv) # atualização da velocidade
    t.append(t[-1] + dt) # atualização do tempo
    F.append(F_atual) # atualização da força
    
v_kmh = [v_i*3.6 for v_i in v] # conversão para km/h



#Método Analítico

num_velocidades = 20

# função para calcular a velocidade usando equação analítica
def v_analitico(t, v0):
    return (p_watts / c * m)**0.5 * np.tanh((c * t + np.arctanh(v0 * (c * m / p_watts)**0.5)) * (p_watts / (m * c))**0.5)

# Cálculo da velocidade para diferentes valores de tempo
velocidades_analiticas = []
tempo = np.linspace(t0, tf, num=1000)
for i in range(num_velocidades):
    v_analitica = v_analitico(tempo, v0)
    velocidades_analiticas.append(v_analitica)
    v0 = v_analitica[-1] # atualiza a velocidade inicial para o próximo cálculo




#Gráfico da Velocidade x Tempo
plt.plot(t, [v_i*3.6 for v_i in v])
plt.title("Velocidade x Tempo")
plt.xlabel("Tempo (s)")
plt.ylabel("Velocidade (km/h)")
plt.show()

#Gráfico da Força x Tempo
plt.plot(t, F)
plt.title("Força x Tempo")
plt.xlabel("Tempo (s)")
plt.ylabel("Força (N)")
plt.show()

#Gráfico da Força x Velocidade
plt.plot([v_i*3.6 for v_i in v], F)
plt.title("Força x Velocidade")
plt.xlabel("Velocidade (km/h)")
plt.ylabel("Força (N)")

plt.show()