class valvecontrol: # ============================================================================ # ===( Constants )============================================================ # ============================================================================ _m5_steigung = 0.8 # ============================================================================ # ===( Class globals )======================================================= # ============================================================================ # ============================================================================ # ===( Utils )=============================================================== # ============================================================================ # ============================================================================ # ===( Constructor )========================================================== # ============================================================================ def __init__(self, configFile = "hardware.cfg",config = None): if config == None: f = open('hardware.cfg') hardconfobj = ujson.loads(f.read()) self.config = hardconfobj["valve"] f.close() else: self.config = config #self.config["homeSencePin"] #self.config["homePosToValve"] in mm #self.config["valveToValve"] in mm #self.config["valveAmmount"] #self.config["maxSteps"] # mm von ventil zu ventil * schritte pro umdrehung / gewindesteigung self.stepsValveToValve = int(self.config["valveToValve"] * ((4075.7728395061727/2)/self._m5_steigung) ) print(self.stepsValveToValve) self.stepshomePosToValve = int(self.config["homePosToValve"] * ((4075.7728395061727/2)/self._m5_steigung) ) self.homingIsrunning = False self.valveReachedCB = None self.homingCB = None self.homepin = Pin(self.config["homeSencePin"], Pin.IN) pin = self.config["stepperPins"] self.valveStepper = Stepper(pin[0],pin[1],pin[2],pin[3],self.config["steps-s"],self.config["maxSteps"]) def setValveReachedCB(self,cb): self.valveReachedCB = cb def setHomeFinishedCB(self,cb): self.homingCB = cb def _internalHomingCallback(self,e): if self.homingIsrunning == True: self.homingIsrunning = False self.valveStepper.stop() self.valveStepper.resetPos() print("internal call") if self.homingCB is not None: self.homingCB() def homing(self,speed = None): #triggerflanke noch bestimmen!!! self.homingIsrunning = True # #print(self.homepin.value()) #todo: test if homepin is triggered #if true go in postitive direction and home after #if false home self.homepin.irq(trigger=Pin.IRQ_RISING , handler=self._internalHomingCallback) self.valveStepper.run(-1000000,1,speed) def openValve(self,valve): if valve > self.config["valveAmmount"]: return False stepsToRun = self.stepshomePosToValve + ((valve-1) * self.stepsValveToValve) - self.valveStepper.getPos() print("stepsToRun") print(stepsToRun) self.valveStepper.setMotionEndCB(self.valveReachedCB) self.valveStepper.run(stepsToRun) def run(self , steps , dire = 1, speed = None): self.valveStepper.run(steps,dire,speed) def closeAll(self): self.valveStepper.setMotionEndCB(self.valveReachedCB) self.valveStepper.run(self.config["valveToValve"]/2) def readHomePin(self): print("pin") print(self.homepin) print(self.homepin.value()) def closeInHome(self): stepsToRun = -(self.stepshomePosToValve + self.valveStepper.getPos()) print("stepsToRun") print(stepsToRun)
class valvecontrol: # ============================================================================ # ===( Constants )============================================================ # ============================================================================ _m5_steigung = 0.8 # ============================================================================ # ===( Class globals )======================================================= # ============================================================================ # ============================================================================ # ===( Utils )=============================================================== # ============================================================================ # ============================================================================ # ===( Constructor )========================================================== # ============================================================================ def __init__(self, configFile="hardware.cfg", config=None): if config == None: f = open('hardware.cfg') hardconfobj = ujson.loads(f.read()) self.config = hardconfobj["valve"] f.close() else: self.config = config #self.config["homeSencePin"] #self.config["homePosToValve"] in mm #self.config["valveToValve"] in mm #self.config["valveAmmount"] #self.config["maxSteps"] # mm von ventil zu ventil * schritte pro umdrehung / gewindesteigung self.stepsValveToValve = int( self.config["valveToValve"] * ((4075.7728395061727 / 2) / self._m5_steigung)) print(self.stepsValveToValve) self.stepshomePosToValve = int( self.config["homePosToValve"] * ((4075.7728395061727 / 2) / self._m5_steigung)) self.homingIsrunning = False self.valveReachedCB = None self.homingCB = None self.homepin = Pin(self.config["homeSencePin"], Pin.IN) pin = self.config["stepperPins"] self.valveStepper = Stepper(pin[0], pin[1], pin[2], pin[3], self.config["steps-s"], self.config["maxSteps"]) def setValveReachedCB(self, cb): """set callback that was calles if the actuator reached the wanted valve""" self.valveReachedCB = cb def setHomeFinishedCB(self, cb): """set callback that was calles if the actuator reached the homing sensor""" self.homingCB = cb def _internalHomingCallback(self, e): """called from interrupt(see homing()) if homingpoint is arrived """ if self.homingIsrunning == True: self.homingIsrunning = False self.valveStepper.stop() self.valveStepper.resetPos() if self.homingCB is not None: self.homingCB() def homing(self, speed=None): """starts the homing procedure""" self.homingIsrunning = True # #print(self.homepin.value()) #todo: test if homepin is triggered #if true go in postitive direction and home after #if false home self.homepin.irq(trigger=Pin.IRQ_RISING, handler=self._internalHomingCallback) self.valveStepper.run(-1000000, 1, speed) def openValve(self, valve): """drive the actor to the right valve""" if valve > self.config["valveAmmount"]: return False stepsToRun = self.stepshomePosToValve + ( (valve - 1) * self.stepsValveToValve) - self.valveStepper.getPos() self.valveStepper.setMotionEndCB(self.valveReachedCB) self.valveStepper.run(stepsToRun) def run(self, steps, dire=1, speed=None): """run a specifiv amount of steps""" self.valveStepper.run(steps, dire, speed) def closeAll(self): """run the aktor behind the homingpoint to close all valves""" self.valveStepper.setMotionEndCB(self.valveReachedCB) self.valveStepper.run(self.config["valveToValve"] / 2) def readHomePin(self): """manual read the input pin of the homing sensor (vor testing and homingstart)""" return self.homepin.value() def closeInHome(self): """the same as closeAll()""" stepsToRun = -(self.stepshomePosToValve + self.valveStepper.getPos()) print("stepsToRun") print(stepsToRun)