def main(): # bring GPIO to a clean state try: GPIO.cleanup_existing() GPIO.setmode(GPIO.BOARD) except AttributeError: GPIO.setmode(GPIO.BCM) # we use GPIO Wrapper, object like interface to real GPIO Module ser = gpio(7, GPIO) ser.setup(GPIO.OUT) rclk = gpio(8, GPIO) rclk.setup(GPIO.OUT) srclk = gpio(25, GPIO) srclk.setup(GPIO.OUT) # in this example a shift register will be used shift_register = ShiftRegister(ser, rclk, srclk, 16, autocommit=True) # and we use a fake GPIO Object to use ShiftRegister instead # Motor A left upper corner m_a_dir = ShiftGPIOWrapper(shift_register, 0) m_a_step = ShiftGPIOWrapper(shift_register, 1) m_a_enable = ShiftGPIOWrapper(shift_register, 2) # motor B, should be reversed to A m_b_dir = ShiftGPIOWrapper(shift_register, 3) m_b_step = ShiftGPIOWrapper(shift_register, 4) m_b_enable = ShiftGPIOWrapper(shift_register, 5) # Motor C Penholder m_c_dir = ShiftGPIOWrapper(shift_register, 6) m_c_step = ShiftGPIOWrapper(shift_register, 7) m_c_enable = ShiftGPIOWrapper(shift_register, 8) try: logging.info("Initialize GPIO Modes") # build our controller logging.info("Creating Controller Object") motor_x = A5988DriverMotor( enable_pin=m_a_enable, dir_pin=m_a_dir, step_pin=m_a_step, max_position=9999, min_position=-9999, delay=0.05) motor_y = A5988DriverMotor( enable_pin=m_b_enable, dir_pin=m_b_dir, step_pin=m_b_step, max_position=9999, min_position=-9999, delay=0.05) motor_z = A5988DriverMotor( enable_pin=m_c_enable, dir_pin=m_c_dir, step_pin=m_c_step, max_position=9999, min_position=-9999, delay=0.05) # one turn is 8 mm * pi in 48 steps, motor and screw specifications controller = Controller(resolution=8 * math.pi / 48, default_speed=1.0, autorun=False) controller.add_motor("X", motor_x) controller.add_motor("Y", motor_y) controller.add_motor("Z", motor_z) controller.add_spindle(BaseSpindle()) # generic spindle object transformer = PlotterTransformer(width=830, scale=15.0, ca_zero=320, h_zero=140) # transformer for plotter usage controller.add_transformer(transformer) # transformer for plotter usage # create parser logging.info("Creating Parser Object") parser = Parser(filename=FILENAME, autorun=False) parser.set_controller(controller) # create gui logging.info("Creating GUI") # gui = PlotterSimulator(automatic=True) gui = GuiConsole() # connect gui with parser and controller gui.set_controller(controller) gui.set_parser(parser) controller.set_gui_cb(gui.controller_cb) parser.set_gui_cb(gui.parser_cb) transformer.set_gui_cb(gui.transformer_cb) # start logging.info("Please move pen to left top corner, the origin") # key = raw_input("Press any KEY when done") logging.error("start parsing") parser.read() logging.error("parsing done, calling controller methods") parser.run() logging.error("controller calculations done, calling physical world") controller.run() gui.quit() except KeyboardInterrupt as exc: logging.info(exc) except StandardError as exc: logging.exception(exc) shift_register.clear() GPIO.cleanup()
def main(): # cleanup state and set pin naming mode try: # for GpioObject GPIO.cleanup_existing() GPIO.setmode(GPIO.BOARD) except AttributeError: # for RPi.GPIO GPIO.cleanup() GPIO.setmode(GPIO.BCM) print type(GPIO) print GPIO.OUT # define necessary pins for shift register ser = gpio(7, GPIO) # labeled S ser.setup(GPIO.OUT) rclk = gpio(8, GPIO) # labeled R rclk.setup(GPIO.OUT) srclk = gpio(25, GPIO) # labeled SR srclk.setup(GPIO.OUT) # and shift register, 16 bits wide shift_register = ShiftRegister(ser, rclk, srclk, 16, autocommit=False) # use some virtual bits in shift register # act like GPIO Pins with this Wrapper Class # driver 1 dir and step d_1_dir_pin = ShiftGPIOWrapper(shift_register, 0) d_1_step_pin = ShiftGPIOWrapper(shift_register, 1) d_1_enable_pin = ShiftGPIOWrapper(shift_register, 2) # driver 2 dir and step d_2_dir_pin = ShiftGPIOWrapper(shift_register, 3) d_2_step_pin = ShiftGPIOWrapper(shift_register, 4) d_2_enable_pin = ShiftGPIOWrapper(shift_register, 5) # driver 3 dir and step d_3_dir_pin = ShiftGPIOWrapper(shift_register, 6) d_3_step_pin = ShiftGPIOWrapper(shift_register, 7) d_3_enable_pin = ShiftGPIOWrapper(shift_register, 8) steps = 0 # ENABLE PIN is active LOW d1.enable_pin.output(0) d2.enable_pin.output(0) d3.enable_pin.output(0) try: d_1_dir_pin.output(DIRECTION) d_2_dir_pin.output(DIRECTION) d_3_dir_pin.output(DIRECTION) shift_register.commit() start = time.time() while (start + DURATION_S) >= time.time(): d_1_step_pin.output(True) d_2_step_pin.output(True) d_3_step_pin.output(True) shift_register.commit() # time.sleep(0.0001) d_1_step_pin.output(False) d_2_step_pin.output(False) d_3_step_pin.output(False) shift_register.commit() # time.sleep(STEP_INTERVAL) steps += 1 except KeyboardInterrupt: pass print "%d steps done" % steps shift_register.clear() GPIO.cleanup()
def main(): # bring GPIO to a clean state try: GPIO.cleanup_existing() GPIO.setmode(GPIO.BOARD) except AttributeError: GPIO.setmode(GPIO.BCM) # we use GPIO Wrapper, object like interface to real GPIO Module ser = gpio(7, GPIO) ser.setup(GPIO.OUT) rclk = gpio(8, GPIO) rclk.setup(GPIO.OUT) srclk = gpio(25, GPIO) srclk.setup(GPIO.OUT) # in this example a shift register will be used shift_register = ShiftRegister(ser, rclk, srclk, 16, autocommit=True) # and we use a fake GPIO Object to use ShiftRegister instead # Motor A left upper corner m_a_dir = ShiftGPIOWrapper(shift_register, 0) m_a_step = ShiftGPIOWrapper(shift_register, 1) m_a_enable = ShiftGPIOWrapper(shift_register, 2) # motor B, should be reversed to A m_b_dir = ShiftGPIOWrapper(shift_register, 3) m_b_step = ShiftGPIOWrapper(shift_register, 4) m_b_enable = ShiftGPIOWrapper(shift_register, 5) # Motor C Penholder m_c_dir = ShiftGPIOWrapper(shift_register, 6) m_c_step = ShiftGPIOWrapper(shift_register, 7) m_c_enable = ShiftGPIOWrapper(shift_register, 8) try: logging.info("Initialize GPIO Modes") # build our controller logging.info("Creating Controller Object") motor_x = A5988DriverMotor(enable_pin=m_a_enable, dir_pin=m_a_dir, step_pin=m_a_step, max_position=9999, min_position=-9999, delay=0.05) motor_y = A5988DriverMotor(enable_pin=m_b_enable, dir_pin=m_b_dir, step_pin=m_b_step, max_position=9999, min_position=-9999, delay=0.05) motor_z = A5988DriverMotor(enable_pin=m_c_enable, dir_pin=m_c_dir, step_pin=m_c_step, max_position=9999, min_position=-9999, delay=0.05) # one turn is 8 mm * pi in 48 steps, motor and screw specifications controller = Controller(resolution=8 * math.pi / 48, default_speed=1.0, autorun=False) controller.add_motor("X", motor_x) controller.add_motor("Y", motor_y) controller.add_motor("Z", motor_z) controller.add_spindle(BaseSpindle()) # generic spindle object transformer = PlotterTransformer( width=830, scale=15.0, ca_zero=320, h_zero=140) # transformer for plotter usage controller.add_transformer( transformer) # transformer for plotter usage # create parser logging.info("Creating Parser Object") parser = Parser(filename=FILENAME, autorun=False) parser.set_controller(controller) # create gui logging.info("Creating GUI") # gui = PlotterSimulator(automatic=True) gui = GuiConsole() # connect gui with parser and controller gui.set_controller(controller) gui.set_parser(parser) controller.set_gui_cb(gui.controller_cb) parser.set_gui_cb(gui.parser_cb) transformer.set_gui_cb(gui.transformer_cb) # start logging.info("Please move pen to left top corner, the origin") # key = raw_input("Press any KEY when done") logging.error("start parsing") parser.read() logging.error("parsing done, calling controller methods") parser.run() logging.error("controller calculations done, calling physical world") controller.run() gui.quit() except KeyboardInterrupt as exc: logging.info(exc) except StandardError as exc: logging.exception(exc) shift_register.clear() GPIO.cleanup()
def main(): if len(sys.argv) == 1: sys.argv.append("examples/tiroler_adler.ngc") # STEP 1 - GPIO Initialization # bring GPIO to a clean state try: GPIO.cleanup_existing() GPIO.setmode(GPIO.BOARD) except AttributeError: pass # define GPIO Pins to use enable_pin = gpio(23, GPIO) enable_pin.setup(GPIO.OUT) laser_pin = gpio(14, GPIO) laser_pin.setup(GPIO.OUT) m_x_step = gpio(4, GPIO) m_x_step.setup(GPIO.OUT) m_x_dir = gpio(2, GPIO) m_x_dir.setup(GPIO.OUT) m_x_enable = gpio(27, GPIO) m_x_enable.setup(GPIO.OUT) m_y_step = gpio(22, GPIO) m_y_step.setup(GPIO.OUT) m_y_dir = gpio(24, GPIO) m_y_dir.setup(GPIO.OUT) m_y_enable = gpio(25, GPIO) m_y_enable.setup(GPIO.OUT) m_b_b1 = gpio(7, GPIO) m_b_b1.setup(GPIO.OUT) m_b_b2 = gpio(8, GPIO) m_b_b2.setup(GPIO.OUT) logging.info("Initialize GPIO") # enable pin for L293D Chip enable_pin.output(1) # laser power off laser_pin.output(0) # STEP 2 - create Objects and connect them # build our controller logging.info("Creating Controller Object") controller = Controller(resolution=512/36, default_speed=1.0, autorun=False) # step_pin, dir_pin, enable_pin, int max_position, int min_position, double delay, int sos_exception=False controller.add_motor("X", StepDirMotor(m_x_step, m_x_dir, m_x_enable, max_position=512, min_position=0, delay=0.002)) controller.add_motor("Y", StepDirMotor(m_y_step, m_y_dir, m_y_enable, max_position=512, min_position=0, delay=0.002)) controller.add_motor("Z", LaserMotor(laser_pin=laser_pin, min_position=-10000, max_position=10000, delay=0.00)) controller.add_spindle(BaseSpindle()) controller.add_transformer(Transformer()) # create parser logging.info("Creating Parser Object") parser = Parser(filename=sys.argv[1], autorun=False) parser.set_controller(controller) # create gui logging.info("Creating GUI") # gui = LaserSimulator(automatic=True, zoom=10.0, controller=controller, parser=parser) gui = GuiConsole() controller.set_gui_cb(gui.controller_cb) parser.set_gui_cb(gui.parser_cb) # start logging.info("Please move stepper motors to origin (0, 0, 0)") #key = raw_input("Press any KEY when done") # STEP 3 - run # this is usually done from try: parser.read() #key = raw_input("Parsing done, press Return to call controller") parser.run() #key = raw_input("Controller calculations done, press Return to move") controller.run() key = raw_input("Controller calculations done, press Return to move") except ControllerExit as exc: logging.info(exc) except Exception as exc: logging.exception(exc) except KeyboardInterrupt as exc: logging.exception(exc) # STEP 4 - shutdown # inidcate gui to quit gui.stop_flag = True # cleanup gpio GPIO.cleanup()