基于micro:bit与REKA:BIT的声控泡泡机:从传感器到执行器的创客实践
1. 项目概述:当声音遇见泡泡,一个创客的趣味实验
几年前,当我第一次把micro:bit这个小巧的开发板交到学生手里时,他们眼中闪烁的好奇光芒让我至今难忘。从点亮一颗LED到让舵机转动,每一个简单的交互背后,都是逻辑思维与物理世界的一次握手。今天,我想分享的这个项目——基于REKA:BIT与micro:bit的声控泡泡机,正是这种“握手”的一次生动演绎。它不仅仅是一个玩具,更是一个融合了声音识别、电机控制和即时反馈的微型嵌入式系统原型。
这个项目的核心逻辑非常直观:我们通过micro:bit内置的麦克风(声音传感器)来捕捉环境音量,当检测到足够大的声音(比如你拍手或吹气)时,程序会触发两个动作。第一,控制一个舵机摆动,带动粘附其上的泡泡圈浸入泡泡液中再抬起;第二,同时启动一个直流电机驱动的风扇,将浸过泡泡液的圈圈吹出漫天飞舞的泡泡。整个过程从感知、决策到执行,在几百毫秒内完成,实现了“声音指令,泡泡响应”的互动效果。
它非常适合刚接触硬件编程的爱好者、STEAM教育工作者以及想要给孩子一个周末亲子科技项目的家长。你不需要深厚的电子工程背景,因为REKA:BIT扩展板将复杂的电路连接简化成了“插拔式”操作,而MakeCode图形化编程环境则让代码逻辑像搭积木一样清晰可见。通过完成它,你将直观理解传感器、控制器和执行器是如何协同工作的,这是所有物联网和智能硬件项目最基础的模型。
2. 核心硬件选型与功能解析
2.1 控制核心:micro:bit与REKA:BIT扩展板搭档的优势
项目的“大脑”是BBC推出的micro:bit v2开发板。相较于第一代,v2版本集成了一个重要的传感器:麦克风。这正是我们实现声控的关键,它使得我们无需外接任何声音模块,极大地简化了硬件结构。micro:bit本身还包含加速度计、磁力计、温度传感器、蓝牙以及一个5x5的LED点阵,资源相当丰富。
然而,micro:bit的板载GPIO引脚是边缘金手指形式,直接连接电机等大电流设备既不方便也不安全。这时,REKA:BIT扩展板的价值就凸显出来了。这块由Cytron Technologies设计的扩展板,可以看作是为micro:bit量身定做的“多功能底座”。它解决了几个核心痛点:
- 供电与电机驱动一体化:REKA:BIT板载了双路电机驱动芯片,可以直接驱动两个直流电机(如我们的风扇电机)和最多四个舵机。这意味着你不需要再额外购买和连接笨重的电机驱动模块,所有动力输出接口都整齐地排列在板子上。
- 接口防呆与保护:它将micro:bit的引脚转换为标准的3针(舵机)和2针(电机)插座,采用防反插设计,极大降低了接线错误烧毁板子的风险。同时,板载了必要的保护电路。
- 便捷供电:它有一个标准的DC插座和USB Type-C接口,可以使用常见的5V电源适配器、移动电源(Powerbank)或通过USB供电,为整个系统(包括micro:bit和所有电机)提供稳定电力。
这种组合使得项目重心可以完全放在逻辑实现和结构搭建上,而不是纠缠于繁琐的电路焊接和电源管理,特别适合快速原型制作和教育场景。
2.2 执行机构:舵机与直流电机的分工
项目的“手脚”由两个执行器构成:舵机和直流电机。它们承担着截然不同的任务。
舵机(Servo Motor):我们选用的是最常见的9克微型舵机。它的特点是可以精确控制旋转角度(通常0-180度)。在本项目中,它的职责是带动泡泡圈完成“蘸取”动作。我通过程序将它设置为在两个固定角度间摆动:一个角度是泡泡圈浸入泡泡液面以下,另一个角度是抬起至风扇正前方。舵机的扭矩虽然不大,但带动一个轻质的泡泡圈和冰棒棍结构绰绰有余。选择舵机而非普通直流电机来实现这个动作,是因为我们需要精确的位置控制,这是直流电机开环控制难以实现的。
直流电机与螺旋桨(Shaft Motor with Propeller):这里使用的是一个小型直流减速电机,配合一个四叶56mm的螺旋桨。它的任务很简单:提供持续、稳定的气流。当声音触发后,它与舵机同步启动,吹向刚刚蘸好泡泡液的圈圈,从而形成泡泡。选择直流电机是因为我们只需要它“开”或“关”,不需要调节转速或方向(虽然REKA:BIT支持PWM调速)。螺旋桨的作用是将电机的旋转动能高效地转化为定向气流,其尺寸和桨叶形状决定了风量和风压。
注意:务必确认你的直流电机工作电压与REKA:BIT电机接口的输出电压匹配(通常是5V)。直接连接超过额定电压的电机可能导致电机损坏或REKA:BIT驱动芯片过载。
2.3 结构材料:冰棒棍的创客智慧
项目的主体结构全部由冰棒棍和热熔胶搭建。这几乎是创客项目中的“经典配方”。选择冰棒棍有以下几个原因:
- 易得性与低成本:材料随处可见,几乎零成本。
- 易于加工:可以用剪刀轻松裁剪,用热熔胶快速粘合,无需专业工具。
- 足够的结构强度:多层冰棒棍叠加粘合后,其强度足以支撑电机和舵机的重量及运行时的轻微振动。
- 安全:相比木材或亚克力,边缘更光滑,更适合亲子制作。
这种设计鼓励了“快速迭代”的思想。如果第一版结构不稳或者位置不对,你可以轻易地拆开(热熔胶虽牢固但可用力掰开或用刀片切开)重新调整,而不会造成材料浪费。
3. 机械结构搭建详解与避坑指南
3.1 “H”型底座的稳固性构建
结构是项目的骨架,稳固的底座是成功的一半。原文中提到的“H”型结构是基础,但如何让它更稳固,我通过几次失败总结了一些心得。
首先,取两根冰棒棍作为“H”的两条竖腿。再取一根作为横梁,用热熔胶将其粘在两根竖棍的顶部。这里的关键是粘合面积和角度。不要只涂一点胶在接触点,而是沿着横棍与竖棍的接触线,均匀涂抹一条热熔胶,形成一个小三角加固区。粘合后,用手按住至少30秒,直到胶体完全从透明状变为乳白色凝固。
接下来,在“H”的左侧和右侧,各垂直粘上一根冰棒棍。这一步的目的是为后续安装电机提供侧向支撑。粘的时候,要确保这根竖棍与底座平面绝对垂直,你可以将它靠在桌子边缘进行校准。同样,需要足够的粘合面积。
然后,在“H”结构的最顶端,水平粘上另一根冰棒棍。这根棍子将成为整个动作机构的“顶梁”,舵机和风扇电机都将安装在它上面或悬挂于其下。因此,它的稳固性至关重要。我建议在这根顶梁棍与下方“H”结构的两侧竖棍连接处,额外增加一小段冰棒棍作为“斜撑”,形成一个简单的三角形结构。三角形在力学上是最稳定的形状,能有效防止顶梁在电机运行时前后晃动。
3.2 舵机与泡泡圈的安装校准
舵机的安装直接决定了泡泡圈能否准确浸入液面和被风吹到。我的安装方法是:
- 首先,将泡泡圈(可以用现成的,也可以用扭扭棒自己弯一个圆环)用热熔胶或细扎带固定在舵机的舵盘(那个白色的塑料圆片)上。确保泡泡圈平面与舵盘平面平行。
- 不要急着将舵机粘到结构上! 先给舵机临时通电(通过REKA:BIT),编写一个简单的测试程序,让舵机在0度和180度两个极限位置来回转动。观察泡泡圈的运动轨迹。
- 手持舵机,将其放置在顶梁棍下方,模拟安装位置。调整舵机的朝向和高度,使得在某个角度(比如90度)时,泡泡圈能完全浸入你准备好的泡泡液容器中,而在另一个角度(比如180度)时,它能刚好抬起到风扇叶片的中心前方。
- 确定好位置后,用热熔胶将舵机壳体牢牢地粘在顶梁棍上。粘的时候,最好让舵机的转轴(输出轴)略微朝向风扇方向倾斜,这样吹出的泡泡轨迹更向前方,而不是向上。
实操心得:舵机在堵转(即运动到极限位置被卡住)时电流会急剧增大,容易烧坏。因此,在最终固定前,一定要手动将泡泡圈运动到预定的两个角度,确保其运动路径上没有任何结构阻挡。留出几毫米的安全余量。
3.3 风扇电机的安装与气流导向
直流电机和螺旋桨的安装目标是为泡泡圈提供集中、垂直的气流。
- 将螺旋桨安装到直流电机的转轴上。注意螺旋桨的正面(通常有凸起或弧度的一面)应朝向吹风方向。
- 将电机用热熔胶垂直粘在之前安装在“H”结构右侧的那根竖棍上。位置要足够高,确保螺旋桨的旋转平面与抬起的泡泡圈基本平行,且中心对准。
- 气流导向技巧:裸漏的螺旋桨产生的气流是发散的。为了获得更集中、更有力的气流,可以裁剪一个塑料瓶的上半部分(漏斗状),将其罩在螺旋桨外围,小口对准泡泡圈。这能显著提升吹出泡泡的成功率和大小。用热熔胶将塑料漏斗固定在冰棒棍结构上即可。
最后,将泡泡液容器(一个小碟子或浅碗)放置在底座上,调整其位置,使得舵机带动泡泡圈下降时能准确浸入。可以用一点胶固定容器,防止碰倒。
4. 电路连接与供电系统安全要点
4.1 REKA:BIT接口定义与连接
REKA:BIT的接口布局非常清晰。找到板子上标有“S1”、“S2”、“S3”、“S4”的3针排座,这是舵机接口。它们分别对应micro:bit的P0、P1、P2、P8口(REKA:BIT的丝印或说明书会明确标注)。我们将舵机的三线接口(棕色-地线,红色-电源,橙色-信号)插入“S1”口。注意方向,通常棕色线朝向板子边缘。
对于直流电机,找到标有“M1”和“M2”的2针端子。每个端子有两个插孔,分别对应电机的正负极。我们将风扇电机的两根线插入“M1”端子。此时先不用在意正负极,因为如果风向反了,我们只需要在编程时控制电机反转,或者直接在端子上调换两根线即可,不会损坏设备。
4.2 供电方案选择与安全规范
整个系统的电力来自REKA:BIT的电源输入口。有三种主流方案:
- USB Type-C供电:使用手机充电器和数据线连接。最方便,但功率可能有限(标准5V/2A),如果电机同时启动瞬间电流较大,可能导致电压不稳,micro:bit重启。
- DC插座供电:使用5V-9V的直流电源适配器。这是最稳定的方案,能提供充足的电流。
- 移动电源(Powerbank)供电:便携性最佳,适合户外演示。务必选择一个输出电流大于1.5A的移动电源。
安全第一:在连接任何电源前,请务必再次检查所有接线,确保没有短路(比如裸露的线头相碰)。特别是舵机信号线不要误插到电源口。建议的加电顺序是:先连接好所有电机和传感器,最后再连接电源。调试时,如果闻到焦糊味或看到芯片异常发热,立即断电。
5. 图形化编程逻辑深度剖析
5.1 MakeCode环境配置与扩展添加
我们使用微软的MakeCode for micro:bit在线编辑器进行编程。打开浏览器,访问MakeCode官网,创建一个新项目。首先需要添加REKA:BIT的扩展库,这样代码积木区才会出现控制电机和舵机的专用积木。
在代码积木区,点击“扩展”按钮(Advanced -> Extensions),在搜索框中输入“reka”或“cytron”,找到“reka:bit”扩展并添加。添加成功后,左侧积木分类中会多出“RekaBit”和“Reka:Motors”等类别。
5.2 声控触发逻辑的实现细节
程序的核心是一个“事件驱动”逻辑。我们不是一直检测声音,而是让micro:bit持续监听,当声音强度超过某个阈值时,触发一个“事件”,在这个事件里执行一系列动作。
具体积木逻辑如下:
- 初始化:在
当开机时积木中,设置舵机的初始位置。例如,使用RekaBit分类下的set servo S1 to 90°,让泡泡圈停留在中间位置(安全位置)。同时,可以使用设置电机 M1 速度 0来确保风扇初始是关闭的。 - 声音检测:micro:bit v2的麦克风可以测量声音强度。我们使用
输入分类下的响度积木来获取当前值。这个值在安静环境下可能小于50,在拍手时可能大于150。 - 循环判断:在
无限循环中,放入一个如果...那么...判断。条件就是响度 > 阈值。这个阈值需要你根据实际环境测试调整。可以先设为120。 - 触发动作:当条件满足时,顺序执行以下动作:
设置电机 M1 速度 100(全速正转,吹风)设置舵机 S1 角度到 0(假设0度是浸入泡泡液的位置)暂停 1000 毫秒(等待1秒,让泡泡圈充分蘸取泡泡液)设置舵机 S1 角度到 180(抬起泡泡圈到风扇前)暂停 3000 毫秒(持续吹风3-4秒,吹出泡泡)设置舵机 S1 角度到 90(回归安全位置)设置电机 M1 速度 0(关闭风扇)
5.3 程序优化与抗干扰设计
直接使用上述逻辑可能会遇到一个问题:一次拍手或叫喊可能会因为持续时间短,被循环多次捕获,导致机器重复触发动作,或者环境持续噪音导致误触发。这就需要加入“状态锁”和“延时屏蔽”进行优化。
我们可以创建一个变量,命名为 已触发。在 当开机时 将其设为 假。
在循环中的 如果 判断条件改为:响度 > 阈值 且 已触发 = 假。
当触发动作后,第一件事就是将 已触发 设为 真。
在动作序列的最后,再添加一个 暂停 5000 毫秒 (5秒冷却时间),然后将 已触发 设为 假。
这样,一旦被触发,在接下来的5秒内,无论多大声响,系统都不会响应。这既防止了误触发,也让每一次泡泡吹出都有完整的展示时间。
6. 系统调试、问题排查与性能优化
6.1 分模块调试法
不要试图一次性完成所有组装和编程然后期望它完美运行。采用分步调试:
- 舵机单独测试:只连接舵机,编写程序让它来回摆动,确认运动范围是否合适,有无卡顿。
- 风扇单独测试:只连接风扇电机,测试正反转,感受风力。
- 声音传感器测试:不连接执行器,只用micro:bit的LED点阵显示当前响度值,通过拍手观察数值变化,从而确定一个合理的触发阈值。
- 联动空载测试:接上所有部件,但先不装泡泡圈和泡泡液,测试声音触发后,舵机和风扇能否按预定逻辑协同工作。
- 全系统联调:加入泡泡液,进行最终测试。
6.2 常见问题速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 拍手后无任何反应 | 1. 电源未接通或接触不良 2. 程序未下载成功 3. 声音阈值设置过高 |
1. 检查REKA:BIT电源指示灯是否亮起,micro:bit是否显示程序预设的启动图案。 2. 重新编译下载程序,确保下载时micro:bit盘符出现并完成复制。 3. 降低触发阈值,或在程序中加入 显示数字 响度来实时观察环境音量。 |
| 舵机抖动或不转动 | 1. 供电不足 2. 机械结构卡死 3. 信号线接触不良 |
1. 换用功率更大的电源(如2A以上的适配器)。舵机启动瞬间电流很大。 2. 断开舵机,手动转动泡泡圈,检查是否有阻碍。 3. 重新插拔舵机接口,检查REKA:BIT上对应端口是否松动。 |
| 风扇不转或反转 | 1. 电机线未插紧 2. 电机极性接反 3. 程序里电机速度设为0或负值 |
1. 重新插紧电机端子。 2. 调换电机端子上的两根线,或修改程序,将速度值从正数改为负数(或反之)。 3. 检查程序中 设置电机速度积木的值是否正确。 |
| 能触发但吹不出泡泡 | 1. 泡泡圈蘸液不充分 2. 风力不足或风向不对 3. 泡泡液配方问题 |
1. 调整舵机浸入的角度和深度,确保圈圈完全浸没。 2. 检查风扇是否正对泡泡圈中心,尝试提高电机速度(最大100)。可加装风道聚焦气流。 3. 使用市售专用泡泡液,或自制时加入甘油(增加粘度)和糖浆(增加延展性)。 |
| 系统运行一段时间后复位 | 1. 电源带载能力不足 2. 电机堵转导致电流过大 |
1. 使用额定电流更大的电源,特别是移动电源要选支持2A以上输出的。 2. 检查舵机运动路径是否畅通,避免长时间堵转。 |
6.3 进阶优化思路
当基础功能实现后,你可以尝试以下优化,让项目更具挑战性和趣味性:
- 多级声控:通过判断声音的响度等级,控制吹出不同大小的泡泡。例如,小声说话吹小泡泡,大喊吹大泡泡(通过控制风扇吹风的时长或舵机浸液时间来实现)。
- 加入灯光效果:利用micro:bit的LED点阵,在触发时显示一个动画,或者用外接RGB LED灯条,随声音变化颜色。
- “游戏化”改造:设定一个计时,比如30秒内,看谁能用声音触发吹出最多的泡泡。将micro:bit变成一个简单的计分器。
这个声控泡泡机项目就像一把钥匙,它打开了一扇门,让你看到硬件与软件结合所能创造的即时乐趣。从听到声音,到程序判断,再到电机转动、泡泡飞出,整个链条的每一个环节你都可以触摸、调整和优化。这种从抽象代码到物理反馈的完整体验,正是创客精神的精髓所在。我自己的第一个版本泡泡吹得稀稀拉拉,后来调整了风扇角度、改进了泡泡液、优化了触发延迟,当看到一串又大又圆的泡泡稳稳飞出时,那种成就感远超乎想象。不妨就从这里开始,享受创造的乐趣吧。