[Stirrer]

- put things into base class

git-svn-id: http://moon:8086/svn/projects/HendiControl@135 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-03-25 20:57:43 +00:00
parent 3531db6a7e
commit 190c2f6a23
3 changed files with 107 additions and 106 deletions
+34 -12
View File
@@ -3,36 +3,58 @@ import abc
class AStirrer(abc.ABC):
def __init__(self):
pass
def __init__(self, dt):
self.dt = dt
self.speed = 0
self.cycleTime = 1
self.dutyCycle = 1
self.cycleCounter = 0
self.isOn = 0
def log(self, s):
print("{:.2f}: {}".format(time.time(), s))
@abc.abstractmethod
def process(self):
pass
isOn = self.isOn
self.cycleCounter += self.dt
if self.cycleCounter >= self.cycleTime:
self.cycleCounter -= self.cycleTime
isOn = 0
if self.cycleCounter >= (self.cycleTime * (1-self.dutyCycle)):
if not isOn:
isOn = 1
if self.isOn != isOn:
if isOn:
self.onSetSpeed(self.speed)
else:
self.onSetSpeed(0)
self.isOn = isOn
@abc.abstractmethod
def setSpeed(self, speed):
pass
self.speed = speed
if self.isOn:
self.onSetSpeed(speed)
self.log ("Stirrer: Set speed to {} %".format(speed))
@abc.abstractmethod
def setCycleTime(self, time):
pass
self.cycleTime = time
self.log ("Stirrer: Set cycle time to {} s".format(time))
@abc.abstractmethod
def setDutyCycle(self, dutyCycle):
pass
self.dutyCycle = dutyCycle
self.log ("Stirrer: Set duty cycle to {} %".format(100*dutyCycle))
@abc.abstractmethod
def getSpeed(self):
return None
@abc.abstractmethod
def start(self):
def activate(self):
pass
@abc.abstractmethod
def stop(self):
def deactivate(self):
pass
+32 -56
View File
@@ -3,13 +3,8 @@ import serial
import time
class Pololu1376(AStirrer):
def __init__(self, params, com_port='/dev/ttyUSB0', com_baud=9600):
self.params = params
self.speed = 0
self.cycleTime = 1
self.dutyCycle = 1
self.cycleCounter = 0
self.isOn = 0
def __init__(self, dt, com_port='/dev/ttyUSB0', com_baud=9600):
super(Pololu1376, self).__init__(dt)
self.isMasterOn = 0
self.ser = serial.Serial(com_port, com_baud)
@@ -31,68 +26,49 @@ class Pololu1376(AStirrer):
s = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '')
return s
def process(self):
dt = self.params["dt"]
self.cycleCounter -= dt
if self.cycleCounter <= 0:
self.cycleCounter = self.cycleTime
if self.cycleCounter <= (self.cycleTime * self.dutyCycle):
if not self.isOn:
self.__setMotorSpeed(self.speed)
self.log ("Stirrer: On")
self.isOn = 1
else:
if self.isOn:
self.__setMotorSpeed(0)
self.log ("Stirrer: Off")
self.isOn = 0
def setSpeed(self, speed):
self.log ("Stirrer: Set speed to {} %".format(speed))
self.speed = speed
if self.isOn:
self.__setMotorSpeed(speed)
def setCycleTime(self, time):
self.log ("Stirrer: Set cycle time to {} s".format(time))
self.cycleTime = time
def setDutyCycle(self, dutyCycle):
self.log ("Stirrer: Set duty cycle to {} %".format(100*dutyCycle))
self.dutyCycle = dutyCycle
def getSpeed(self):
if self.isOn and self.isMasterOn:
return self.speed
return 0
def start(self):
def activate(self):
self.isMasterOn = 1
self.log("Stirrer: switched On")
self.ser_send("go")
self.log("Stirrer: switched On")
def stop(self):
def deactivate(self):
self.isMasterOn = 0
self.log("Stirrer: switched Off")
self.ser_send("x")
self.log("Stirrer: switched Off")
def __setMotorSpeed(self, speed):
def onSetSpeed(self, speed):
self.ser_send("F" + str(speed) + "%")
if __name__ == '__main__':
s = Pololu1376(None, "/dev/ttyACM0", "115200")
s.start()
s.setSpeed(1000)
time.sleep(2)
s.setSpeed(2000)
time.sleep(2)
s.setSpeed(3000)
time.sleep(2)
s.setSpeed(2000)
time.sleep(2)
s.setSpeed(1000)
time.sleep(2)
s.stop()
s.activate()
print ("Set some speeds")
s.setSpeed(50)
time.sleep(2)
s.setSpeed(100)
time.sleep(2)
s.setSpeed(50)
time.sleep(2)
print ("Pulsed operation, duty cycle = 50%")
s.setDutyCycle(0.5)
s.setCycleTime(10)
for i in range(1,30):
s.process()
time.sleep(1)
print ("Pulsed operation, duty cycle = 20%")
s.setDutyCycle(0.2)
s.setCycleTime(10)
for i in range(1,30):
s.process()
time.sleep(1)
s.deactivate()
+41 -38
View File
@@ -1,52 +1,55 @@
from astirrer import AStirrer
import time
class Stirrer(AStirrer):
def __init__(self, params):
self.params = params
self.speed = 0
self.cycleTime = 1
self.dutyCycle = 1
self.cycleCounter = 0
self.isOn = 0
def __init__(self, dt):
super(Stirrer, self).__init__(dt)
self.isMasterOn = 0
def process(self):
dt = self.params["dt"]
def __del__(self):
self.deactivate()
self.cycleCounter -= dt
if self.cycleCounter <= 0:
self.cycleCounter = self.cycleTime
def activate(self):
self.isMasterOn = 1
self.log("Stirrer: switched On")
if self.cycleCounter <= (self.cycleTime * self.dutyCycle):
if not self.isOn:
self.log ("Stirrer: On")
self.isOn = 1
else:
if self.isOn:
self.log ("Stirrer: Off")
self.isOn = 0
def setSpeed(self, speed):
self.log ("Stirrer: Set speed to {} %".format(speed))
self.speed = speed
def setCycleTime(self, time):
self.log ("Stirrer: Set cycle time to {} s".format(time))
self.cycleTime = time
def setDutyCycle(self, dutyCycle):
self.log ("Stirrer: Set duty cycle to {} %".format(100*dutyCycle))
self.dutyCycle = dutyCycle
def deactivate(self):
self.isMasterOn = 0
self.log("Stirrer: switched Off")
def getSpeed(self):
if self.isOn and self.isMasterOn:
return self.speed
return 0
def start(self):
self.isMasterOn = 1
self.log("Stirrer: switched On")
def onSetSpeed(self, speed):
self.log("Stirrer: Set speed to {} %".format(speed))
def stop(self):
self.isMasterOn = 0
self.log("Stirrer: switched Off")
if __name__ == '__main__':
s = Stirrer(1.0)
s.activate()
print ("Set some speeds")
s.setSpeed(50)
time.sleep(2)
s.setSpeed(100)
time.sleep(2)
s.setSpeed(50)
time.sleep(2)
print ("Pulsed operation, duty cycle = 50%")
s.setDutyCycle(0.5)
s.setCycleTime(10)
for i in range(1,30):
s.process()
time.sleep(1)
print ("Pulsed operation, duty cycle = 20%")
s.setDutyCycle(0.2)
s.setCycleTime(10)
for i in range(1,30):
s.process()
time.sleep(1)
s.deactivate()