[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:
+34
-12
@@ -3,36 +3,58 @@ import abc
|
|||||||
|
|
||||||
|
|
||||||
class AStirrer(abc.ABC):
|
class AStirrer(abc.ABC):
|
||||||
def __init__(self):
|
def __init__(self, dt):
|
||||||
pass
|
self.dt = dt
|
||||||
|
self.speed = 0
|
||||||
|
self.cycleTime = 1
|
||||||
|
self.dutyCycle = 1
|
||||||
|
self.cycleCounter = 0
|
||||||
|
self.isOn = 0
|
||||||
|
|
||||||
def log(self, s):
|
def log(self, s):
|
||||||
print("{:.2f}: {}".format(time.time(), s))
|
print("{:.2f}: {}".format(time.time(), s))
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def process(self):
|
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):
|
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):
|
def setCycleTime(self, time):
|
||||||
pass
|
self.cycleTime = time
|
||||||
|
self.log ("Stirrer: Set cycle time to {} s".format(time))
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setDutyCycle(self, dutyCycle):
|
def setDutyCycle(self, dutyCycle):
|
||||||
pass
|
self.dutyCycle = dutyCycle
|
||||||
|
self.log ("Stirrer: Set duty cycle to {} %".format(100*dutyCycle))
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def getSpeed(self):
|
def getSpeed(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def start(self):
|
def activate(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def stop(self):
|
def deactivate(self):
|
||||||
pass
|
pass
|
||||||
@@ -3,13 +3,8 @@ import serial
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
class Pololu1376(AStirrer):
|
class Pololu1376(AStirrer):
|
||||||
def __init__(self, params, com_port='/dev/ttyUSB0', com_baud=9600):
|
def __init__(self, dt, com_port='/dev/ttyUSB0', com_baud=9600):
|
||||||
self.params = params
|
super(Pololu1376, self).__init__(dt)
|
||||||
self.speed = 0
|
|
||||||
self.cycleTime = 1
|
|
||||||
self.dutyCycle = 1
|
|
||||||
self.cycleCounter = 0
|
|
||||||
self.isOn = 0
|
|
||||||
self.isMasterOn = 0
|
self.isMasterOn = 0
|
||||||
|
|
||||||
self.ser = serial.Serial(com_port, com_baud)
|
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", '')
|
s = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '')
|
||||||
return s
|
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):
|
def getSpeed(self):
|
||||||
if self.isOn and self.isMasterOn:
|
if self.isOn and self.isMasterOn:
|
||||||
return self.speed
|
return self.speed
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def start(self):
|
def activate(self):
|
||||||
self.isMasterOn = 1
|
self.isMasterOn = 1
|
||||||
self.log("Stirrer: switched On")
|
|
||||||
self.ser_send("go")
|
self.ser_send("go")
|
||||||
|
self.log("Stirrer: switched On")
|
||||||
|
|
||||||
def stop(self):
|
def deactivate(self):
|
||||||
self.isMasterOn = 0
|
self.isMasterOn = 0
|
||||||
self.log("Stirrer: switched Off")
|
|
||||||
self.ser_send("x")
|
self.ser_send("x")
|
||||||
|
self.log("Stirrer: switched Off")
|
||||||
|
|
||||||
def __setMotorSpeed(self, speed):
|
def onSetSpeed(self, speed):
|
||||||
self.ser_send("F" + str(speed) + "%")
|
self.ser_send("F" + str(speed) + "%")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
s = Pololu1376(None, "/dev/ttyACM0", "115200")
|
s = Pololu1376(None, "/dev/ttyACM0", "115200")
|
||||||
s.start()
|
s.activate()
|
||||||
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()
|
|
||||||
|
|
||||||
|
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
@@ -1,52 +1,55 @@
|
|||||||
from astirrer import AStirrer
|
from astirrer import AStirrer
|
||||||
|
import time
|
||||||
|
|
||||||
class Stirrer(AStirrer):
|
class Stirrer(AStirrer):
|
||||||
def __init__(self, params):
|
def __init__(self, dt):
|
||||||
self.params = params
|
super(Stirrer, self).__init__(dt)
|
||||||
self.speed = 0
|
|
||||||
self.cycleTime = 1
|
|
||||||
self.dutyCycle = 1
|
|
||||||
self.cycleCounter = 0
|
|
||||||
self.isOn = 0
|
|
||||||
self.isMasterOn = 0
|
self.isMasterOn = 0
|
||||||
|
|
||||||
def process(self):
|
def __del__(self):
|
||||||
dt = self.params["dt"]
|
self.deactivate()
|
||||||
|
|
||||||
self.cycleCounter -= dt
|
def activate(self):
|
||||||
if self.cycleCounter <= 0:
|
self.isMasterOn = 1
|
||||||
self.cycleCounter = self.cycleTime
|
self.log("Stirrer: switched On")
|
||||||
|
|
||||||
if self.cycleCounter <= (self.cycleTime * self.dutyCycle):
|
def deactivate(self):
|
||||||
if not self.isOn:
|
self.isMasterOn = 0
|
||||||
self.log ("Stirrer: On")
|
self.log("Stirrer: switched Off")
|
||||||
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 getSpeed(self):
|
def getSpeed(self):
|
||||||
if self.isOn and self.isMasterOn:
|
if self.isOn and self.isMasterOn:
|
||||||
return self.speed
|
return self.speed
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def start(self):
|
def onSetSpeed(self, speed):
|
||||||
self.isMasterOn = 1
|
self.log("Stirrer: Set speed to {} %".format(speed))
|
||||||
self.log("Stirrer: switched On")
|
|
||||||
|
|
||||||
def stop(self):
|
|
||||||
self.isMasterOn = 0
|
if __name__ == '__main__':
|
||||||
self.log("Stirrer: switched Off")
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user