Ejemplo n.º 1
0
def dispense(value):
    value = float(value)
    try:
        print("Setting up OGR")
        ogr = ScaleOGR(False, False)
        stepper = Stepper(1000000)
        f = Filter(0.2)

        print("Setting up camera")
        camera = PiCamera()
        camera.close()
        camera = PiCamera()
        camera.resolution = (1920, 1088)
        camera.framerate = 30
        rawCapture = PiRGBArray(camera, size=(1920, 1088))

        print("Getting images")
        for frame in camera.capture_continuous(rawCapture,
                                               format="bgr",
                                               use_video_port=True):
            image = rawCapture.array
            num = ogr.process(image)
            fv = f.filter(num)
            print('Detected number: {:} -- Filtered number: {:}'.format(
                num, fv))
            rawCapture.truncate(0)

            if fv < value:
                stepper.run(1000, 1)
            else:
                stepper.stop()
                camera.close()

        pass
    except Exception as e:
        print(e)
        print("The scale is probably not on, turn it on and try again")
        pass
Ejemplo n.º 2
0
from stepper import Stepper
import utime as time

pin_dir = Pin(14)
pin_step = Pin(13)
pin_en = Pin(0)

steppy = Stepper(pin_en, pin_dir, pin_step)

steppy.on()
steppy.max_speed = 10000
steppy.acc = 5
for i in range(0, 1):
    steppy.target = steppy.deg_to_steps(360)
    while (steppy.pos != steppy.target):
        _ = steppy.run()
    #steppy.off()
    time.sleep(1.0)

    steppy.target = 0
    while (steppy.pos != steppy.target):
        _ = steppy.run()
    #steppy.off()
    time.sleep(1.0)

print("Done!")

#pwm = PWM(pin_step)
#
#pwm.freq(1000)
#pwm.duty(512)
Ejemplo n.º 3
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)
Ejemplo n.º 4
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.º 5
0
    #   stepper.set_acceleration(500)
    stepper = Stepper(pi, 16, 20, 21, 2000, 5000)
    state = 0
    #stepper2 = Stepper(pi, 13, 19, 26)
    #stepper2.set_velocity_setpoint(4000)

    pairs = [
        (1000, 1), 
        (0, 5)]

    prev_time = perf_counter()

    while True:
        v, t = pairs[state % len(pairs)]
        stepper.set_velocity_setpoint(v)

        curr_time = perf_counter()
        if curr_time - prev_time >= t:
            state += 1
            prev_time = curr_time

        stepper.run()

except KeyboardInterrupt:
    print("\nExiting...")
     # TODO: Switch ENA back to high

finally:
    pi.write(16, 1)
    print("done")