Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)