API details.
Pid()
class ACSimulator:
def __init__(self, room_temp) -> None:
self.room_temp = room_temp
self._initial_room_temp = room_temp
def update(self, cool_power, dt):
if cool_power > 0:
self.room_temp -= 1 * cool_power * dt
else:
self.room_temp += 1 * cool_power * dt
self.room_temp += (self._initial_room_temp - self.room_temp) * 0.02 * dt
return self.room_temp
room_temp = 32
ac = ACSimulator(room_temp)
pid = Pid(5, 0.01, 0.1, set_point=room_temp)
start_time = time.time()
last_time = start_time
setpoint, y, x = [], [], []
pid
while time.time() - start_time < 10:
current_time = time.time()
dt = current_time - last_time
power = pid(room_temp)
room_temp = ac.update(power, dt)
x += [current_time - start_time]
y += [room_temp]
setpoint += [pid.set_point]
if current_time - start_time > 1:
pid.set_point = 23
last_time = current_time
import matplotlib.pyplot as plt
plt.plot(x, y, label='measured')
plt.plot(x, setpoint, label='target')
plt.xlabel('time')
plt.ylabel('temperature')
plt.legend()
plt.show()