Example #1
0
from gpiozero import AngularServo
from time import sleep

servo = AngularServo(5, min_angle=0, max_angle=90)
servo.angle = 0

servo.min()
sleep(1)
servo.mid()
sleep(1)
servo.max()
sleep(1)
Example #2
0
servo32 = AngularServo(7, min_angle=-90, max_angle=90)
servo33 = AngularServo(1, min_angle=-90, max_angle=90)

servo41 = AngularServo(0, min_angle=-90, max_angle=90)
servo42 = AngularServo(5, min_angle=-90, max_angle=90)
servo43 = AngularServo(6, min_angle=-90, max_angle=90)

servo11.max()
servo12.max()
servo13.max()
sleep(1)
servo11.mid()
servo12.mid()
servo13.mid()
sleep(1)
servo11.min()
servo12.min()
servo13.min()
sleep(1)

servo21.max()
servo22.max()
servo23.max()
sleep(1)
servo21.mid()
servo22.mid()
servo23.mid()
sleep(1)
servo21.min()
servo22.min()
servo23.min()
class Robot:
    def __init__(self,
                 websocket,
                 servo_pin1=PWM_PIN1,
                 servo_pin2=PWM_PIN2,
                 max_pulse=DEFAULT_MAX_PULSE,
                 min_pulse=DEFAULT_MIN_PULSE):
        self.init_at = datetime.datetime.now().time()
        self.left_servo = Servo(PWM_PIN1,
                                frame_width=20 / 1000,
                                max_pulse_width=max_pulse,
                                min_pulse_width=min_pulse)
        self.right_servo = Servo(servo_pin2,
                                 frame_width=20 / 1000,
                                 max_pulse_width=max_pulse,
                                 min_pulse_width=min_pulse)
        self.command_type_to_method = {
            'movement': self.execute_movement,
            'playback': self.handle_playback_task,
            'reverse': self.handle_reverse_task,
            'upload': self.save_command_sets,
            'sonar': self.handle_sonar
        }
        self.movement_commands = {
            'ArrowUp': self.move_forward,
            'ArrowRight': self.turn_right,
            'ArrowLeft': self.turn_left,
            'ArrowDown': self.move_backwards,
            'stop': self.stop
        }
        self.command_database_url = ""
        self.database_path = ""
        self.websocket = websocket
        self.sonic_sensor = DistanceSensor(echo=17, trigger=4)
        self.angular_servo = AngularServo(21,
                                          max_pulse_width=2 / 1000,
                                          min_pulse_width=1 / 10000)
        self.current_background_tasks = {}

    def handle_sonar(self, message):
        if message == 'start':
            sonar_task = asyncio.ensure_future(self.transmit_sonar_data())
            self.current_background_tasks['sonar'] = sonar_task
        elif message == 'stop':
            self.current_background_tasks['sonar'].cancel()

    async def transmit_sonar_data(self):
        self.angular_servo.min()
        await asyncio.sleep(1)
        while True:
            for i in chain(range(-90, 91), range(90, -81, -1)):
                self.angular_servo.angle = i
                await asyncio.sleep(.024)  # fastest is like .004
                angle_and_distance = json.dumps(
                    (i, round(self.sonic_sensor.distance * 100, 2)))
                await self.websocket.send(angle_and_distance)

    def move_forward(self):
        self.left_servo.max()
        self.right_servo.min()

    def turn_right(self):
        self.right_servo.min()
        self.left_servo.min()

    def turn_left(self):
        self.left_servo.max()
        self.right_servo.max()

    def move_backwards(self):
        self.left_servo.min()
        self.right_servo.max()

    def stop(self):
        self.left_servo.mid()
        self.right_servo.mid()

    def handle_reverse_task(self, command_set):
        reverse_task = asyncio.ensure_future(self.execute_reverse(command_set))
        self.current_background_tasks['movement'] = reverse_task

    async def execute_reverse(self, command_set):
        reversed_directions = {
            'ArrowUp': 'ArrowDown',
            'ArrowDown': 'ArrowUp',
            'ArrowRight': 'ArrowLeft',
            'ArrowLeft': 'ArrowRight'
        }
        direction_duration_tups = RobotUtils.process_command_set(
            command_set)  #[('ArrowRight',3411),('ArrowDown',5000)]
        direction_duration_tups.reverse()
        for direction, duration in direction_duration_tups:
            direction = reversed_directions[direction]
            print("Executing {} for {} ms".format(direction, duration))
            self.movement_commands[direction]()
            await asyncio.sleep(duration / 1000)
            self.stop()

    def handle_playback_task(self, command_set):
        playback_task = asyncio.ensure_future(
            self.execute_playback(command_set))
        self.current_background_tasks['movement'] = playback_task

    async def execute_playback(self, command_set):
        direction_duration_tups = RobotUtils.process_command_set(
            command_set)  #[('ArrowRight',3411),('ArrowDown',5000)]
        for direction, duration in direction_duration_tups:
            print("Executing {} for {} ms".format(direction, duration))
            self.movement_commands[direction]()
            await asyncio.sleep(duration / 1000)
            self.stop()

    def execute_movement(self, direction):
        if 'movement' in self.current_background_tasks and self.current_background_tasks[
                'movement']:
            self.current_background_tasks['movement'].cancel()
            self.current_background_tasks['movement'] = None
        correct_method = self.movement_commands[direction]
        correct_method()

    def save_command_sets(self, command_set):
        with open(self.database_path, 'w') as database:
            database.write(command_set)

    def send_command_sets(self):
        with open(self.database_path) as database:
            return database.read()

    def process_message(self, message):
        message_type, message_data = message['type'], message['data']
        correct_method = self.command_type_to_method[
            message_type]  #returns a method
        return correct_method(
            message_data
        )  #this can potentially return a coroutine which can be cancelled in the main loop
Example #4
0
myGPIO1 = 4  #right wheel
myGPIO2 = 25  # left wheel
myGPIO3 = 23  # mini front gate
myGPIO4 = 24  #right pick
myGPIO5 = 22  #left pick
myGPIO6 = 17  #leftbackgate
myGPIO7 = 18  #rightbackgate
myGPIO8 = 27  #classifier

leftWheel = Servo(myGPIO2)
rightWheel = AngularServo(25, min_angle=45, max_angle=-45)
#rightWheel = Servo(myGPIO1)
#miniFrontGate = Servo(myGPIO3)
#rightPick = Servo(myGPIO4)
#leftPick = Servo(myGPIO5)
'''
myCorrection=0
maxPW=(2.0+myCorrection)/1000
minPW=(1.0-myCorrection)/1000
 
servo = Servo(myGPIO5,min_pulse_width=minPW,max_pulse_width=maxPW)
 
while True:
 
  print("Set value range -1.0 to +1.0")
  for value in range(0,21):
    value2=(float(value)-10)/10
    servo.value=value2
    print(value2)
    sleep(0.5)
 
Example #5
0
class Gpio:
    def __init__(self):
        self.cuarto1 = LED(5)
        self.cuarto2 = LED(6)
        self.cuarto3 = LED(13)
        self.cuarto4 = LED(19)
        self.cuarto5 = LED(26)
        self.detectar = LED(21)
        self.RELAY_PIN = 12
        self.RELAY_PIN1 = 18
        self.relay = gpiozero.OutputDevice(self.RELAY_PIN,
                                           active_high=False,
                                           initial_value=False)
        self.relayV = gpiozero.OutputDevice(self.RELAY_PIN1,
                                            active_high=False,
                                            initial_value=False)
        self.pir = MotionSensor(17)
        self.puerta1 = AngularServo(20, min_angle=0, max_angle=90)
        self.puerta2 = AngularServo(16, min_angle=0, max_angle=90)
        self.puerta3 = AngularServo(7, min_angle=0, max_angle=90)
        self.DHT_READ_TIMEOUT = 10
        self.DHT_DATA_PIN = 4
        self.dht22_sensor = Adafruit_DHT.DHT11
        self.temperature = 0

    def getCuarto1(self):
        return self.cuarto1

    def setCuarto1(self, estado):
        if estado == 'ON':
            self.cuarto1.on()
        elif estado == 'OFF':
            self.cuarto1.off()

    def getCuarto2(self):
        return self.cuarto2

    def setCuarto2(self, estado):
        if estado == 'ON':
            self.cuarto2.on()
        elif estado == 'OFF':
            self.cuarto2.off()

    def getCuarto3(self):
        return self.cuarto3

    def setCuarto3(self, estado):
        if estado == 'ON':
            self.cuarto3.on()
        elif estado == 'OFF':
            self.cuarto3.off()

    def getCuarto4(self):
        return self.cuarto4

    def setCuarto4(self, estado):
        if estado == 'ON':
            self.cuarto4.on()
        elif estado == 'OFF':
            self.cuarto4.off()

    def getCuarto5(self):
        return self.cuarto5

    def setCuarto5(self, estado):
        if estado == 'ON':
            self.cuarto5.on()
        elif estado == 'OFF':
            self.cuarto5.off()

    def getRele(self):
        return self.relay

    def setRele(self, estado):
        if estado == 'ON':
            self.relay.on()
        elif estado == 'OFF':
            self.relay.off()

    def getPir(self):
        return self.pir

    def setPir(self):
        if self.pir.motion_detected:
            self.detectar.on()
            time.sleep(5)
            self.detectar.off()
            print('Movimiento')
        else:
            self.detectar.off()
            print('NO Movimiento')

    def getPuerta1(self):
        return self.puerta1

    def setPuerta1(self, estado):
        if estado == 'ON':
            self.puerta1.max()
        elif estado == 'OFF':
            self.puerta1.min()

    def getPuerta2(self):
        return self.puerta2

    def getPuerta3(self):
        return self.puerta3

    def setPuerta3(self, estado):
        if estado == 'ON':
            self.puerta3.max()
        elif estado == 'OFF':
            self.puerta3.min()

    def getDetectar(self):
        return self.detectar

    def getTemperatura(self):
        return self.temperature

    def setTemperatura(self):
        humidity, temperature = Adafruit_DHT.read_retry(
            self.dht22_sensor, self.DHT_DATA_PIN)
        if humidity is not None and temperature is not None:
            self.temperature = '%.0f' % (temperature)
            print(self.temperature)
            if int(self.temperature) >= 30:
                self.relayV.on()
            else:
                self.relayV.off()
            return True