EV3 MicroPython 指南

EV3 MicroPython 指南 > 扩展集(45544+45560)程序 > 爬楼梯机
扩展集(45544+45560)程序

爬楼梯机

此示例项目使爬楼梯者爬上你使用 EV3 砖块按钮选择的多个台阶。欲了解更多详情,请务必查看下面节目中的评论。

拼搭说明

在本站可查找扩展套装模型的所有拼搭说明。

爬楼梯机

图 32 小狗

示例程序

#!/usr/bin/env pybricks-micropython

"""
Example LEGO® MINDSTORMS® EV3 Stair Climber Program
---------------------------------------------------

This program requires LEGO® EV3 MicroPython v2.0.
Download: https://education.lego.com/en-us/support/mindstorms-ev3/python-for-ev3

Building instructions can be found at:
https://education.lego.com/en-us/support/mindstorms-ev3/building-instructions#building-expansion
"""

from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor, GyroSensor, TouchSensor
from pybricks.parameters import Port, Direction, Button
from pybricks.tools import wait
from pybricks.media.ev3dev import Font, SoundFile

# Initialize the EV3 brick.
ev3 = EV3Brick()

# Configure the front motor, which drives the front wheels.  Set the
# motor direction to counterclockwise, so that positive speed values
# make the robot move forward.
front_motor = Motor(Port.B, Direction.COUNTERCLOCKWISE)

# Configure the rear motor, which drives the rear wheels.  Set the motor
# direction to counterclockwise, so that positive speed values make the
# robot move forward.
rear_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)

# Configure the lift motor, which lifts the rear structure.  It has an
# 8-tooth, a 24-tooth, and a 40-tooth gear connected to it.  Set the
# motor direction to counterclockwise, so that positive speed values
# make the rear structure move upward.
lift_motor = Motor(Port.D, Direction.COUNTERCLOCKWISE, [8, 24, 40])

# Set up the Gyro Sensor.  It is used to measure the angle of the robot.
# Keep the Gyro Sensor and EV3 steady when connecting the cable and
# during start-up of the EV3.
gyro_sensor = GyroSensor(Port.S2)

# Set up the Touch Sensor.  It is used to detect when the rear
# structure has moved to its maximum position.
touch_sensor = TouchSensor(Port.S3)

# Using a very large font
big_font = Font(size=24)
ev3.screen.set_font(big_font)

# Initialize the rear structure.  In order to move the structure both
# the rear motor and lift motor must run in sync.  First, the rear
# motor moves the robot backward while the lift motor moves the rear
# structure up until the Touch Sensor is pressed.  Second, the rear
# motor moves the robot forward while the lift motor moves the rear
# structure down for a set amount of degrees to move to its starting
# position.  Finally, the lift motor resets the angle to "0."  This
# means that when it moves to "0" later on, it returns to this starting
# position.
rear_motor.dc(-20)
lift_motor.dc(100)
while not touch_sensor.pressed():
    wait(10)
lift_motor.dc(-100)
rear_motor.dc(40)
wait(50)
lift_motor.run_angle(-145, 510)
rear_motor.hold()
lift_motor.run_angle(-30, 44)
lift_motor.reset_angle(0)
gyro_sensor.reset_angle(0)

# Initialize the steps variable to 0.
steps = 0

# This loop checks the Brick Buttons to update and display the steps
# variable.  It repeats until the Center Button is pressed.
while True:
    # Display the steps variable on the screen.
    ev3.screen.clear()
    ev3.screen.draw_text(70, 50, steps)
    wait(200)

    # Wait until any Brick Button is pressed.
    while not any(ev3.buttons.pressed()):
        wait(10)

    # Check whether Up Button is pressed, and increase the steps
    # variable by 1 if it is.
    if Button.UP in ev3.buttons.pressed():
        steps += 1

    # Check whether Down Button is pressed, and decrease the steps
    # variable by 1 if it is.
    elif Button.DOWN in ev3.buttons.pressed():
        steps -= 1
        # Make sure the steps variable is not a negative number.
        if steps < 0:
            steps = 0

    # If the Center Button is pressed, break out of the loop.
    elif Button.CENTER in ev3.buttons.pressed():
        break

# This loop climbs the stairs for the amount of steps specified in the
# steps variable.  It repeats until the steps variable is 0.
while steps > 0:

    # Run the front and rear motors so the robot moves forward.
    front_motor.dc(100)
    rear_motor.dc(90)

    # Keep moving until the robot is at an angle of at least 10 degrees.
    while gyro_sensor.angle() < 10:
        wait(10)

    # Run the lift motor to move the rear structure up, while
    # simultaneously running the front and rear motors.
    lift_motor.dc(90)
    front_motor.dc(30)
    rear_motor.dc(15)

    # Keep moving the rear structure up until the Touch Sensor is
    # pressed, or the robot is at an angle of less than -3 degrees.
    while not touch_sensor.pressed():
        if gyro_sensor.angle() < -3:
            break
        wait(10)
    lift_motor.hold()

    # Move the robot forward for some time using the front and rear
    # motors.
    front_motor.dc(60)
    rear_motor.dc(100)
    wait(1300)

    # Play a sound and pull the rear structure up so it gets back to
    # its starting position.  Keep moving forward slowly by
    # simultaneously running the front and rear motors.
    ev3.speaker.play_file(SoundFile.AIR_RELEASE)
    front_motor.dc(30)
    rear_motor.dc(30)
    lift_motor.run_target(160, 0)

    # Update the "steps" variable and display it on the screen.
    steps -= 1
    ev3.screen.clear()
    ev3.screen.draw_text(70, 50, steps)

# Settle the robot at the top of a step and end the program.
front_motor.dc(100)
rear_motor.dc(90)
wait(2000)
front_motor.hold()
rear_motor.hold()
wait(5000)