Files
we_collect/luftwiderstand.py
2025-12-18 11:23:24 +01:00

138 lines
4.0 KiB
Python

from matplotlib import pyplot as plot
import numpy as np
temperatures = []
# Standard-Atmosphärendruck [Pa]
g_p0 = 101325
# spezifischen Gaskonstante R_S = R/M = 287,058 J/(kg*K) für trockene Luft
g_RS = 287.54
# CW-Wert und Stirnfläche
car_list = {
'VW id.3' : {'cw': 0.267, 'area': 2.36},
'Tesla Model Y LR AWD': {'cw': 0.23, 'area': 2.518},
'Tesla Model 3 LR AWD': {'cw': 0.23, 'area': 2.220},
'Polestar 2': {'cw': 0.278, 'area': 2.480},
'Renault Zoe': {'cw': 0.33, 'area': 2.27},
'Hyundai Kona Elektro': {'cw': 0.29, 'area': 2.37},
'Hyundai Ioniq': {'cw': 0.24, 'area': 2.22}
}
temp_list = [-20, -10, 0, 10, 20, 30]
vel_list = [20, 40, 60, 80, 100, 120, 130, 140, 160]
# rho: [kg/m3]
def rho(temperature_degc: float, p_pa: float =g_p0):
return p_pa/(g_RS*(temperature_degc + 273.15))
# Force : N = kg·m·s2
def fd(rho: float, velocity_kmh: float, c_val: float, area: float):
vel = velocity_kmh / 3.6
cwa = c_val * area
res = 0.5*rho*vel*vel*cwa
return res
def plot_1(car_ref, t_ref=20, v_ref=100):
fd_reference_100 = fd(rho(t_ref), v_ref, car_ref['cw'], car_ref['area'])
temps_list_leg = [f"{t}°C" for t in temp_list]
plot.figure()
for temp_degc in temp_list:
rho_t = rho(temp_degc)
y_fd = []
for vel_kmh in vel_list:
fd_t = (fd(rho_t, vel_kmh, car_ref['cw'], car_ref['area'])/fd_reference_100 - 1) * 100
y_fd.append(fd_t)
plot.plot(vel_list, y_fd)
plot.title(f"Luftwiderstand vs Geschwindigkeit, T={t_ref}°C, v={v_ref}km/h")
plot.ylabel("Luftwiderstand [%]")
plot.xlabel("Geschwindigkeit [km/h]")
plot.legend(temps_list_leg)
plot.grid()
def plot_2(car_ref, t_ref=20, v_ref=100):
''' Fd vs. velocity, param: car '''
# [kmh]
car_list_leg = [f"{t}" for t in car_list.keys()]
rho_t = rho(t_ref)
reference = fd(rho_t, v_ref, car_ref['cw'], car_ref['area'])
plot.figure()
for key in car_list:
car = car_list[key]
y_fd = []
for vel_kmh in vel_list:
fd_t = (fd(rho_t, vel_kmh, car['cw'], car['area'])/reference - 1) * 100
y_fd.append(fd_t)
plot.plot(vel_list, y_fd)
plot.ylabel("Luftwiderstand ID.3 [%]")
plot.xlabel("Geschwindigkeit [km/h]")
plot.title(f"Luftwiderstand vs Geschwindigkeit, T={t_ref}°C, v={v_ref}km/h")
plot.legend(car_list_leg)
plot.grid()
def plot_3(y_fd, y_pwr, t_ref=20):
car_list_leg = [f"{t}" for t in car_list.keys()]
fig, ax1 = plot.subplots()
ax1.plot(vel_list, y_fd)
ax1.set_ylabel("Luftwiderstand [N]")
ax1.set_xlabel("Geschwindigkeit [km/h]")
ax1.set_title(f"Luftwiderstand vs Geschwindigkeit, T={t_ref}°C")
ax1.legend(car_list_leg)
ax2 = ax1.twinx()
ax2.set_ylabel("Antriebsleistung [kW]", color='tab:red')
ax2.plot(vel_list, y_pwr, color='tab:red')
ax2.tick_params(axis='y', labelcolor='tab:red')
ax1.grid()
def plot_4(y_fd, y_energy, temp=20):
car_list_leg = [f"{t}" for t in car_list.keys()]
fig, ax1 = plot.subplots()
ax1.plot(vel_list, y_fd)
ax1.set_ylabel("Luftwiderstand [N]")
ax1.set_xlabel("Geschwindigkeit [km/h]")
ax1.set_title(f"Luftwiderstand vs Geschwindigkeit, Temperature {temp}°C")
ax1.legend(car_list_leg)
ax2 = ax1.twinx()
ax2.set_ylabel("Antriebsenergie [kWh/100km]", color='tab:red')
ax2.plot(vel_list, y_energy, color='tab:red')
ax2.tick_params(axis='y', labelcolor='tab:red')
ax1.grid()
plot.show()
def main() -> None:
car = car_list['VW id.3']
# Fd vs. velocity, param: temperature
temp_ref = 20
# Luftwiderstand [%] vs. Geschwindigkeit [kmh], Param: Temperatur
plot_1(car)
# Luftwiderstand [%] vs. Geschwindigkeit [kmh] at 20°C, Param: Car Model
plot_2(car, temp_ref)
y_fd = []
y_pwr = []
y_energy = []
for vel_kmh in vel_list:
fd_t = fd(rho(temp_ref), vel_kmh, car['cw'], car['area'])
y_fd.append(fd_t)
y_pwr.append(fd_t*vel_kmh/1000/3.6)
y_energy.append(fd_t*vel_kmh/1000/3.6*100/vel_kmh)
# Luftwiderstand [N] / Antriebsleistung [kW] vs. Geschwindigkeit [kmh], Param: Temp
plot_3(y_fd, y_pwr, temp_ref)
# Luftwiderstand [N] / Antriebsenergie [kWh/100km] vs. Geschwindigkeit [kmh], Param: Temp
plot_4(y_fd, y_energy, temp_ref)
if __name__ == '__main__':
main()