kopia lustrzana https://github.com/jamesgao/kiln_controller
Update from actual testing
rodzic
8dd97524e9
commit
3cb20a019b
|
@ -1,6 +1,7 @@
|
||||||
import manager
|
import manager
|
||||||
import thermo
|
import thermo
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
start_time = None
|
start_time = None
|
||||||
|
@ -9,6 +10,8 @@ if __name__ == "__main__":
|
||||||
schedule = [[2*60*60, 176], [4*60*60, 620], [6*60*60, 1013], [6*60*60+20*60, 1013]]
|
schedule = [[2*60*60, 176], [4*60*60, 620], [6*60*60, 1013], [6*60*60+20*60, 1013]]
|
||||||
mon = thermo.Monitor()
|
mon = thermo.Monitor()
|
||||||
mon.start()
|
mon.start()
|
||||||
|
time.sleep(1)
|
||||||
#schedule = [[20, 176], [40, 620], [60, 1013]]
|
#schedule = [[20, 176], [40, 620], [60, 1013]]
|
||||||
kiln = manager.KilnController(schedule, mon, start_time=start_time, simulate=False)
|
kiln = manager.KilnController(schedule, mon, start_time=start_time, simulate=False)
|
||||||
kiln.run()
|
kiln.run()
|
||||||
|
mon.stop()
|
||||||
|
|
|
@ -17,7 +17,7 @@ class KilnController(object):
|
||||||
if simulate:
|
if simulate:
|
||||||
self.schedule.insert(0, [0, 15])
|
self.schedule.insert(0, [0, 15])
|
||||||
else:
|
else:
|
||||||
self.schedule.insert(0, [0, self.monitor.temperature])
|
self.schedule.insert(0, [0, 15])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def elapsed(self):
|
def elapsed(self):
|
||||||
|
@ -34,13 +34,12 @@ class KilnController(object):
|
||||||
#find epoch
|
#find epoch
|
||||||
for i in range(len(self.schedule)-1):
|
for i in range(len(self.schedule)-1):
|
||||||
if self.schedule[i][0] < ts < self.schedule[i+1][0]:
|
if self.schedule[i][0] < ts < self.schedule[i+1][0]:
|
||||||
print "In epoch %d"%i
|
|
||||||
time0, temp0 = self.schedule[i]
|
time0, temp0 = self.schedule[i]
|
||||||
time1, temp1 = self.schedule[i+1]
|
time1, temp1 = self.schedule[i+1]
|
||||||
frac = (ts - time0) / (time1 - time0)
|
frac = (ts - time0) / (time1 - time0)
|
||||||
setpoint = frac * (temp1 - temp0) + temp0
|
setpoint = frac * (temp1 - temp0) + temp0
|
||||||
self.pid.setPoint(setpoint)
|
self.pid.setPoint(setpoint)
|
||||||
|
print "In epoch %d, elapsed time %f, temperature %f"%(i, ts, setpoint)
|
||||||
if self.simulate:
|
if self.simulate:
|
||||||
temp = setpoint + random.gauss(-20, 15)
|
temp = setpoint + random.gauss(-20, 15)
|
||||||
else:
|
else:
|
||||||
|
@ -49,7 +48,7 @@ class KilnController(object):
|
||||||
pid_out = self.pid.update(temp)
|
pid_out = self.pid.update(temp)
|
||||||
if pid_out < 0: pid_out = 0
|
if pid_out < 0: pid_out = 0
|
||||||
if pid_out > 1: pid_out = 1
|
if pid_out > 1: pid_out = 1
|
||||||
self.regulator.set(pid_out)
|
self.regulator.set(pid_out, block=True)
|
||||||
|
|
||||||
time.sleep(self.interval - (time.time()-now))
|
time.sleep(self.interval - (time.time()-now))
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -16,7 +16,7 @@ class Stepper(threading.Thread):
|
||||||
[0,0,1,1],
|
[0,0,1,1],
|
||||||
[1,0,0,1]]
|
[1,0,0,1]]
|
||||||
|
|
||||||
def __init__(self, pin1=5, pin2=6, pin3=13, pin4=19, timeout=5):
|
def __init__(self, pin1=5, pin2=6, pin3=13, pin4=19, timeout=1):
|
||||||
self.queue = Queue.Queue()
|
self.queue = Queue.Queue()
|
||||||
self.finished = threading.Event()
|
self.finished = threading.Event()
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ class StepperSim(object):
|
||||||
|
|
||||||
|
|
||||||
class Regulator(object):
|
class Regulator(object):
|
||||||
def __init__(self, maxsteps=4500, minsteps=2400, speed=150, ignite_pin=None, simulate=False):
|
def __init__(self, maxsteps=4500, minsteps=2480, speed=150, ignite_pin=None, simulate=False):
|
||||||
"""Set up a stepper-controlled regulator. Implement some safety measures
|
"""Set up a stepper-controlled regulator. Implement some safety measures
|
||||||
to make sure everything gets shut off at the end
|
to make sure everything gets shut off at the end
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ class Regulator(object):
|
||||||
time.sleep(delay)
|
time.sleep(delay)
|
||||||
if self.ignite_pin is not None:
|
if self.ignite_pin is not None:
|
||||||
GPIO.output(self.ignite_pin, False)
|
GPIO.output(self.ignite_pin, False)
|
||||||
self.stepper.step(self.min - start, self.speed)
|
self.stepper.step(self.min - start, self.speed, block=True)
|
||||||
self.current = self.min
|
self.current = self.min
|
||||||
print "Done!"
|
print "Done!"
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue