Dr. Arne JachensDr. Arne Jachens

Heating and Ventilation Control

HvcMotorDriver

Keine Erläuterungen gefunden.

import  RPi.GPIO as  GPIO


class HvcMotorDriver:
    def  __init__(self):
        #
        self.MDPins={}
        self.MDPins['pinOpen'] = 18
        self.MDPins['pinShut'] = 17
        self.MDPos={}
        self.MDPos['Shut'] = 979
        self.MDPos['Open'] = 1450
        self.maxOperationTime = 2 # seconds
        
    def  setMode(self):
        #Setup GPIO
        #GPIO.setwarnings(False) #probably you already use HvcSetGPIO
        GPIO.setmode(GPIO.BCM)
        message = "HvcMotorDriver.setMode: \n"
        actuators={}
        for  pin in self.MDPins:
            GPIO.setup(self.MDPins[pin], GPIO.OUT)
            message = message + "GPIO "+pin+":\t"+str(self.MDPins[pin])+"\t=> OUT \n"
            #            actuators[pin] = 0
            #
            #        return actuators,message
            
        return message

    def  move(self,sensors,opMode):
        """ Enable operation when operationMode changes,
            for  a certain time,
            if the motor position is valid
        """
        if self.MDPos['Open'] > self.MDPos['Shut']: 
            minPos = self.MDPos['Shut']
            maxPos = self.MDPos['Open']
            direction = "asc"
        else:
            maxPos = self.MDPos['Shut']
            minPos = self.MDPos['Open']
            direction = "des"
            
        if sensors['posBp']>0.95*minPos and sensors['posBp']<10.05*maxPos:
            print(opMode['byPs'],self.operationModeLast)
            if opMode['byPs'] != self.operationModeLast:
                self.operationModeLast = opMode['byPs']
                self.operationTimer = self.maxOperationTime
            elif self.operationTimer > 0:
                self.operationTimer = self.operationTimer-1

        message = "opMode: "+opMode['byPs']+" timer= "+str(self.operationTimer)+" sirection= "+direction+"\n"
        # set GPIO pins for  operation
        if opMode['byPs']=="open" and  self.operationTimer>0:
            active = True
            if direction == "asc" and sensors['posBp']<self.MDPos['Open']:
                GPIO.output(self.MDPins['pinOpen'], GPIO.HIGH)
                GPIO.output(self.MDPins['pinShut'], GPIO.LOW)
            elif direction == "des" and sensors['posBp']>self.MDPos['Open']:
                GPIO.output(self.MDPins['pinOpen'], GPIO.HIGH)
                GPIO.output(self.MDPins['pinShut'], GPIO.LOW)
            else:
                # full stop
                GPIO.output(self.MDPins['pinOpen'], GPIO.HIGH)
                GPIO.output(self.MDPins['pinShut'], GPIO.HIGH)
                
        elif opMode['byPs']=="shut" and  self.operationTimer>0:
            active = True
            if direction == "asc" and sensors['posBp']>self.MDPos['Shut']:
                GPIO.output(self.MDPins['pinOpen'], GPIO.LOW)
                GPIO.output(self.MDPins['pinShut'], GPIO.HIGH)
            elif direction == "des" and sensors['posBp']<self.MDPos['Shut']:
                GPIO.output(self.MDPins['pinOpen'], GPIO.LOW)
                GPIO.output(self.MDPins['pinShut'], GPIO.HIGH)
            else:
                # full stop
                GPIO.output(self.MDPins['pinOpen'], GPIO.HIGH)
                GPIO.output(self.MDPins['pinShut'], GPIO.HIGH)
                
        elif opMode['byPs']=="stop":
            active = False
            GPIO.output(self.MDPins['pinOpen'], GPIO.LOW)
            GPIO.output(self.MDPins['pinShut'], GPIO.LOW)
            
        else:
            # inactive
            active = False
            GPIO.output(self.MDPins['pinOpen'], GPIO.LOW)
            GPIO.output(self.MDPins['pinShut'], GPIO.LOW)
            
        print(message)
        return active
    
#persistant values:
HvcMotorDriver.operationTimer=0
HvcMotorDriver.operationModeLast=""


if __name__ == "__main__":
    import  time
    from HvcReadSPI import  HvcReadSPI
    
    myMD = HvcMotorDriver()
    msg = myMD.setMode()
    print(msg)
    
    opMode = {}
    opMode['byPs']="open" #     <<===  set target
    myMD.operationModeLast="shut"
    #opMode['byPs']="shut" #     <<===  set target
    #myMD.operationModeLast="open"
    #opMode['byPs']="stop" #     <<===  set target

    # myIO = HvcSetGPIO()
    mySPI = HvcReadSPI()
    ADC,msg = mySPI.readADCverbose()
    print(msg)
    while True:
        ADC = mySPI.readADC()
        sensors={}
        sensors['posBp']=ADC['posBp']
        active = myMD.move(sensors,opMode)
        for  pin in myMD.MDPins:
            foo = GPIO.input(myMD.MDPins[pin])
            print(pin,foo)
            
        if active:
            print(opMode['byPs'],sensors['posBp'])

        time.sleep(1)

Index of Library

1EnergyManager.py
2HvcControl.py
3HvcHCSR04ultrasonic.py
4HvcLightControl.py
5HvcMain.py
6HvcMotorDriver.py
7HvcMqtt.py
8HvcOneWire.py
9HvcOperationMode.py
10HvcRaw2phys.py
11HvcReadSPI.py
12HvcSendI2C.py
13HvcSetGPIO.py
14HvcTables.py
15HvcWeather.py
16HvcWifiRelay.py
17makeDoc.py

Der gesamte Sourcecode darf gemäß GNU General Public License weiterverbreitet werden.