• Index

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

控制小车

Last updated: ... / Reads: 1381625 Edit

上一节我们已经搭好了开发环境,接下来就可以写Python程序来控制小车了。首先用EV3主机、大型伺服马达和超声波传感器搭建一个小车:

parts

可以自由发挥,我的小车完成后长这样:

car

下一步,我们用程序控制小车。首先根据马达和传感器接入的位置初始化如下:

motor = Motor(Port.B) # 接在B口
ultrasonic = UltrasonicSensor(Port.S4) # 接在4号口

然后,设置初始速度0表示静止:

speed = 0

通过传入1-10分别表示加速、减速和停止:

def setSpeed(acc):
    global speed
    if acc < 0:
        speed = max(0, speed - 1)
    elif acc > 0:
        speed = min(3, speed + 1)
    else:
        speed = 0
    if speed > 0:
        motor.run(speed * 90) # 设置每秒转N个90度
    else:
        motor.stop()

因为小车的初始速度为0,我们可以设定响应右键加速,左键减速,中键停止,上键停止并退出,用一个无限循环实现功能如下:

while True:
    if not any(brick.buttons()): # 没有按任何按键
        wait(10)
    else:
        if Button.LEFT in brick.buttons():
            setSpeed(-1)
        elif Button.RIGHT in brick.buttons():
            setSpeed(1)
        elif Button.CENTER in brick.buttons():
            setSpeed(0)
        elif Button.UP in brick.buttons():
            setSpeed(0)
            break
        wait(500)
    if ultrasonic.distance() < 200: # 检测到障碍物不足200毫米时 
        setSpeed(0)

因为EV3的控制API并没有提供回调,所以只能通过无限循环主动轮询。使用无限循环时需要注意,务必在每次循环内部通过wait()暂停若干毫秒,否则很容易耗尽CPU。最后,我们通过超声波传感器返回的距离判断是否自动停车。

加上声光特效后,来看看实际效果:

EV3的Python接口全部在pybricks包中,要查看完整的API,请在VS Code新建EV3工程时选择“Open user guide and examples”,即可在本地浏览器打开API文档。

参考源码

smallcar


Comments

Make a comment

  • Index