第一部分 编程基础 | 第6章:我是一个探险家
在本章中,我们将给马里奥装上传感器。利用可活动连接将传感器固定在马里奥身上,能够根据不同的任务调整传感器的方向。你讲学习如何让马里奥读取传感器的检测结果,以及如果播放声音数据库中的声音或者你自己录制的声音。
乐高BOOST传感器

乐高BOOST传感器(如上图所示)能够探测颜色和距离,具体功能如下:
(1)探测距离,返回结果0(最近)到10(最远)。这个返回值没有单位,并不是代表0到10厘米或其他单位。
(2)探测前方是否有物体,并探测其颜色(可以探测黑、绿、蓝、黄、红、白6种颜色)。
(3)探测一个物体反射的光线强度,返回值从0(最暗)到10(最亮)。
(4)显示红、白、蓝、绿灯光。
给马里奥安装传感器

按照上面的步骤把传感器安装在马里奥身上,并将插头接到集线器端口C上。
利用传感器模块探测距离
下面这些模块可以探测物体距离:
模块图标 | 分类 | 说明 |
![]() | 传感器模块 | 当传感器检测到的距离小于设定距离时,触发后续程序执行。 距离返回值范围0到10,数值越大表示距离越远。 |
模块图标 | 分类 | 说明 |
![]() | 传感器模块 | 等待传感器检测到的距离小于设定距离后,执行后续程序。 距离返回值范围0到10,数值越大表示距离越远。 |
模块图标 | 分类 | 说明 |
![]() | 传感器模块 | 得到传感器当前检测到的距离。 距离返回值范围0到10,数值越大表示距离越远。 |
躲避障碍
在第3章中我们让马里奥直线运动指定的时间,如果我们想让马里奥探测一个房间怎么办?比如我们希望马里奥沿直线运动,遇到障碍物能够自动躲避,然后继续重复上面的步骤。想要实现这样的功能,思路是这样的:
- 开始无限循环
- 缓慢向前直线移动
- 等待传感器检测到的距离小于等于5
- 回退并转向
- 返回无限循环并重复执行
下面让我们尝试将上面的思路用BOOST编程实现,结果如下:

程序首先利用一个驱动基底转向移动模块来控制机器人以20的速度向前移动(方向参数设置为0),接下来我们用到传感器模块里面的距离等待模块,该模块是程序暂停下来并且查询:传感器探测到的距离是否小于等于5?如果得到的答案是,那么程序将会继续往下执行。也就是说只有距离等待模块检测到的距离小于等于5后,程序才会往下执行。此后,我们用一个定距基底移动转向模块让机器人回退并转向,以实现避障功能。
当写好上面的程序后,你可以启动程序并观察马里奥的行动。你还可以修改程序中距离等待模块的参数,来看看马里奥的行动有何变化。比如将距离等待模块的参数设置为9,那么马里奥将会更早的躲避障碍。如果将距离等待模块的参数设置为1,可能会有风险,因为马里奥可能在执行避障动作前已经撞上障碍物了。
触发动作
可以利用距离触发模块,来使马里奥对传感器指定的距离读数做出响应。 距离触发模块看起来根开始模块类似,他能够在传感器探测到的距离小于等于设定值时触发后面的程序执行。下面让我们来测试一下。

测试程序如上图所示。把你的手靠近马里奥的传感器,你将看到距离触发模块会闪烁一下,然后马里奥会根据后面的程序执行。如果你继续将手靠近,上面的程序会重复执行,直到你的手离传感器的距离大于5为止。
触发冲突
如果不同的模块或程序序列试图做出不同的控制指令,那么可能会产生触发冲突。让我们来做个试验。首先写好下面的程序。

程序开始后,如果传感器探测到的距离大于5,那么两个程序序列都不会被触发。当传感器探测到的距离小于等于5但大于2时,序列1会被触发。如果探测到的距离小于等于2,由于两个序列的触发条件都得到了满足,那么两个程序序列会被同时触发(如下图所示),此时马里奥的行为会比较奇怪,有可能执行序列1后面的程序,也有可能执行序列2后面的程序,具有不确定性。因此,为了避免触发冲突,应避免在同一个画布上设置两个距离触发模块。

播放声音
让你的机器人播放声音很简单(实际上是利用你手里的手机或平板电脑等智能设备来播放声音,因为BOOST集线器中并没有喇叭)。利用声音模块可以播放声音库中超过500种的声音。此外还可以播放自己录制的声音。声音模块在紫色调色板下面。
声音模块及其功能介绍参见 https://www.legofind.com/archives/1594
测试声音效果
在这一部分中,我们将展示音高值、失真值和回声值得效果,以便让你对这些音效参数有一个初步的认识。

按照上图写好程序,然后点击开始模块听一下声音的效果,随后分别尝试调整滤音器音高模块参数、滤音器失真值模块参数、滤音器回声值模块参数,听一下声音的效果有何变化。在每个程序序列前放置一个滤音器重置模块,是为了每次只让一个滤音器工作。
播放声音模块将不适用滤音器来播放声音,用滤音器播放声音模块将使用滤音器播放声音。
触发声音

下面我们来让马里奥用播放声音的方式来响应距离传感器检测值的变化。程序如上图所示。当传感器检测到的距离值小于等于5时,将播放声音。你可以在播放声音模块里选择需要的声音类型。
程序写好后,可以测试程序的效果。将你的手靠近传感器,你将会听到声音被触发,如果你的手不拿开,声音将持续循环播放。你还可以看看BOOST应用程序的声音库里都有哪些声音。
录制声音
除了能够播放声音库中的声音,你还可以录制自己的声音,按照下面的步骤,可以实现当有物体靠近时,马里奥将会进行自我介绍。
(1)点击紫色的带有麦克风图标的调色板,这是自定义声音调色板。如下图所示。

(2)点击带有+号和麦克风图标的按钮,打开声音录制界面,如下图所示。

(3)点击录制按钮,然后说:“我是马里奥”。当你录制完成后,点击停止按钮结束录制。
(4)点击播放按钮可以听一下录制效果,如果不满意,可以重新录制。
(5)如果对录制的声音满意,你还可以拖动剪辑手柄,来把开头和结尾处多余的声音剪辑掉。
(6)你还可以利用最下面的几个音效按钮来改变录制声音的效果,这几个按钮的说明如下:
■ 原声:播放原始录制的声音,不带任何音效。
■ 高音和低音按钮可以更改声音的音高。
■ 机器人按钮可以让声音听起来像机器人的声音。
■ 减速按钮可以让声音速度变慢,同时音高变低。
(7)电机高音按钮,调高声音的音高。
(8)点击更换图标按钮来给你的声音选择一个喜欢的图标。
(9)点击保存按钮,并返回编程界面。然后利用你录制的声音模块编程如下(记得删除原来的程序)。

(10)点击距离触发模块,让程序开始执行。此时,将你的手靠近传感器,程序将播放刚才你录制的声音。
编辑和删除自定义声音
如果你想修改或删除自定义声音模块,你只需要在调色板中点击它即可。点击后,将会弹出自定义声音录制界面,你可以对其进行修改。如果你想删除该模块,你可以点击模块上的垃圾桶图标。需要注意的是,如果你的画布上有程序正在使用这个自定义声音模块,此时该模块是无法在调色板中被删除的(这时候垃圾桶图标会显示橙色,表示不可删除),你只有将程序中正在使用的该模块全部移除,才能删除该模块,此时垃圾桶图标会变成红色,表示可以删除。点击垃圾桶图标,其会变成绿色,再次点击,完成删除。
