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
from time import sleep

stepper = Stepper()

try:
    print "start"
    stepper.start()
    for i in range(1, 5):
        stepper.setSpeed(i * 200)
        print i * 200
        sleep(1)
    print "stop"
    stepper.stop()
    sleep(.2)
    print "flip"
    stepper.flipDirection()
    stepper.start()
    sleep(5)
    print "stop"
    stepper.stop()

except KeyboardInterrupt:
    print("\nCtrl-C pressed.  Stopping PIGPIO and exiting...")
finally:
    stepper.stop()
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):
        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.º 4
0
class Turret(object):
    left = 1
    right = -1

    def __init__(self, tilt_min=0, tilt_max=180):
        self.min_angle = tilt_min
        self.max_angle = tilt_max
        self._init_servos()
        self._init_stepper()
        self._init_led()

    def _init_servos(self):
        #init global PWM
        self.pwm = Adafruit_PCA9685.PCA9685()
        #init servos
        self.servos = ServoPair(self.pwm,
                                chan_a=0,
                                chan_b=1,
                                min=self.min_angle,
                                max=self.max_angle)

        #calibrate
        self.servos.set_angle(90)
        self.tilt_angle = 90
        self.tilt_speed = 45  # Default tilt speed, in degrees per second
        self.tilt_delay = 1.0 / 60.0  # time between step increments; servo pulses are only 60hz
        self.tilt_loop = None
        self.tilt_dir = 0  # Angle increment per step

    def _init_stepper(self):
        #init steppers
        self.stepper = Stepper()
        self.pan_angle = 0  # angle

    def _init_led(self):
        self.status_led = DimmerRGB(self.pwm, 8, 9, 10)
        self.status_led.set_color(1, .4, 0)

    def tilt_to(self, angle):
        self.tilt_angle = max(self.min_angle, min(self.max_angle, angle))
        print("tilt:{}".format(self.tilt_angle))
        self.servos.set_angle(self.tilt_angle)
        return self.tilt_angle == self.max_angle or self.tilt_angle == self.min_angle

    def pan(self, d_angle):
        self.pan_angle += d_angle
        self.pan_angle %= 360
        self.stepper.step_to_angle(d_angle)

    def pan_forever(self, direction):
        """ Direction is 1 or -1 """
        self.stepper.step_forever(-direction)

    def stop_pan(self):
        self.stepper.stop()

    def _tilt_loop(self):
        maxed = self.tilt_to(self.tilt_angle - self.tilt_dir)
        if maxed:
            self.stop_tilt()

    def tilt(self, speed=None):
        """ Tilt up until told to stop
        
        """
        if speed == None: speed = self.tilt_speed
        self.tilt_dir = speed * self.tilt_delay
        if self.tilt_loop: self.stop_tilt()
        self.tilt_loop = task.LoopingCall(f=self._tilt_loop)
        self.tilt_loop.start(self.tilt_delay)

    def tilt_down(self, speed=None):
        if speed == None: speed = self.tilt_speed
        self.tilt(-speed)

    def stop_tilt(self):
        try:
            self.tilt_loop.stop()
        except:
            pass
        self.tilt_loop = None

    def fire(self):
        print("bang")

    def calibrate(self):
        print("Calibrating... DING")

    def __del__(self):
        IO.cleanup()
Ejemplo n.º 5
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)