学习目标
本次课程我们主要学习如何通过Python编程,实现microbit手柄控制蠕动小车。
蠕动小车行走原理:
通过调整1#栓连接卡扣棘轮来改变前轮摩擦力,从而控制小车的前进方向。当1#栓连接位于24齿齿轮前侧时,前轮只能向前运动,所以小车蠕动向前;当1#栓连接在24齿齿轮后侧时,前轮只能向后运动,小车蠕动向后。
积木搭建
积木搭建步骤详见资料中【组装课程】--【双足机器人】的安装图纸或者积木安装画册。
!特别注意事项:
将两个1#栓连接置于24齿齿轮的前面,蠕动小车才能实现前进。
将两个1#栓连接置于24齿齿轮的后面,蠕动小车才能实现后退。
【两个1#栓连接置于24齿齿轮的前面】 【两个1#栓连接置于24齿齿轮的后面】
电机接线
积木电机接线插入Super:bit扩展板M1接口,黑色接线插入靠近电池的一侧。
如下图所示:
代码与解析
本次课程的程序请详见.py文件。
首先从microbit导入本节课需要用到的库:superbit库专用于superbit扩展板;neopixel用于控制RGB灯;radio用于micro:bit的无线通讯功能。
np = neopixel.NeoPixel(pin12, 4):RGB灯初始化设置,一共有4个RGB灯,连接在microbit主板的P12引脚上面(可查询硬件接口手册得知);
display.show(Image.HEART):在microbit点阵上显示爱心图案;
microbit.sleep(1000):延时1秒;
radio.on():打开无线功能,因为无线功能比较耗电和占内存,所以默认关闭的,也可以使用radio.off()关闭无线功能;
radio.config(group=1):配置无线组=1,这样做其他设置了无线组=1的microbit设备就可以互相通讯了,默认是0,可以选择的组为0~255,设置的组值需要与手柄设置的一致,否则无法正常通讯;
mode = 1:将变量mode初始化设为1。
...
主循环中判断接收到手柄发送的命令,控制双足机器人的运动状态以及RGB灯的颜色。
incoming = radio.receive():接收无线传输过来的数据,并且保存到incoming变量中;如果incoming是‘up’则让电机反转(机器人前进),如果incoming是‘up’则让电机正转(机器人后退),incoming是‘stop’并且mode = 1则让电机停止转动;
如果incoming是‘R’则车身RGB亮红灯,‘G’则让车身RGB亮绿灯,‘B’让车身RGB亮蓝灯,‘Y’则车身RGB亮黄灯。
切换当前的模式。
!注意:
incoming的值需要与手柄发送的值对应,只有相同的值才可以接收并执行命令。
手柄的程序请详见.py文件。
首先从microbit导入本节课需要用到的库:ghanle库专用于micro:bit手; radio用于micro:bit的无线通讯功能。
display.show(Image.HEART):在microbit点阵上显示爱心图案;
radio.on():打开无线功能,因为无线功能比较耗电和占内存,所以默认关闭的,也可以使用radio.off()关闭无线功能;
radio.config(group=1):配置无线组=1,这样做其他设置了无线组=1的microbit设备就可以互相通讯了,默认是0,可以选择的组为0~255,设置的组值需要与手柄设置的一致,否则无法正常通讯;
如果检测ghandle.rocker(ghandle.up)为True,则表示手柄的摇杆往上推,让无线发送‘up’命令,并且显示一个向上的图标;
如果检测ghandle.rocker(ghandle.down)为True,则表示手柄的摇杆往下推,让无线发送‘down’命令,并且显示一个向下的图标;
如果检测ghandle.rocker(ghandle.left)为True,则表示手柄的摇杆往左推,让无线发送‘left’命令,并且显示一个向左的图标;
如果检测ghandle.rocker(ghandle.right)为True,则表示手柄的摇杆往右推,让无线发送‘right’命令,并且显示一个向右的图标;
如果检测ghandle.rocker(ghandle. pressed)为True,则表示手柄的摇杆被按下,让无线发送‘pressed’命令,并且显示‘X’图标;
遥控没有操作发送‘stop’并清除显示;
特殊处理:
当摇杆被按下时,我们使用一个变量rocker_key,来确保只发送一次turn_off的命令。和双足机器人的程序相对应,改变一次mode的值。
接下来检测按键,对应B1(红色),B2(绿色),B3(蓝色),B4(黄色)发送R’,‘G’,‘B’,‘Y’命令。
编写及下载程序
1.打开Mu软件,在编辑窗口输入代码。注意!所有的英文与符号都应该在英文状态下输入,使用Tab键(制表键)进行缩进,最后一行以空白程序结尾。
2.点击大拇指‘Check’按钮,检查一下我们的代码是否有错误。如果某一行出现光标或者下划线,表示语法错误,请检查并修改,如果没有错误,左下方会提示检测没有问题。
3.点击‘REPL’按钮,检查是否下载了superbit库,如果没有请参考【课前准备】-->【Python编程环境介绍】-->【添加Superbit Python库文件】。
4.程序编写完成之后,用microUSB数据线连接电脑和microbit主板,请点击‘Flash’按钮,将程序下载到micro:bit主板上。(需要再次点击‘REPL’按钮,关闭导入库文件功能,才可以正常下载程序)。
5.如果出现下载失败的问题,请确认microbit是否通过microUSB数据线与电脑正常连接,并且已经导入了Superbit的Python库。
实验现象
将蠕动小车的程序.py文件需要下载到蠕动小车的micro:bit主板上。打开蠕动小车的电源开关,我们可以看到micro:bit点阵上显示一个爱心图案;
将手柄的程序.py文件需要下载到手柄的micro:bit主板上。打开手柄的电源开关,我们可以看到micro:bit点阵上会初始化显示一个爱心图案,然后会清除显示,表示手柄处于默认状态没有发送任何数据。
两者会自动完成配对,接下来我们就可以开始遥控蠕动小车了。
手柄功能如下所示。
手柄摇杆控制:
手柄和蠕动小车配对成功之后,我们可以看到蠕动小车的micro:bit点阵上显示数字1,表示此时处于模式1。
在模式1的情况下:
l 摇杆前推控制蠕动小车运动,松开手即停止;
l 红色按键按下,点亮红色RGB灯;
l 绿色按键按下,点亮绿色RGB灯;
l 黄色按键按下,点亮黄色RGB灯;
l 蓝色按键按下,点亮蓝色RGB灯。
我们可以按下摇杆,切换到模式2,此时我们可以看到蠕动小车的micro:bit点阵上显示数字2,表示处于模式2。
在模式2的情况下:
l 摇杆前推控制蠕动小车运动,松开手依然保持运动;
l 红色按键按下,点亮红色RGB灯,停止正在运动的蠕动小车;
l 绿色按键按下,点亮绿色RGB灯;
l 黄色按键按下,点亮黄色RGB灯;
l 蓝色按键按下,点亮蓝色RGB灯。
每次按下摇杆,都会在模式1和模式2之间来回切换,同时RGB灯会熄灭。