在本章中,你将学习如何利用声音传感器模块,来实现利用你的声音或者拍手声来控制机器人。随后,你还将学习利用倾斜传感器模块来控制机器人移动。最后,我们来学习如何让马里奥念台词甚至是讲笑话。
声音传感器模块
由于LEGO BOOST机器人没有内置麦克风等声音设备,LEGO BOOST应用程序中实际上是利用应用程序所在的智能设备(手机、平板电脑等)来实现声音探测的。
你可以利用声音传感器模块来检测声音变化并让机器人做出反应。声音传感器模块说明详见:
下面让我们来编写一个程序,让你的机器人对声音做出反应。
拍手控制机器人程序
下面这个程序能够让你利用拍手动作来控制机器人运动或停止,实际上除了拍手声以外,任何其他声音也都可以,比如你可以说“开始”和“停止”。事实上,LEGO BOOST 应用程序并不能进行语音识别,本程序中仅是对声音(可以是任何声音)进行识别。

在上面的程序中,一个足够大的声音,能够触发第一个声音触发模块(上图编号1),并执行其附属的程序模块,其中编号为2的电机模块能够让马里奥以10的速度直线前进。此后我们加了一个0.2秒的延时模块,是为了避免刚才的声音同时触发后面的声音触发模块(编号4)。当编号为4的声音触发模块检测到声音时,将触发后续模块执行,使马里奥停止下来。最后的一个0.2秒的延时模块同样是为了避免同一个声音同时触发两个声音触发模块。
拍手导航
现在,让我们利用声音来让马里奥在执行和拐弯之间切换。比如,在检测到声音之前,马里奥保持直行。在检测到一个声音时,进行转向。此后检测到下一个声音后,停止转向并保持直行,如此往复循环。
按照上面的思路,编程如下:

在上面的程序中,最左侧的电机模块会让马里奥持续以10的速度前进,直到一个大于8的声音被检测到。此后,第二个绿色电机模块会让马里奥后退转向,直到第二个大于8的声音被检测到。此后程序循环执行,马里奥继续沿直线前进。如此往复循环。两个0.2秒的延时模块是为了避免同一个声音触发两个声音触发模块。
倾角传感器模块
乐高BOOST集线器还有一个非常酷的功能是其带有倾角传感器,能够检测到本身的方向和倾斜,并能返回X轴方向和Y轴方向的倾斜角度值,如下图所示。

关于几个倾角传感器模块的见:BOOST传感器模块说明
其中关于集线器的方向选项,共有6种,如下图所示。

嘿!放我下来!
下面我们来利用倾角传感器模块,实现以下功能:当我们从地上拿起马里奥时,其电机停止转动,当我们把马里奥放回到地上时,电机恢复转动。下面是伪代码:
开始无限循环
- 直线运动
- 等待直到集线器Y轴倾角大于10(意味着机器人被拿起)
- 停止电机
- 等待直到集线器Y轴倾角等于0(意味着机器人被放下)
返回无限循环开始处
下面就是将伪代码实现为具体程序模块,如下图所示。

在上面的程序种,在无限循环(编号1)内部先用一个电机模块(编号2)让马里奥直行运动,随后用一个“真”等待模块(编号3),来等待判断条件集线器Y轴倾角大于10度变为真。此后利用编号4的电机停止模块停止电机运行,直到编号5的“真”等待模块检测到集线器Y轴倾角的值变为0度。
小知识:
BOOST集线器中的倾角传感器,实际上是一个双轴加速计,可以沿两个轴向测量物体的加速度值或速度变化。当物体静止防止时,加速度计会测量重力场强度,也就是我们熟知的重力加速度。利用加速度值,加速度计能够计算集线器的方向。我们常用的手机或平板电脑等智能设备也是利用同样的原理和传感器来测量其屏幕的倾斜角度。
加速度计还被用在汽车安全气囊等其他领域。人类的身体中也会用到加速度值,我们的耳朵中的特定器官可以测量加速度值,从而使我们能够保持平衡。
对突然地击打动作进行检测
当BOOST集线器被物体撞击时,比如拍一下或戳一下,由于突出获得的加速度,集线器X轴和Y轴的角度值会发生剧烈的变化。我们可以利用这个特性来让机器人对突然的击打动作做出反应。下图给出了当你击打BOOST集线器时,其Y轴倾角值的变化情况。

上述原理实现的前提是,BOOST集线器要保持静止,并且与撞击方向保持严格水平关系。当从正面撞击集线器时,会得到一个正向的尖峰曲线,当从背面撞击时,会得到一个负向的尖峰曲线。
下面,我们来编程实现对撞击动作的检测,如下图所示。

将马里奥完全水平放置,以使Y轴倾角检测值为0(你可以单独放置一个Y轴倾角指示器模块,来观察Y轴倾角值的实时变化)。当你击打马里奥时,Y轴的倾角值将不为0,从而通过“真”等待模块触发后续程序执行。
当Y轴倾角返回值大于0时,说明是马里奥是被在前方撞击的;而当Y轴倾角返回值小于0时, 说明是马里奥是被在后方撞击的。利用一个选择模块来针对不同方向的撞击做出不同的反应:针对前面的撞击,让马里奥以40的速度前进0.5秒钟,针对后侧的撞击,让马里奥以40的速度后退0.5秒钟。在程序的最后有一个1秒钟的延时模块,是为了避免马里奥移动结束期间因为刹车导致的倾角变化重新触发程序开始。
灯光模块
乐高BOOST机器人可以改变集线器RGB LED灯光(红-绿-蓝 发光二极管)和传感器LED灯光的颜色。乐高BOOST灯光模块详细说明参见:https://www.legofind.com/archives/1594
随机动作
如果想要让你的机器人变得更有趣,可以考虑让他们产生随机的行为。为了实现上述功能,你需要利用随机数模块,然后根据产生的不同随机数,来执行不同的程序。随机数模块如下所示。
模块图标 | 分类 | 说明 |
![]() |
数据操作模块 | 返回两个设定值之间的一个随机数 |
示例 | ![]() | |
示例说明:将局部变量b设置为一个1到10之间的随机数。 |
随机数模块将根据你设定的上下限值来随机产生一个介于限值之间的数字,比如你设置下限为1,上限为10,那么将会随机返回一个介于1至10之间的数字(包括1和10在内)。上线限制为整数,如果你将其设置为小数,程序将进行四舍五入。比如,你设置下限为1.5,上限为4.4,那么程序为范围一个介于2至4的数字,也就是2,3,4中的其中一个。
注意:如果你设置的下限值大于上限制,程序将默认将其进行交换后反馈对应的结果。
思考一下,如果想要让机器人在两个状态中随机选择,该如何编程实现?方法有很多,下面是两种实现方法供参考。

随机颜色及随机声音
你可以将随机数模块应用到灯光模块或声音模块中,这时你会发现随机数模块中的数字会被一些图标所替代。在BOOST应用程序中,每种颜色、声音以及方向图标都有对应的数字编号,虽然你看不到,但是程序可以根据这个数字编号来进行识别。
下面我们来利用随机数模块,让BOOST集线器根据自身的不同方向,来随机显示LED灯管颜色并随机播放声音。程序如下图所示。

启动平行序列
到目前为止,我们的程序都只有一个序列或程序流。这些程序都由一个开始模块启动,并依次执行其后面的程序模块。乐高BOOST应用程序允许你在同一时刻运行多个程序序列,我们称之为多任务处理。
实现多任务处理的方法之一,就是在画布上放置多个开始模块,然后利用右侧绿色圆形的项目启动按钮来启动所有程序序列。通常当所有模块都执行完毕后,程序将结束。
此外,还可以利用流程模块来实现多任务处理。此外还可以利用流程模块来结束程序。具体如下所示。

机器人版敲门笑话(Knock Knock Joke)
下面我们利用目前已经学到的内容来创作一个机器人版的敲门笑话(注:敲门笑话Knock Knock Joke是美国非常有名的一种笑话,具体各位感兴趣可自行搜索)。下面是我们想要实现的机器人版敲门笑话的内容:
- 你:“马里奥,给我讲个笑话!”
- 马里奥: “ 敲门!敲门!”
- 你: “ 是谁呀?”
- 马里奥:“一个叫马里奥的会将笑话的机器人!”
- 你:“一个叫马。。。。”
- 马里奥:“啊巴拉巴拉巴拉巴拉巴拉巴拉 !”(疯狂移动,嘲笑你)
- 你很生气并一把抓起马里奥要阻止他,马里奥停止移动并放屁。
下面是编程实现。

在上面的程序中你需要自己录制三段自定义声音,关于声音录制我们已经在前面的章节中讲过,详见: