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
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)
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)
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)
# 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")