class Gripp3r(IRBeaconRemoteControlledTank): def __init__(self, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, grip_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): super().__init__(left_motor_port=left_motor_port, right_motor_port=right_motor_port, ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel) self.grip_motor = MediumMotor(address=grip_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.speaker = Sound() def grip_or_release_by_ir_beacon(self, speed: float = 50): if self.ir_sensor.beacon(channel=self.ir_beacon_channel): if self.touch_sensor.is_pressed: self.speaker.play_file( wav_file='/home/robot/sound/Air release.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.grip_motor.on_for_seconds(speed=speed, seconds=1, brake=True, block=True) else: self.speaker.play_file( wav_file='/home/robot/sound/Airbrake.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.grip_motor.on(speed=-speed, brake=False, block=False) self.touch_sensor.wait_for_pressed() self.grip_motor.off(brake=True) while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def main(self, speed: float = 100): self.grip_motor.on_for_seconds(speed=-50, seconds=1, brake=True, block=True) while True: self.drive_once_by_ir_beacon(speed=speed) self.grip_or_release_by_ir_beacon()
class CuriosityRov3r(IRBeaconRemoteControlledTank): def __init__( self, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, medium_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): super().__init__( left_motor_port=left_motor_port, right_motor_port=right_motor_port, ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel) self.medium_motor = MediumMotor(address=medium_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.color_sensor = ColorSensor(address=color_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.dis = Display() self.noise = Sound() def spin_fan(self, speed: float = 100): if self.color_sensor.reflected_light_intensity > 20: self.medium_motor.on( speed=speed, brake=False, block=False) else: self.medium_motor.off(brake=True) def say_when_touched(self): if self.touch_sensor.is_pressed: self.dis.image_filename( filename='/home/robot/image/Angry.bmp', clear_screen=True) self.dis.update() self.noise.play_file( wav_file='/home/robot/sound/No.wav', volume=100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) self.medium_motor.on_for_seconds( speed=-50, seconds=3, brake=True, block=True) def main(self, speed: float = 100): while True: self.drive_once_by_ir_beacon(speed=speed) self.say_when_touched() self.spin_fan(speed=speed)
class El3ctricGuitar: NOTES = [1318, 1174, 987, 880, 783, 659, 587, 493, 440, 392, 329, 293] N_NOTES = len(NOTES) def __init__( self, lever_motor_port: str = OUTPUT_D, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4): self.lever_motor = MediumMotor(address=lever_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.leds = Leds() self.speaker = Sound() def start_up(self): self.leds.animate_flash( color='ORANGE', groups=('LEFT', 'RIGHT'), sleeptime=0.5, duration=3, block=True) self.lever_motor.on_for_seconds( speed=5, seconds=1, brake=False, block=True) self.lever_motor.on_for_degrees( speed=-5, degrees=30, brake=True, block=True) sleep(0.1) self.lever_motor.reset() def play_music(self): if self.touch_sensor.is_released: raw = sum(self.ir_sensor.proximity for _ in range(4)) / 4 self.speaker.tone( self.NOTES[min(round(raw / 5), self.N_NOTES - 1)] - 11 * self.lever_motor.position, 100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) def main(self): self.start_up() while True: self.play_music()
def MoveForward(self, steering=0, speed=-20): steer_pair = MoveSteering(OUTPUT_A, OUTPUT_B, motor_class=LargeMotor) drill = Drill() #We make this condition to check if the Robot if drill.Drilling() == 1: steer_pair.off() if self.is_drilled == False: self.is_drilled = True print("drilling") sleep(2) mm = MediumMotor(OUTPUT_D) sp = 90 time = 10 mm.on_for_seconds(speed=SpeedRPM(sp), seconds=time) print("Number of rotations =" + str(sp / 6)) else: steer_pair.on_for_seconds(steering=0, speed=-1 * SpeedRPM(12), seconds=1, brake=True, block=True)
class Gripp3r: def __init__(self, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, grip_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): self.tank_driver = MoveTank(left_motor_port=left_motor_port, right_motor_port=right_motor_port, motor_class=LargeMotor) self.grip_motor = MediumMotor(address=grip_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.speaker = Sound() def drive_once_by_ir_beacon(self, speed: float = 100): if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right(channel=self.ir_beacon_channel): # go forward self.tank_driver.on(left_speed=speed, right_speed=speed) elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): # go backward self.tank_driver.on(left_speed=-speed, right_speed=-speed) elif self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): # turn around left self.tank_driver.on(left_speed=-speed, right_speed=speed) elif self.ir_sensor.top_right(channel=self.ir_beacon_channel) and \ self.ir_sensor.bottom_left(channel=self.ir_beacon_channel): # turn around right self.tank_driver.on(left_speed=speed, right_speed=-speed) elif self.ir_sensor.top_left(channel=self.ir_beacon_channel): # turn left self.tank_driver.on(left_speed=0, right_speed=speed) elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): # turn right self.tank_driver.on(left_speed=speed, right_speed=0) elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel): # left backward self.tank_driver.on(left_speed=0, right_speed=-speed) elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): # right backward self.tank_driver.on(left_speed=-speed, right_speed=0) else: self.tank_driver.off(brake=False) def grip_or_release_by_ir_beacon(self, speed: float = 50): if self.ir_sensor.beacon(channel=self.ir_beacon_channel): if self.touch_sensor.is_pressed: self.speaker.play_file( wav_file='/home/robot/sound/Air release.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.grip_motor.on_for_seconds(speed=speed, seconds=1, brake=True, block=True) else: self.speaker.play_file( wav_file='/home/robot/sound/Airbrake.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.grip_motor.on(speed=-speed, brake=False, block=False) self.touch_sensor.wait_for_pressed() self.grip_motor.off(brake=True) while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def main(self, speed: float = 100): self.grip_motor.on_for_seconds(speed=-50, seconds=1, brake=True, block=True) while True: self.drive_once_by_ir_beacon(speed=speed) self.grip_or_release_by_ir_beacon()
#!/usr/bin/env python3 from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_D, SpeedPercent, MoveTank, MediumMotor, OUTPUT_B from ev3dev2.sensor import INPUT_4 from ev3dev2.sensor.lego import UltrasonicSensor from ev3dev2.led import Leds # Program to control movement of arm with medium motoR medium_motor = MediumMotor(OUTPUT_B) #inversed = POLARITY_INVERSED #medium_motor.polarity = inversed #medium_motor.mode = 'COMMAND_RUN_TIMED' medium_motor.on_for_seconds(20, 5)
class Dinor3x(IRBeaconRemoteControlledTank): """ Challenges: - Can you make DINOR3X remote controlled with the IR-Beacon? - Can you attach a colorsensor to DINOR3X, and make it behave differently depending on which color is in front of the sensor (red = walk fast, white = walk slow, etc.)? """ def __init__( self, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, jaw_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): super().__init__( left_motor_port=left_motor_port, right_motor_port=right_motor_port, ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel) self.jaw_motor = MediumMotor(address=jaw_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.button = Button() self.speaker = Sound() def calibrate_legs(self): self.tank_driver.on( left_speed=10, right_speed=20) self.touch_sensor.wait_for_released() self.tank_driver.off(brake=True) self.left_motor.on(speed=40) self.touch_sensor.wait_for_pressed() self.left_motor.off(brake=True) self.left_motor.on_for_rotations( rotations=-0.2, speed=50, brake=True, block=True) self.right_motor.on(speed=40) self.touch_sensor.wait_for_pressed() self.right_motor.off(brake=True) self.right_motor.on_for_rotations( rotations=-0.2, speed=50, brake=True, block=True) self.left_motor.reset() self.right_motor.reset() def close_mouth(self): self.jaw_motor.on( speed=20, block=False, brake=False) sleep(1) self.jaw_motor.off(brake=True) def roar(self): self.speaker.play_file( wav_file='/home/robot/sound/T-rex roar.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.jaw_motor.on_for_degrees( speed=40, degrees=-60, block=True, brake=True) for i in range(12): self.jaw_motor.on_for_seconds( speed=-40, seconds=0.05, block=True, brake=True) self.jaw_motor.on_for_seconds( speed=40, seconds=0.05, block=True, brake=True) self.jaw_motor.on( speed=20, brake=False, block=False) sleep(0.5) def walk_until_blocked(self): self.steer_driver.on( steering=0, speed=-40) while self.ir_sensor.proximity >= 25: pass self.steer_driver.off(brake=True) def run_away(self): self.steer_driver.on_for_rotations( speed=75, steering=0, rotations=3, brake=True, block=True) def jump(self): """ Dinor3x Mission 02 Challenge: make it jump """ ... # TRANSLATED FROM EV3-G MY BLOCKS # ------------------------------- def leg_adjust( self, cyclic_degrees: float, speed: float = 40, leg_offset_percent: float = 0, mirrored_adjust: bool = False, brake: bool = True): ... def leg_to_pos( self, speed: float = 40, left_position: float = 0, right_position: float = 0): self.tank_driver.stop(brake=True) self.left_motor.on_for_degrees( speed=speed, degrees=left_position - cyclic_position_offset( rotation_sensor=self.left_motor.position, cyclic_degrees=360), brake=True, block=True) self.right_motor.on_for_degrees( speed=speed, degrees=right_position - cyclic_position_offset( rotation_sensor=self.right_motor.position, cyclic_degrees=360), brake=True, block=True) def turn(self, speed: float = 40, n_steps: int = 1): ... def walk(self, speed: float = 40): ... def walk_steps(self, speed: float = 40, n_steps: int = 1): ...
else: m.on(-100, 10) while c + target < g.angle: pass m.off() def GoStraightForward(rotation): GoStraightGyro(-5, g.angle, 10, rotation) def GoStraightBackward(rotation): GoStraightGyro(5, g.angle, -10, rotation) GoStraightBackward(4.5) mr.on_for_seconds(10, 2) GoStraightBackward(1.4) mr.on_for_seconds(-10, 2) TurnWithGyro(-80) GoStraightForward(2.2) # read color here TurnWithGyro(60) GoStraightForward(3) TurnWithGyro(-90) # -90 degrees for yellow GoStraightForward(2.5) ml.on_for_seconds(-30, 2) ml.on_for_degrees(30, 30) GoStraightBackward(7) TurnWithGyro(-90) GoStraightBackward(1.5)
# Começo while waiting: if btn.any(): sound.beep() global waiting global meeting_area waiting = False meeting_area = True else: sleep(0.01) # Wait 0.01 second rgbmax_e = definir_rgbmax('esq') rgbmax_d = definir_rgbmax('dir') garra_g.on_for_seconds(10, 1.5) garra_m.on_for_seconds(10, 1) mapadecores = ['vermelho', 'amarelo', 'azul'] while True: while meeting_area: #começa aleatório, termina virado pro preto while cor('esq') == 'branco' and cor('dir') == 'branco': log = open('log.txt', 'a') log.write('Sensores no branco, indo pra frente\n') log.close() steering_pair.on(0, 20) else: log = open('log.txt', 'a') log.write('Algum sensor saiu do branco, para.\n') log.close() steering_pair.off() #trocar isso acima por alinhamento()
class MarsRov3r(IRBeaconRemoteControlledTank): is_gripping = False def __init__(self, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, grip_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): super().__init__(left_motor_port=left_motor_port, right_motor_port=right_motor_port, ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel) self.grip_motor = MediumMotor(address=grip_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.color_sensor = ColorSensor(address=color_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.speaker = Sound() def grip_or_release_claw_by_ir_beacon(self): while True: if self.ir_sensor.beacon(channel=self.ir_beacon_channel): if self.is_gripping: self.grip_motor.on_for_seconds(speed=100, seconds=2, brake=True, block=True) self.speaker.play_file( wav_file='/home/robot/sound/Air release.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.is_gripping = False else: self.grip_motor.on_for_seconds(speed=-100, seconds=2, brake=True, block=True) self.speaker.play_file( wav_file='/home/robot/sound/Airbrake.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.is_gripping = True while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def main(self): self.grip_motor.on_for_seconds(speed=50, seconds=1, brake=True, block=True) Process(target=self.grip_or_release_claw_by_ir_beacon, daemon=True).start() self.keep_driving_by_ir_beacon(speed=100)
class Spik3r: def __init__(self, sting_motor_port: str = OUTPUT_D, go_motor_port: str = OUTPUT_B, claw_motor_port: str = OUTPUT_A, touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): self.sting_motor = LargeMotor(address=sting_motor_port) self.go_motor = LargeMotor(address=go_motor_port) self.claw_motor = MediumMotor(address=claw_motor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.touch_sensor = TouchSensor(address=touch_sensor_port) self.color_sensor = ColorSensor(address=color_sensor_port) self.dis = Display() self.speaker = Sound() def sting_by_ir_beacon(self): while True: if self.ir_sensor.beacon(channel=self.ir_beacon_channel): self.sting_motor.on_for_degrees(speed=-75, degrees=220, brake=True, block=False) self.speaker.play_file(wav_file='/home/robot/sound/Blip 1.wav', volume=100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) self.sting_motor.on_for_seconds(speed=-100, seconds=1, brake=True, block=True) self.sting_motor.on_for_seconds(speed=100, seconds=1, brake=True, block=True) while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def be_noisy_to_people(self): while True: if self.color_sensor.reflected_light_intensity > 30: for i in range(4): self.speaker.play_file( wav_file='/home/robot/sound/Blip 2.wav', volume=100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) def pinch_if_touched(self): while True: if self.touch_sensor.is_pressed: self.claw_motor.on_for_seconds(speed=50, seconds=1, brake=True, block=True) self.claw_motor.on_for_seconds(speed=-50, seconds=0.3, brake=True, block=True) def keep_driving_by_ir_beacon(self): while True: if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.go_motor.on(speed=91, block=False, brake=False) elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.go_motor.on(speed=-100, brake=False, block=False) else: self.go_motor.off(brake=True) def main(self): self.dis.image_filename(filename='/home/robot/image/Evil.bmp', clear_screen=True) self.dis.update() # FIXME: .sting_by_ir_beacon stops responding after a while Process(target=self.be_noisy_to_people, daemon=True).start() Process(target=self.sting_by_ir_beacon, daemon=True).start() Process(target=self.pinch_if_touched, daemon=True).start() self.keep_driving_by_ir_beacon()
#!/usr/bin/env python3 from ev3dev2.motor import MediumMotor, OUTPUT_A from ev3dev2.motor import SpeedDPS, SpeedRPS, SpeedRPM from time import sleep medium_motor = MediumMotor(OUTPUT_A) # We'll make the motor turn 180 degrees # at speed 50 (780 dps for the medium motor) medium_motor.on_for_degrees(speed=50, degrees=180) # then wait one second sleep(1) # then – 180 degrees at 500 dps medium_motor.on_for_degrees(speed=SpeedDPS(500), degrees=-180) sleep(1) # then 0.5 rotations at speed 50 (780 dps) medium_motor.on_for_rotations(speed=50, rotations=0.5) sleep(1) # then – 0.5 rotations at 1 rotation per second (360 dps) medium_motor.on_for_rotations(speed=SpeedRPS(1), rotations=-0.5) sleep(1) medium_motor.on_for_seconds(speed=SpeedRPM(60), seconds=5) sleep(1) medium_motor.on(speed=60) sleep(2) medium_motor.off()
#!/usr/bin/env python3 from ev3dev2.sensor.lego import TouchSensor, ColorSensor from time import sleep from ev3dev2.motor import MoveTank, MediumMotor, LargeMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C #we're importing the motor function from ev3dev2.motor import SpeedDPS, SpeedRPM, SpeedRPS, SpeedDPM cl = ColorSensor() ts = TouchSensor() tank_pair = MoveTank(OUTPUT_C, OUTPUT_B) # Stop program by long-pressing touch sensor button #his program will make the color sensor display RGB colors together sm = MediumMotor(OUTPUT_A) #sm.on_for_seconds(speed = -20, seconds = 8) #sm.on_for_seconds(speed = -20, seconds = 8) sm.on_for_seconds(speed=20, seconds=8) tank_pair.on_for_degrees(10, 10, 726) tank_pair.on_for_degrees(10, -10, 180) while not ts.is_pressed: # rgb is a tuple containing three integers # each 0-255 representing the amount of # red, green and blue in the reflected light print(cl.rgb) red = cl.rgb[0] green = cl.rgb[1] blue = cl.rgb[2] if red > 10 and green > 10 and blue > 10: tank_pair.on_for_degrees(3, 3, 45) tank_pair.on_for_degrees(-10, 10, 180) tank_pair.on_for_degrees(-3, -3, 180)
TANK_DRIVER.on(left_speed=0, right_speed=-speed) elif IR_SENSOR.bottom_right(channel): # right backward TANK_DRIVER.on(left_speed=-speed, right_speed=0) else: TANK_DRIVER.off(brake=False) while True: drive_once_by_ir_beacon(channel=1, speed=100) if IR_SENSOR.proximity < 30: MEDIUM_MOTOR.on_for_seconds(speed=50, seconds=0.9, block=True, brake=True) if COLOR_SENSOR.reflected_light_intensity > 30: TANK_DRIVER.on(left_speed=50, right_speed=50) else: TANK_DRIVER.off(brake=False) if TOUCH_SENSOR.is_pressed: for i in range(3): SPEAKER.play_file(wav_file='/home/robot/sound/Okey-dokey.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) TANK_DRIVER.on_for_seconds(left_speed=-50, right_speed=50,
#!/usr/bin/env micropython from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B LARGE_MOTOR = LargeMotor(address=OUTPUT_B) MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A) LARGE_MOTOR.on( speed=100, brake=False, block=False) for i in range(3): MEDIUM_MOTOR.on_for_seconds( speed=10, seconds=1, brake=False, block=True) MEDIUM_MOTOR.on_for_seconds( speed=-10, seconds=1, brake=False, block=True)
medMot = MediumMotor(OUTPUT_A) medMot.stop_action = 'hold' mySnd = Sound() medMot.on_to_position(30, 0) mySnd.speak("looking left and right") medMot.on_to_position(10, 90) time.sleep(0.5) medMot.on_to_position(10, -90) time.sleep(0.5) medMot.on_to_position(10, 0) mySnd.speak("spinning") medMot.on_for_seconds(80, 1) medMot.on_to_position(50, 0) mySnd.speak("fixed turn") for i in range(12): medMot.on_for_degrees(30, 30) time.sleep(1.0) medMot.stop() bttn = Button() mySnd.speak("Turns until button pressed") medMot.on(-20) while True: if bttn.enter == 1: break
display = Display() screenw = display.xres screenh = display.yres # hostMACAddress = '00:17:E9:B2:8A:AF' # The MAC address of a Bluetooth adapter on the server. The server might have multiple Bluetooth adapters. # Fetch BT MAC address automatically cmd = "hciconfig" device_id = "hci0" sp_result = subprocess.run(cmd, stdout=subprocess.PIPE, universal_newlines=True) hostMACAddress = sp_result.stdout.split("{}:".format(device_id))[1].split("BD Address: ")[1].split(" ")[0].strip() debug_print (hostMACAddress) print (hostMACAddress) # reset the kick motor to a known good position kickMotor.on_for_seconds(speed=-10, seconds=0.5) kickMotor.on_for_seconds(speed=10, seconds=2, brake=False) kickMotor.reset() kicking = False kick_power = 0 max_kick = 1000 port = 3 # port number is arbitrary, but must match between server and client backlog = 1 size = 1024 s = bluetooth.BluetoothSocket(bluetooth.RFCOMM) s.bind((hostMACAddress, port)) s.listen(backlog) while True: try: reset_console()
from time import sleep MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A) GO_MOTOR = LargeMotor(address=OUTPUT_B) STING_MOTOR = LargeMotor(address=OUTPUT_D) INFRARED_SENSOR = InfraredSensor(address=INPUT_4) SPEAKER = Sound() MEDIUM_MOTOR.on_for_seconds( speed=50, seconds=1, block=True, brake=True) MEDIUM_MOTOR.on_for_seconds( speed=-50, seconds=0.3, block=True, brake=True) STING_MOTOR.on_for_seconds( speed=40, seconds=1, brake=True, block=True)
from ev3dev2.sensor import Sensor, INPUT_1, INPUT_2, INPUT_3, INPUT_4 from ev3dev2.sensor.lego import TouchSensor from ev3dev2.motor import MoveTank, SpeedPercent, OUTPUT_A, OUTPUT_B, OUTPUT_D, MediumMotor motor = MediumMotor(OUTPUT_D) motor.on_for_seconds(100, 5)
TAIL_MOTOR.on( speed=-100, brake=False, block=False) CHEST_MOTOR.on_for_seconds( speed=-30, seconds=1, brake=True, block=True) sleep(2) MEDIUM_MOTOR.on_for_seconds( speed=-100, seconds=1, brake=True, block=True) sleep(1) else: LIGHTS.animate_flash( color=Leds.ORANGE, groups=(Leds.LEFT, Leds.RIGHT), block=False) TAIL_MOTOR.on( speed=100, brake=False, block=False)
class Dinor3x: FAST_WALK_SPEED = 80 NORMAL_WALK_SPEED = 40 SLOW_WALK_SPEED = 20 def __init__(self, jaw_motor_port: str = OUTPUT_A, left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): self.jaw_motor = MediumMotor(address=jaw_motor_port) self.left_motor = LargeMotor(address=left_motor_port) self.right_motor = LargeMotor(address=right_motor_port) self.tank_driver = MoveTank(left_motor_port=left_motor_port, right_motor_port=right_motor_port, motor_class=LargeMotor) self.steer_driver = MoveSteering(left_motor_port=left_motor_port, right_motor_port=right_motor_port, motor_class=LargeMotor) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.color_sensor = ColorSensor(address=color_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.speaker = Sound() self.roaring = False self.walk_speed = self.NORMAL_WALK_SPEED def roar_by_ir_beacon(self): """ Dinor3x roars when the Beacon button is pressed """ if self.ir_sensor.beacon(channel=self.ir_beacon_channel): self.roaring = True self.open_mouth() self.roar() elif self.roaring: self.roaring = False self.close_mouth() def change_speed_by_color(self): """ Dinor3x changes its speed when detecting some colors - Red: walk fast - Green: walk normally - White: walk slowly """ if self.color_sensor.color == ColorSensor.COLOR_RED: self.speaker.speak(text='RUN!', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.FAST_WALK_SPEED self.walk(speed=self.walk_speed) elif self.color_sensor.color == ColorSensor.COLOR_GREEN: self.speaker.speak(text='Normal', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.NORMAL_WALK_SPEED self.walk(speed=self.walk_speed) elif self.color_sensor.color == ColorSensor.COLOR_WHITE: self.speaker.speak(text='slow...', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.walk_speed = self.SLOW_WALK_SPEED self.walk(speed=self.walk_speed) def walk_by_ir_beacon(self): """ Dinor3x walks or turns according to instructions from the IR Beacon - 2 top/up buttons together: walk forward - 2 bottom/down buttons together: walk backward - Top Left / Red Up: turn left on the spot - Top Right / Blue Up: turn right on the spot - Bottom Left / Red Down: stop - Bottom Right / Blue Down: calibrate to make the legs straight """ # forward if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right: self.walk(speed=self.walk_speed) # backward elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): self.walk(speed=-self.walk_speed) # turn left on the spot elif self.ir_sensor.top_left(channel=self.ir_beacon_channel): self.turn(speed=self.walk_speed) # turn right on the spot elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.turn(speed=-self.walk_speed) # stop elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel): self.tank_driver.off(brake=True) # calibrate legs elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): self.calibrate_legs() def calibrate_legs(self): self.tank_driver.on(left_speed=10, right_speed=20) self.touch_sensor.wait_for_released() self.tank_driver.off(brake=True) self.left_motor.on(speed=40) self.touch_sensor.wait_for_pressed() self.left_motor.off(brake=True) self.left_motor.on_for_rotations(rotations=-0.2, speed=50, brake=True, block=True) self.right_motor.on(speed=40) self.touch_sensor.wait_for_pressed() self.right_motor.off(brake=True) self.right_motor.on_for_rotations(rotations=-0.2, speed=50, brake=True, block=True) self.left_motor.reset() self.right_motor.reset() def walk(self, speed: float = 100): self.calibrate_legs() self.steer_driver.on(steering=0, speed=-speed) def turn(self, speed: float = 100): self.calibrate_legs() if speed >= 0: self.left_motor.on_for_degrees(degrees=180, speed=speed, brake=True, block=True) else: self.right_motor.on_for_degrees(degrees=180, speed=-speed, brake=True, block=True) self.tank_driver.on(left_speed=speed, right_speed=-speed) def close_mouth(self): self.jaw_motor.on_for_seconds(speed=-20, seconds=1, brake=False, block=False) def open_mouth(self): self.jaw_motor.on_for_seconds(speed=20, seconds=1, block=False, brake=False) def roar(self): self.speaker.play_file(wav_file='T-rex roar.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.jaw_motor.on_for_degrees(speed=40, degrees=-60, block=True, brake=True) for i in range(12): self.jaw_motor.on_for_seconds(speed=-40, seconds=0.05, block=True, brake=True) self.jaw_motor.on_for_seconds(speed=40, seconds=0.05, block=True, brake=True) self.jaw_motor.on_for_seconds(speed=20, seconds=0.5, brake=False, block=True) def main(self): self.close_mouth() while True: self.roar_by_ir_beacon() self.change_speed_by_color() self.walk_by_ir_beacon()
#!/usr/bin/env python3 from ev3dev2.motor import LargeMotor, OUTPUT_D, OUTPUT_A from ev3dev2.motor import MediumMotor, OUTPUT_B from ev3dev2.motor import MediumMotor, MoveSteering, OUTPUT_A, OUTPUT_D from ev3dev2.motor import SpeedDPS, SpeedRPM, SpeedRPS, SpeedDPM from time import sleep lmA = LargeMotor(OUTPUT_A) lmD = LargeMotor(OUTPUT_D) SmB = MediumMotor(OUTPUT_B) steer_pair = MoveSteering(OUTPUT_D, OUTPUT_A) steer_pair.on_for_rotations(0,SpeedRPS(2),3) SmB.on_for_seconds(SpeedRPS(1),1) steer_pair.on_for_rotations(0,SpeedRPS(2),3) SmB.on_for_seconds(SpeedRPS(-1),1)
#!/usr/bin/env python3 from ev3dev2.motor import MediumMotor, MoveSteering, OUTPUT_A, OUTPUT_D, OUTPUT_B, OUTPUT_C, MoveTank from ev3dev2.motor import SpeedDPS, SpeedRPM, SpeedRPS, SpeedDPM from time import sleep tank_pair = MoveTank(OUTPUT_B, OUTPUT_C) UnD = MediumMotor(OUTPUT_D) LnR = MediumMotor(OUTPUT_A) tank_pair.on_for_rotations(right_speed=20, left_speed=40, rotations=2) tank_pair.on_for_rotations(left_speed=20, right_speed=40, rotations=2) UnD.on_for_seconds(speed=10, seconds=3) LnR.on_for_seconds(speed=-10, seconds=3) UnD.on_for_seconds(speed=-70, seconds=.5) LnR.on_for_seconds(speed=70, seconds=.5) #going forward while moving both motors UnD.on_for_seconds(speed=70, seconds=.5, block=False) LnR.on_for_seconds(speed=-70, seconds=.5, block=False) tank_pair.on_for_seconds(right_speed=30, left_speed=30, seconds=.5) #going backwards while restoring both motors UnD.on_for_seconds(speed=-10, seconds=3, block=False) LnR.on_for_seconds(speed=10, seconds=3, block=False) tank_pair.on_for_seconds(right_speed=-10, left_speed=-10, seconds=3)
class R3ptar: def __init__(self, turn_motor_port: str = OUTPUT_A, move_motor_port: str = OUTPUT_B, scare_motor_port: str = OUTPUT_D, touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): self.turn_motor = MediumMotor(address=turn_motor_port) self.move_motor = LargeMotor(address=move_motor_port) self.scare_motor = LargeMotor(address=scare_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.color_sensor = ColorSensor(address=color_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.noise = Sound() def keep_driving_by_ir_beacon(self, speed: float = 100): while True: if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.move_motor.on(speed=speed, brake=False, block=False) elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): self.move_motor.on(speed=-speed, brake=False, block=False) elif self.ir_sensor.top_left(channel=self.ir_beacon_channel): self.turn_motor.on(speed=-50, brake=False, block=False) self.move_motor.on(speed=speed, brake=False, block=False) elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.turn_motor.on(speed=50, brake=False, block=False) self.move_motor.on(speed=speed, brake=False, block=False) elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel): self.turn_motor.on(speed=-50, brake=False, block=False) self.move_motor.on(speed=-speed, brake=False, block=False) elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel): self.turn_motor.on(speed=50, brake=False, block=False) self.move_motor.on(speed=-speed, brake=False, block=False) else: self.turn_motor.off(brake=True) self.move_motor.off(brake=False) def bite_by_ir_beacon(self, speed: float = 100): while True: if self.ir_sensor.beacon(channel=self.ir_beacon_channel): self.scare_motor.on_for_seconds(speed=speed, seconds=1, brake=True, block=False) self.noise.play_file( wav_file='/home/robot/sound/Snake hiss.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.scare_motor.on_for_seconds(speed=-speed, seconds=1, brake=True, block=True) while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def run_away_if_chased(self): while True: if self.color_sensor.reflected_light_intensity > 30: self.move_motor.on_for_seconds(speed=50, seconds=4, brake=True, block=False) for i in range(2): self.turn_motor.on_for_seconds(speed=50, seconds=1, brake=False, block=True) self.turn_motor.on_for_seconds(speed=-50, seconds=1, brake=False, block=True) def bite_if_touched(self): while True: if self.touch_sensor.is_pressed: self.scare_motor.on_for_seconds(speed=100, seconds=1, brake=True, block=False) self.noise.play_file( wav_file='/home/robot/sound/Snake hiss.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) self.scare_motor.on_for_seconds(speed=-10, seconds=10, brake=True, block=True) def main(self, speed: float = 100): Thread(target=self.bite_by_ir_beacon).start() Thread(target=self.bite_if_touched).start() Thread(target=self.run_away_if_chased).start() self.keep_driving_by_ir_beacon(speed=speed)
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FLL Robot Framework project. -------------------------------------------------------------------------------- ''' from ev3dev2.motor import MediumMotor, LargeMotor, OUTPUT_B, OUTPUT_C largeMotor_Left = LargeMotor(OUTPUT_B) largeMotor_Right = LargeMotor(OUTPUT_C) mediumMotor = MediumMotor() # run these in parallel largeMotor_Left.on_for_seconds(speed=50, seconds=2, brake=True) largeMotor_Right.on_for_seconds(speed=50, seconds=4, brake=True) # run this after the previous have completed mediumMotor.on_for_seconds(speed=10, seconds=6)
class Spik3r: def __init__(self, claw_motor_port: str = OUTPUT_A, move_motor_port: str = OUTPUT_B, sting_motor_port: str = OUTPUT_D, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): self.claw_motor = MediumMotor(address=claw_motor_port) self.move_motor = LargeMotor(address=move_motor_port) self.sting_motor = LargeMotor(address=sting_motor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.ir_beacon_channel = ir_beacon_channel self.touch_sensor = TouchSensor(address=touch_sensor_port) self.speaker = Sound() def snap_claw_if_touched(self): if self.touch_sensor.is_pressed: self.claw_motor.on_for_seconds(speed=50, seconds=1, brake=True, block=True) self.claw_motor.on_for_seconds(speed=-50, seconds=0.3, brake=True, block=True) def move_by_ir_beacon(self): if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \ self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.move_motor.on(speed=100, block=False, brake=False) elif self.ir_sensor.top_right(channel=self.ir_beacon_channel): self.move_motor.on(speed=-100, brake=False, block=False) else: self.move_motor.off(brake=False) def sting_by_ir_beacon(self): if self.ir_sensor.beacon(channel=self.ir_beacon_channel): self.sting_motor.on_for_degrees(speed=-75, degrees=220, brake=True, block=False) self.speaker.play_file(wav_file='Blip 3.wav', volume=100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) self.sting_motor.on_for_seconds(speed=-100, seconds=1, brake=True, block=True) self.sting_motor.on_for_seconds(speed=40, seconds=1, brake=True, block=True) while self.ir_sensor.beacon(channel=self.ir_beacon_channel): pass def main(self): while True: self.snap_claw_if_touched() self.move_by_ir_beacon() self.sting_by_ir_beacon()
#!/usr/bin/env python3 from ev3dev2.motor import MediumMotor, OUTPUT_B from time import sleep mm = MediumMotor() mm.on(speed=50, brake=True, block=False) sleep(1) mm.off() sleep(1) mm.on_for_seconds(speed=50, seconds=2, brake=True, block=True) sleep(1) mm.on_for_rotations(50, 3) sleep(1) mm.on_for_degrees(50, 90) sleep(1) mm.on_to_position(50, 180) sleep(1)
#!/usr/bin/env micropython from ev3dev2.motor import MediumMotor, OUTPUT_A from ev3dev2.sensor import INPUT_4 from ev3dev2.sensor.lego import InfraredSensor from ev3dev2.sound import Sound MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A) IR_SENSOR = InfraredSensor(address=INPUT_4) SPEAKER = Sound() is_gripping = False MEDIUM_MOTOR.on_for_seconds(speed=50, seconds=1, brake=True, block=True) while True: if IR_SENSOR.beacon(channel=1): if is_gripping: MEDIUM_MOTOR.on_for_seconds(speed=100, seconds=2, brake=True, block=True) SPEAKER.play_file(wav_file='/home/robot/sound/Air release.wav', volume=100, play_type=Sound.PLAY_NO_WAIT_FOR_COMPLETE) is_gripping = False
from time import sleep MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A) TANK_DRIVER = MoveTank(left_motor_port=OUTPUT_B, right_motor_port=OUTPUT_C, motor_class=LargeMotor) STEER_DRIVER = MoveSteering(left_motor_port=OUTPUT_B, right_motor_port=OUTPUT_C, motor_class=LargeMotor) IR_SENSOR = InfraredSensor(address=INPUT_4) SCREEN = Display() SPEAKER = Sound() MEDIUM_MOTOR.on_for_seconds(speed=-20, seconds=1, block=True, brake=True) while True: if IR_SENSOR.proximity < 25: SCREEN.image_filename(filename='/home/robot/image/Pinch right.bmp', clear_screen=True) SCREEN.update() STEER_DRIVER.on_for_degrees(steering=-100, speed=75, degrees=1000, brake=True, block=True) SCREEN.image_filename(filename='/home/robot/image/Angry.bmp', clear_screen=True)