Ejemplo n.º 1
0
 def __init__(self, change_threshold=0.02):
     self.m1 = PhaseEnableMotor(5, 12)
     self.m2 = PhaseEnableMotor(6, 13)
     self.n_users = 2
     self.speed = 0
     self.angle = 0
     self.change_threshold = change_threshold
Ejemplo n.º 2
0
class GpiozeroDrive():
    DIRECTION_FORWARD = 1
    DIRECTION_BACKWARD = 0
    DIRECTION_STRAFELEFT = 3
    DIRECTION_STRAFERIGHT = 4

    __pwmEnablePinWhiteLeftChannel = 12
    __phaseDirPinRedLeftChannel = 5
    __pwmEnablePinWhiteRightChannel = 13
    __phaseDirPinRedRightChannel = 6

    __rightMotors = PhaseEnableMotor(phase=__phaseDirPinRedLeftChannel,
                                     enable=__pwmEnablePinWhiteLeftChannel,
                                     pwm=True)
    __leftMotors = PhaseEnableMotor(phase=__phaseDirPinRedRightChannel,
                                    enable=__pwmEnablePinWhiteRightChannel,
                                    pwm=True)

    __currentSpeed = 0

    def setDirection(self, leftDirection, rightDirection):
        self.__currentLeftDirection = leftDirection
        self.__currentRightDirection = rightDirection

    def moveForward(self, newSpeed):
        if newSpeed >= 0 and newSpeed <= 1:
            self.setDirection(self.DIRECTION_FORWARD, self.DIRECTION_FORWARD)
            self.__rightMotors.forward(speed)
            self.__leftMotors.forward(speed)

    def moveBackward(self, newSpeed):
        if newSpeed >= 0 and newSpeed <= 1:
            self.setSpeed(self.DIRECTION_BACKWARD, self.DIRECTION_BACKWARD)
            self.__rightMotors.backward(speed)
            self.__leftMotors.backward(speed)

    def move(self, directionLeft, directionRight, speedLeft, speedRight):
        self.setDirection(directionLeft, directionRight)
        if (speedLeft >= 0 and speedRight >= 0 and speedLeft <= 1
                and speedRight <= 1):
            if (directionLeft == self.DIRECTION_FORWARD):
                self.__leftMotors.forward(speedLeft)
            elif (directionLeft == self.DIRECTION_BACKWARD):
                self.__leftMotors.backward(speedLeft)

            if (directionRight == self.DIRECTION_FORWARD):
                self.__rightMotors.forward(speedRight)
            elif (directionRight == self.DIRECTION_BACKWARD):
                self.__rightMotors.backward(speedRight)

    def stop(self):
        self.setSpeed(0)
        self.__rightMotors.forward(0)
        self.__leftMotors.forward(0)
    def __init__(self):
        # A factor that can be adjusted to fine tune motor speed
        self._left_speed = 1.0
        self._right_speed = 1.0

        # The actual motor objects
        self._left_motor = PhaseEnableMotor(26, 20)
        self._right_motor = PhaseEnableMotor(16, 21)

        # The laser objects
        self._left_laser = LED(13)
        self._right_laser = LED(12)
Ejemplo n.º 4
0
    def __init__(self, transpose=0, dupes=False):
        print "Initializing swing object and setting up motors."
        self.__transpose = transpose
        self.__dupes = dupes
        motor1 = PhaseEnableMotor(17, 4)
        motor2 = PhaseEnableMotor(27, 18)
        motor3 = PhaseEnableMotor(23, 22)
        motor4 = PhaseEnableMotor(25, 24)
        motor5 = PhaseEnableMotor(6, 5)
        motor6 = PhaseEnableMotor(13, 12)
        motor7 = PhaseEnableMotor(16, 19)
        motor8 = PhaseEnableMotor(20, 26)
        self.__noteMap[110] = {"motor": motor1, "direction": "forward"}
        self.__noteMap[93] = {"motor": motor1, "direction": "backward"}
        self.__noteMap[98] = {"motor": motor2, "direction": "forward"}
        self.__noteMap[100] = {"motor": motor2, "direction": "backward"}
        self.__noteMap[104] = {"motor": motor3, "direction": "forward"}
        self.__noteMap[102] = {"motor": motor3, "direction": "backward"}
        self.__noteMap[114] = {"motor": motor4, "direction": "forward"}
        self.__noteMap[103] = {"motor": motor4, "direction": "backward"}
        self.__noteMap[116] = {"motor": motor5, "direction": "forward"}
        self.__noteMap[105] = {"motor": motor5, "direction": "backward"}
        self.__noteMap[117] = {"motor": motor6, "direction": "forward"}
        self.__noteMap[107] = {"motor": motor6, "direction": "backward"}
        self.__noteMap[115] = {"motor": motor7, "direction": "forward"}
        self.__noteMap[109] = {"motor": motor7, "direction": "backward"}
        self.__noteMap[112] = {"motor": motor8, "direction": "forward"}
        self.__noteMap[111] = {"motor": motor8, "direction": "backward"}

        #for motornum, notes, gpio in self.notes():
        #try:
        #print "tryblock"
        #except:
        #print "Error mapping motor"

        print self.__noteMap
        self.wake()
        time.sleep(2)
Ejemplo n.º 5
0
#!/usr/bin/env python3

import time
from gpiozero import PhaseEnableMotor

secs_per_rev = 1.06
revs_per_dispense = 2
dir_pin = 26
step_pin = 19

speed = 400  # in steps per second

motor = PhaseEnableMotor(dir_pin, step_pin)


def dispense(items=1):

    motor.backward(0.5)
    motor.enable_device.frequency = speed

    time.sleep(secs_per_rev * revs_per_dispense * items)

    motor.stop()


dispense(2)
class SurveyorSRV1MotorBoard:
    """ A class that controls the motor board on the Surveyor
    SRV-1 tracked robot
    """
    def __init__(self):
        # A factor that can be adjusted to fine tune motor speed
        self._left_speed = 1.0
        self._right_speed = 1.0

        # The actual motor objects
        self._left_motor = PhaseEnableMotor(26, 20)
        self._right_motor = PhaseEnableMotor(16, 21)

        # The laser objects
        self._left_laser = LED(13)
        self._right_laser = LED(12)

    def lasersOn(self):
        """ Turn on both lasers """
        self._left_laser.on()
        self._right_laser.on()

    def lasersOff(self):
        """ Turn off both lasers """
        self._left_laser.off()
        self._right_laser.off()

    @property
    def motorsSpeedFactors(self):
        """ Get the motor speed factors
        Output: {'left': float, 'right': float}
        """
        return {'left': self._left_speed, 'right': self._right_speed}

    @motorsSpeedFactors.setter
    def motorsSpeedFactors(self, left=1.0, right=1.0):
        """ Tune the motor speed factors
        Input: Keyword parameters => left = 1.0 and right = 1.0
        """
        try:
            assert left <= 1.0 and left >= 0.0
            assert right <= 1.0 and right >= 0.0
        except AssertionError:
            print("The speed parameters should be between 0.0 and 1.0")
            print("Setting both speed factors to default (1.0)")
            left = 1.0
            right = 1.0
        finally:
            self._left_speed = left
            self._right_speed = right

    def motorsMove(self, direction, speed=1.0):
        """ Command the motors to move
        Input: direction = ['left', 'right', 'forward', 'backward']
               speed = float => 0.0 to 1.0
        """
        try:
            assert speed <= 1.0
            assert speed >= 0.0
            assert direction in ['left', 'right', 'forward', 'backward']
        except AssertionError:
            # How to log errors?
            print("Speed parameters should be between 0.0 and 1.0")
            print("Not affecting any motor changes")

        left_speed_adj = speed * self._left_speed
        right_speed_adj = speed * self._right_speed

        if direction == 'forward':
            # Backward is forward on our robot
            self._left_motor.backward(left_speed_adj)
            self._right_motor.backward(right_speed_adj)
        elif direction == 'backward':
            # Forward is backward on our robot
            self._left_motor.forward(left_speed_adj)
            self._right_motor.forward(right_speed_adj)
        elif direction == 'left':
            self._left_motor.stop()
            self._right_motor.backward(right_speed_adj)
        elif direction == 'right':
            self._left_motor.backward(left_speed_adj)
            self._right_motor.stop()
        else:
            print("This shouldn't happen... seems like a direction \
                command slipped through")

    def motorsStop(self):
        """ Command the motors to stop """
        self._left_motor.stop()
        self._right_motor.stop()

    def boardStatus(self):
        """ The status of the SRV1 motor board
        Output: {'L Laser': Boolean, 'R Laser': Boolean, \
            'L Motor': Boolean, 'R Motor': Boolean}
        """
        return {
            'L Laser': self._left_laser.is_lit,
            'R Laser': self._right_laser.is_lit,
            'L Motor': self._left_motor.value,
            'R Motor': self._right_motor.value
        }

    def __str__(self):
        """ Let the __str__ method indicate the status of the board """
        return str(self.boardStatus())
Ejemplo n.º 7
0
def run(window, device, host, port):
    run_window = window
    factory = PiGPIOFactory(host=host, port=port)

    if device in (N_DigitalOutputDevice, N_LED, N_Buzzer):
        run_window.Layout(led_layout())
        switch = False
        device_open = False
        while True:
            event, values = run_window.read()
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = DigitalOutputDevice(values['-pin-'], pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    switch = False
                    run_window['-open-'].update(image_data=icon_open)
                    run_window['-switch-'].update(image_data=icon_switch_off)
                    d.close()

            if event == '-switch-':
                if device_open:
                    switch = not switch
                    run_window['-switch-'].update(image_data=icon_switch_on if switch else icon_switch_off)
                    d.on() if switch else d.off()
                else:
                    sg.popup_no_titlebar("Open device first!")
            if event in (sg.WIN_CLOSED, 'Exit'):
                break

    elif device in (N_PWMOutputDevice, N_PWMLED):
        run_window.Layout(pwmled_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            # if not exit-event, get param
            cycle = 0 if str(values['-cycle-']).startswith('Select') else values['-cycle-']
            frequency = 100 if values['-frequency-'].startswith('Select') else int(
                values['-frequency-'].replace('Hz', ''))
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-frequency-':
                if device_open:
                    d.frequency = frequency
            if event == '-cycle-':
                if device_open:
                    d.value = cycle
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = PWMOutputDevice(values['-pin-'], initial_value=cycle, frequency=frequency,
                                            pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)

            if event == '-pulse-':
                if device_open:
                    d.pulse()
                else:
                    sg.popup_no_titlebar("Open device first!")

    elif device == N_Servo:
        run_window.Layout(servo_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            value = 0 if str(values['-value-']).startswith('Select') else values['-value-']
            min_pulse_width = (1 if values['-min_pulse_width-'].startswith('Select') else float(
                values['-min_pulse_width-'].replace('ms', ''))) / 1000
            max_pulse_width = (2 if values['-max_pulse_width-'].startswith('Select') else float(
                values['-max_pulse_width-'].replace('ms', ''))) / 1000
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-value-':
                if device_open:
                    d.value = value
            if event in ('-min_pulse_width-', '-max_pulse_width-'):
                if device_open:
                    sg.popup_no_titlebar('Pulse-width param only work before open!')
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = Servo(values['-pin-'], initial_value=value, min_pulse_width=min_pulse_width,
                                  max_pulse_width=max_pulse_width, pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)

    elif device == N_AngularServo:
        run_window.Layout(angularservo_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            angle = 0 if str(values['-angle-']).startswith('Select') else values['-angle-']
            min_angle = -90 if str(values['-min_angle-']).startswith('Select') else values['-min_angle-']
            max_angle = 90 if str(values['-max_angle-']).startswith('Select') else values['-max_angle-']
            min_pulse_width = (1 if values['-min_pulse_width-'].startswith('Select') else float(
                values['-min_pulse_width-'].replace('ms', ''))) / 1000
            max_pulse_width = (2 if values['-max_pulse_width-'].startswith('Select') else float(
                values['-max_pulse_width-'].replace('ms', ''))) / 1000
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-angle-':
                if device_open:
                    d.angle = angle
            if event in ('-min_pulse_width-', '-max_pulse_width-', '-min_angle-', '-max_angle-'):
                if device_open:
                    sg.popup_no_titlebar('Pulse-width param only work before open!')
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = AngularServo(values['-pin-'], initial_angle=angle, min_angle=min_angle, max_angle=max_angle,
                                         min_pulse_width=min_pulse_width,
                                         max_pulse_width=max_pulse_width, pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)

    elif device == N_PhaseEnableMotor:
        run_window.Layout(phaseenablemotor_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            # if not exit-event, get param
            speed = 0 if str(values['-speed-']).startswith('Select') else values['-speed-']
            if event == '-direction_pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-speed_pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-speed-':
                if device_open:
                    d.value = speed
            if event == '-open-':
                if not device_open:
                    select = 'Select direction pin'
                    if values['-direction_pin-'] == select or values['-speed_pin-'] == select:
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = PhaseEnableMotor(phase=values['-direction_pin-'], enable=values['-speed_pin-'],
                                             pin_factory=factory)
                        d.value = 0
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)

    elif device == N_Button:
        run_window.Layout(button_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            # if not exit-event, get param
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-pull_up-':
                if device_open:
                    sg.popup_no_titlebar('pull-up param only work before open!')
            if event == '-test-':
                if device_open:
                    sg.popup_no_titlebar('Now you can test button!')
                    d.wait_for_press()
                    sg.popup_no_titlebar('Yuu pressed button!')
                    d.wait_for_release()
                    sg.popup_no_titlebar('Yuu released button!')
                else:
                    sg.popup_no_titlebar("Open device first!")
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        pull_up = True if str(values['-pull_up-']).startswith('Select') else values['-pull_up-']
                        d = Button(values['-pin-'], pull_up=pull_up, bounce_time=0.1, pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)

    elif device in (N_LineSensor, N_MotionSensor, N_LightSensor):
        run_window.Layout(linesensor_layout())
        device_open = False
        while True:
            event, values = run_window.read()
            if event in (sg.WIN_CLOSED, 'Exit'):
                break
            if event == '-pin-':
                if device_open:
                    sg.popup_no_titlebar("Close device first!")
            if event == '-test-':
                if device_open:
                    sg.popup_no_titlebar('Now you can test sensor!')
                    d.wait_for_active()
                    sg.popup_no_titlebar('device now is active!')
                    d.wait_for_inactive()
                    sg.popup_no_titlebar('device now is inactive, Test over!')
                else:
                    sg.popup_no_titlebar("Open device first!")
            if event == '-open-':
                if not device_open:
                    if values['-pin-'] == 'Select pin':
                        sg.popup_no_titlebar("Select your pin!")
                        continue
                    else:
                        d = eval(device)(pin=values['-pin-'], pin_factory=factory)
                        device_open = True
                        run_window['-open-'].update(image_data=icon_close)
                else:
                    device_open = False
                    d.close()
                    run_window['-open-'].update(image_data=icon_open)
from gpiozero import PhaseEnableMotor
motor = PhaseEnableMotor(3, 5)
motor.forward()
Ejemplo n.º 9
0
from gpiozero import PhaseEnableMotor


def clamp(value, min_, max_):
    return min(max_, max(min_, value))


motor1 = PhaseEnableMotor(26, 20)
motor2 = PhaseEnableMotor(16, 21)

speed = 1.0

inp = ''

while inp != 'q':
    print("Press 'q' to quit")
    inp = input("Press f to go forward, b to go backward, s to stop: ")
    if inp == 'f':
        motor1.backward(speed)
        motor2.backward(speed)
    elif inp == 'b':
        motor1.forward(speed)
        motor2.forward(speed)
    elif inp == 'l':
        motor1.stop()
        motor2.backward(speed)
    elif inp == 'r':
        motor1.backward(speed)
        motor2.stop()
    elif inp == 's':
        motor1.stop()