Added proportional output funtionality by turning the oven (SSR) on for a portion of the time_step determined by the pid loop output. So, if time_step = 1, and the pid loop is calling for .3 heat, the SSR will be on for .3 seconds, and off for .7 seconds.  I did this by adding an additional sleep.  Previously, the SSR would be on whenever pid > 0.
pull/1/head
benkrasnow 2018-06-09 13:42:55 -07:00 zatwierdzone przez GitHub
rodzic 0f598a2469
commit 35eb7d3346
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
1 zmienionych plików z 11 dodań i 4 usunięć

Wyświetl plik

@ -101,6 +101,7 @@ class Oven (threading.Thread):
def run(self):
temperature_count = 0
last_temp = 0
pid = 0
while True:
self.door = self.get_door_state()
@ -133,7 +134,7 @@ class Oven (threading.Thread):
else:
temperature_count = 0
self.set_heat(pid > 0)
self.set_heat(pid)
#if self.profile.is_rising(self.runtime):
# self.set_cool(False)
@ -152,17 +153,23 @@ class Oven (threading.Thread):
#Capture the last temperature value
last_temp = self.temp_sensor.temperature
time.sleep(self.time_step)
if pid > 0:
time.sleep(self.time_step * (1 - pid))
else:
time.sleep(self.time_step)
def set_heat(self, value):
if value:
if value > 0:
self.heat = 1.0
if gpio_available:
if config.heater_invert:
GPIO.output(config.gpio_heat, GPIO.LOW)
time.sleep(self.time_step * value)
GPIO.output(config.gpio_heat, GPIO.HIGH)
else:
GPIO.output(config.gpio_heat, GPIO.HIGH)
time.sleep(self.time_step * value)
GPIO.output(config.gpio_heat, GPIO.LOW)
else:
self.heat = 0.0
if gpio_available: