基于Micro:bit的橡皮筋发射器:从硬件搭建到编程控制的STEAM项目实践
1. 项目概述:当Micro:bit遇见橡皮筋发射器
作为一名常年泡在创客空间和小学机器人课堂里的“孩子王”,我一直在寻找那些能瞬间点燃孩子们好奇心和动手欲的项目。太复杂的,容易劝退;太简单的,又缺乏挑战。直到我和学生们一起捣鼓出这个“基于Micro:bit的橡皮筋发射器”,我才发现,这个看似简单的玩具,完美地踩在了趣味性、教育性和可玩性的平衡点上。它本质上是一个由微控制器精确控制的、可编程的弹射平台,通过两个伺服电机(舵机)分别控制水平旋转(方向)和垂直俯仰(角度),实现了对橡皮筋发射轨迹的数字化操控。
这不仅仅是做一个能“biu”一下射出橡皮筋的装置。它的核心价值在于,将抽象的编程逻辑(如变量、循环、条件判断)与直观的物理运动(电机的转动、橡皮筋的弹道)紧密地连接起来。学生们在调试发射角度命中目标时,会不自觉地理解角度、力度与射程的关系,这比任何教科书上的抛物线公式都来得生动。项目所需的材料非常亲民,核心是Micro:bit主板、两个SG90舵机、一个舵机云台和一些常见的结构材料(如方型塑料线槽),总成本可控,非常适合作为学校STEAM课程、课外兴趣小组或家庭亲子创客活动的入门项目。
接下来,我将从一个实践者的角度,完整拆解这个项目的设计思路、硬件搭建、编程逻辑以及那些只有亲手做过才会知道的“坑”和技巧。无论你是教育工作者、创客爱好者,还是想给孩子找一个高质量科技项目的家长,这篇详尽的记录都能让你从零开始,复现一个稳定又好玩的智能发射器。
2. 核心硬件选型与设计思路解析
2.1 为什么是Micro:bit与SG90舵机这个组合?
选择Micro:bit作为控制核心,几乎是教育领域硬件项目的首选。它集成了5x5 LED点阵、两个可编程按钮、加速度计、磁力计、蓝牙等丰富资源,但其最核心的优势在于极低的上手门槛。基于块的图形化编程环境(如MakeCode)让没有代码基础的学生能在几分钟内让LED显示一个笑脸,这种即时反馈的成就感是持续学习的强大动力。对于本项目,我们需要精确控制电机的角度,Micro:bit通过其GPIO引脚输出PWM(脉冲宽度调制)信号,可以轻松驱动舵机到指定位置。
舵机方面,SG90是一款微型舵机,价格低廉、扭矩适中(约1.6kg/cm)、重量轻,非常适合这种小负载、高精度的教育项目。它的工作电压在4.8V-6V之间,旋转角度通常为0-180度。这里有一个关键点:项目原文提到了“总移动范围是120°,每步5°”。这并非SG90的物理极限,而是我们在软件中人为设定的安全范围和精度。将运动范围限制在120°内(例如从30°到150°),可以防止舵机堵转损坏,同时24个步进点(120°/5°)对于通过按钮进行控制来说,精度和操作手感都刚刚好。
云台(Pan-Tilt)的选择则直接决定了结构的稳定性和运动的顺滑度。一个专为SG90设计的双轴云台,通常包含两个舵机安装位和联动齿轮结构,能确保水平和垂直两个维度的运动轴线正交且稳固。这比自己用乐高积木或3D打印件去搭建一个云台要可靠得多,能有效减少发射时的晃动,提高射击的一致性。
2.2 发射器本体结构的设计考量
原文使用了“方形塑料线槽”作为炮管,这是一个非常巧妙且低成本的选择。这种线槽在五金店或电商平台很容易买到,通常是PVC或ABS材质,本身就有一定的结构强度,内部中空,截面方正,非常适合作为导轨和发射管。
在设计时,我们需要考虑几个关键因素:
- 炮管固定:需要在云台的俯仰舵机摇臂上,牢固地固定住这段线槽。可以使用螺丝直接固定,或者先用热熔胶/AB胶将一小块硬质材料(如亚克力板)粘在摇臂上,再将炮管固定在这块板上,以增加连接面积。
- 扳机机构:这是项目的灵魂。我们需要一个由第三个舵机驱动的“扳机”机构,用来拉住并释放橡皮筋。最简单的设计是,在炮管尾部上方安装一个舵机,在其摇臂上粘一个L形的小钩子。当舵机旋转到某个角度时,钩子下拉,挂住搭在炮管上的橡皮筋;当舵机反向旋转时,钩子抬起,释放橡皮筋。
- 供电分离:一个非常重要的实践经验是,务必为舵机组提供独立的电源。Micro:bit的USB口或电池座提供的电流(通常不超过500mA)非常有限,而舵机在启动和堵转时瞬时电流很大。如果直接由Micro:bit供电,轻则导致Micro:bit复位,重则烧毁主板。因此,我们需要一个额外的电池盒(如4节AA电池,提供6V电压)专门给三个舵机供电,Micro:bit和舵机仅共地(GND),控制信号(Signal)则由Micro:bit的引脚提供。
注意:SG90舵机的三条线通常为棕色(GND)、红色(VCC)和橙色(Signal)。接线时,务必确保所有设备的GND连接在一起(共地),这是电路正常工作的基础。舵机的VCC接独立电池盒的正极,Signal线接Micro:bit的指定引脚。
3. 硬件搭建与机械组装全流程
3.1 材料与工具清单
在开始动手前,请准备好以下物品:
-
电子部分:
- Micro:bit开发板 1块
- Micro:bit扩展板(带引脚插槽) 1块(强烈推荐,接线和保护主板都更方便)
- SG90舵机 3个
- 双轴舵机云台(适配SG90) 1套
- 5号或7号电池盒(4节,带开关) 1个
- 杜邦线(公对公、公对母) 若干
- 橡皮筋 若干
-
结构部分:
- 方形塑料线槽(宽度约2-3cm,长度15-20cm) 1段
- 小螺丝刀套装
- 热熔胶枪及胶棒
- 电工胶带或扎带
- 可选:小块亚克力板、雪糕棒、M3螺丝螺母套装,用于加强固定。
-
工具:
- 电钻或手钻(配小钻头)
- 剪刀或美工刀
- 尺子、记号笔
3.2 分步组装指南
步骤一:组装云台与炮管基座 首先,按照云台说明书,将两个SG90舵机分别安装到云台的水平底座和垂直支架上。通常需要用配套的小螺丝固定。确保舵机齿轮与云台齿轮啮合顺畅,没有错位或过紧。组装好后,手动转动云台,检查水平旋转和垂直俯仰是否灵活。
接下来处理炮管。截取一段长约15-20cm的方形塑料线槽。在距离一端约3-4cm处,用电钻钻一个小孔,这个孔用于让俯仰舵机的摇臂穿过,并与炮管连接。将云台垂直俯仰舵机的摇臂(通常使用十字形或圆形摇臂)通过这个孔伸出来。在摇臂与炮管接触的部位,用热熔胶大量填充固定,或者用螺丝将一块小木板/亚克力板同时固定在摇臂和炮管内壁上,确保连接绝对牢固。这是主要的受力点,必须结实。
步骤二:制作并安装扳机机构 这是需要一点巧思的地方。取第三个SG90舵机,将其固定在炮管尾部上方。你可以用热熔胶将其直接粘在线槽外侧,但更推荐的做法是用扎带或自制一个小卡箍来固定,这样更利于后期调整。
然后制作扳机钩。取一段回形针或硬铁丝,弯成一个“L”形的小钩子。将这个钩子用热熔胶牢牢粘在舵机的摇臂上。调整舵机的初始位置,使得当舵机处于0度位置时,钩子处于“抬起”状态;当舵机转到某个角度(如60度)时,钩子向下运动,能够钩住放置在炮管上的橡皮筋。你需要反复测试这个角度,确保钩子能可靠地挂住和释放橡皮筋。
步骤三:电路连接 这是保证项目稳定运行的关键步骤,请严格按照以下顺序和说明操作:
- 连接Micro:bit与扩展板:将Micro:bit插入扩展板。
- 确定控制引脚:规划好三个舵机信号线连接的Micro:bit引脚。例如:
- 水平舵机(方向控制) -> 引脚 P0
- 垂直舵机(角度控制) -> 引脚 P1
- 扳机舵机 -> 引脚 P2
- (Micro:bit的P0、P1、P2、P8、P12等引脚都支持模拟/PWM输出,可用于舵机)。
- 连接信号线:将三个舵机的信号线(橙色或黄色),分别用杜邦线(公对母)连接到扩展板上对应的引脚插孔(P0, P1, P2)。
- 搭建独立供电系统:
- 将4节AA电池装入电池盒。
- 取三根杜邦线(公对公),将它们的正极(红色)并排拧在一起,然后插入电池盒的正极(+)输出端。
- 同样,将它们的负极(黑色)并排拧在一起,插入电池盒的负极(-)输出端。
- 现在你得到了一个“一拖三”的电源线:一组正极,一组负极。
- 将这三个舵机的VCC(红色线)分别连接到“一拖三”的正极组。
- 将这三个舵机的GND(棕色线)分别连接到“一拖三”的负极组。
- 共地操作:最后,也是最关键的一步,将电池盒的负极(GND)与Micro:bit扩展板的GND(任何一个GND引脚)用一根杜邦线连接起来。这样,Micro:bit和所有舵机就有了共同的参考零电位,控制信号才能被正确识别。
重要经验:在接通电池盒电源前,务必确保所有接线牢固,没有短路风险。可以先不接电池,只用Micro:bit的USB供电,通过编程让舵机微微动一下,检查信号线连接是否正确。确认无误后,再接入舵机独立电源。操作顺序永远是:先编程、调试信号,再上强电。
4. 编程逻辑与代码实现详解
我们将使用MakeCode for Micro:bit图形化编程环境,因为它最直观。所有逻辑都围绕“状态控制”和“事件驱动”展开。
4.1 变量定义与初始化
程序开始,我们需要建立几个核心变量来记录发射器的当前状态:
水平角度:记录水平舵机当前的角度值(例如,初始设为90,代表正前方)。垂直角度:记录垂直舵机当前的角度值(例如,初始设为90,代表水平位置)。发射状态:一个布尔变量,记录扳机是处于“挂弹”还是“释放”状态。
在当开机时积木块中,我们需要进行初始化:
- 将变量
水平角度和垂直角度都设为90。 - 将
发射状态设为假(代表未挂弹/已释放)。 - 向引脚P0和P1写入初始角度
90,让两个控制舵机回中。 - 向引脚P2写入一个角度(比如
10),让扳机舵机回到“抬起”的初始位置。
4.2 角度控制逻辑实现
我们使用Micro:bit的A、B按钮来分别控制水平和垂直角度。
水平控制(A按钮):
当按钮A被按下时:让水平角度增加5。但必须加入限制,防止超出安全范围(如30到150)。所以逻辑是:如果 水平角度 < 150 才执行 水平角度增加5。增加后,向引脚P0写入角度 水平角度。当按钮B被按下时:同理,让水平角度减少5,并限制不能小于30。
垂直控制(B按钮): 为了区分,我们可以结合屏幕显示。例如:
当按钮A和B同时被按下时,进入垂直角度调整模式,让LED屏幕显示“V”提示。- 然后,单独按
A键增加垂直角度,单独按B键减少垂直角度,逻辑同水平控制,并写入引脚P1。调整完毕后,同时按A+B退出该模式。
另一种更清晰的方案是引入一个“模式切换”变量,但这对于初学者稍复杂。一个折中的好方法是:利用Micro:bit的倾斜传感器。当你想调整垂直角度时,直接倾斜Micro:bit本体。在无限循环中,读取加速度计的Y轴值,映射到一个安全的角度范围(如60-120度),然后直接写入垂直舵机引脚。这样操作非常直观,仿佛在用手柄瞄准。
4.3 发射与扳机控制逻辑
发射动作由震动传感器(即摇晃Micro:bit)或引脚触摸(如触摸P0引脚上的鳄鱼夹)来触发,这比按按钮更有仪式感。
我们设计一个发射函数:
- 检查
发射状态是否为真(即已挂弹)。如果不是,则先执行“挂弹”动作。 - “挂弹”动作:向扳机引脚P2写入一个角度(如
60),使钩子下拉,等待0.5秒让动作完成,然后将发射状态设为真,并在LED屏幕上显示一个“!”号提示已装填。 - 当触发发射事件时,判断如果
发射状态为真,则执行“发射”动作。 - “发射”动作:向扳机引脚P2写入初始角度(如
10),使钩子快速抬起。为了增强效果,可以同时让Micro:bit播放一个简短的音效(如“Ba Ding”)。等待0.2秒后,将发射状态设为假。
4.4 代码优化与安全增强
- 防抖处理:按钮按下时,程序执行速度极快,容易一次触发多次增加。可以在按钮事件内开头加入
暂停(100)毫秒,简单防抖。 - 角度显示:可以在调整角度时,让LED点阵以条形图或数字简码的形式显示当前角度相对于范围的比例,提供视觉反馈。
- 安全锁:设置一个“安全锁”变量,当锁定时,所有角度调整和发射功能失效,防止误操作。可以通过同时按下A+B键一定时间来切换锁定状态,并用一个醒目的LED图案表示。
在MakeCode中,这些逻辑都可以通过拖拽积木完成。完成后,将程序编译下载到Micro:bit,即可进行硬件联调。
5. 系统联调、测试与精度优化
硬件组装完毕,程序下载成功后,真正的挑战才刚刚开始。联调是一个发现问题、解决问题的核心过程。
5.1 上电初始化检查
首先,不要装橡皮筋。给整个系统上电(先开Micro:bit电源,再开舵机电池盒开关)。观察:
- 三个舵机是否都平稳地运动到初始位置(水平、垂直回中,扳机抬起)。有没有某个舵机出现剧烈抖动或“吱吱”的异响?抖动通常意味着电源功率不足或信号干扰,异响则可能是机械结构卡住导致舵机堵转。
- Micro:bit的LED屏幕是否按预期显示。按动按钮,观察水平舵机是否以大约5°的步长平稳转动,有无卡顿或回差(即正向转到某个角度,再反向转回来,停的位置不一样)。舵机都有一定的回差,这是正常现象,但在我们的精度要求下影响不大。
5.2 机械结构校准与加固
这是影响射击精度的决定性环节。
- 炮管同心度:确保炮管(线槽)的轴线与俯仰舵机旋转轴垂直。如果炮管是歪的,发射方向就会偏移。可以用直角尺辅助观察,并用垫片或微调热熔胶的方式校正。
- 扳机挂钩位置:这是调试的重点。挂上一根橡皮筋,手动控制扳机舵机转动,观察:
- 挂弹点:挂钩下拉时,是否能在橡皮筋被拉长的最佳位置(通常是炮管尾部上方1-2厘米处)稳稳钩住橡皮筋中部?钩得太浅容易滑脱,钩得太深则释放不顺畅。可能需要微调挂钩的形状和舵机的挂弹角度。
- 释放点:挂钩抬起时,是否能干净利落地脱离橡皮筋,没有任何刮擦或阻滞?释放瞬间的摩擦力会极大影响发射方向和力度的一致性。可能需要将挂钩顶端打磨圆滑。
- 结构刚性检查:用手轻轻摇晃发射器,观察云台、炮管连接处、舵机固定点是否有明显的晃动。任何松动都会在发射时被放大,导致落点散布变大。用热熔胶、螺丝或扎带对所有关键连接处进行加固。特别注意俯仰舵机摇臂与炮管的连接,这里是杠杆受力点,必须最结实。
5.3 弹道测试与软件参数微调
现在可以开始实弹测试了。在3-5米外设置一个目标区域。
- 固定角度试射:先将水平和垂直角度固定在某个值(如90, 90),连续发射5-10根橡皮筋,观察落点的分布。如果落点非常分散,说明机械结构不稳定或释放机构不一致,需要返回上一步检查。如果落点集中但偏离目标,则说明需要校准。
- 校准归零:将发射器对准正前方一个远处标记。通过程序将水平角度设为90,观察炮管指向是否对准标记。如果没有,不要直接修改程序中的90这个值,而是在硬件上微调水平舵机摇臂的安装位置。松开固定螺丝,将摇臂转到物理上的正前方,再紧固。软件的中位值(90)应对应硬件的物理中位。垂直角度校准同理。
- 建立“射表”:这是一个非常有趣且富有教育意义的环节。固定水平角度,依次改变垂直角度(如从70到110,步进5),记录每个角度下橡皮筋的平均落点距离。你会发现,角度与射程并非简单的线性关系,会有一个最优角度(通常在40-50度之间,但受橡皮筋劲度和拉力影响)。可以将这个“角度-射程”对应关系做成一个小表格,贴在发射器上,这就像真实的炮兵射表一样。学生通过这个过程,能深刻理解抛体运动的基本原理。
5.4 常见故障排查速查表
| 故障现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 舵机不转动或抖动 | 1. 电源功率不足 2. 信号线接触不良 3. 舵机堵转(机械卡死) |
1. 检查电池是否电量充足,尝试单独给一个舵机供电测试。 2. 重新插拔信号线,检查杜邦线是否完好。 3. 断开机械连接,用手轻轻转动舵机输出轴,看是否能顺畅转动。 |
| 按钮控制无反应 | 1. 程序未正确下载 2. 引脚定义错误 3. Micro:bit未复位 |
1. 重新编译下载程序,确认下载成功。 2. 检查代码中控制舵机的引脚号与实际接线是否一致。 3. 按一下Micro:bit背面的复位键。 |
| 发射力度小或不一致 | 1. 橡皮筋疲劳或型号不一 2. 扳机释放不干脆 3. 挂弹点位置不佳 |
1. 使用同一批次、弹性好的新橡皮筋。 2. 优化挂钩形状,确保释放瞬间无摩擦。增加扳机舵机动作速度(在程序中减少动作间隔时间)。 3. 调整挂钩下拉的深度,找到最佳拉力点。 |
| 射击方向左右漂移 | 1. 水平轴松动 2. 炮管固定不牢 3. 发射时整体震动大 |
1. 紧固云台水平轴的所有螺丝。 2. 加固炮管与俯仰舵机摇臂的连接。 3. 为发射器增加一个重的底座(如一块木板)。 |
| Micro:bit无故重启 | 舵机工作时从Micro:bit取电导致电流过大 | 确保舵机使用独立电源供电! 检查电路,确保只有信号线连接Micro:bit,VCC线接独立电池盒。 |
6. 项目拓展与教学应用设计
一个基础版本的成功,只是起点。这个项目的开放性允许进行各种有趣的拓展,使其更适合不同年龄层和教学场景。
6.1 功能拓展创意
- 自动装填机构:增加一个由微型减速电机驱动的橡皮筋供弹仓,配合一个光电传感器,当检测到“弹药”耗尽时,自动从仓内推出一根新橡皮筋到发射位置,实现半自动化。
- 距离传感器辅助瞄准:在炮管上加装一个超声波传感器(如HC-SR04)。编程实现:传感器测量到目标的距离,然后根据之前测试得到的“射表”,自动计算并设置所需的垂直发射角度。这引入了“传感器-计算-执行”的闭环控制概念。
- 无线遥控与编队:利用Micro:bit内置的蓝牙或无线电功能,实现两台或多台发射器之间的无线遥控,甚至设计简单的协同作战任务(如一台负责侦察测距,一台负责火力打击)。
- 弹道模拟与游戏化:在电脑上用一个简单的Python程序或Scratch,创建一个虚拟靶场。Micro:bit通过串口将当前的角度值发送给电脑,电脑程序实时模拟出弹道曲线并显示在屏幕上,实现“虚拟-物理”的融合。
6.2 课堂教学活动设计
在STEAM课堂中,这个项目可以分解为多个课时,覆盖多个学科知识点:
-
课时一:认识硬件与结构设计(工程、技术)
- 学习Micro:bit、舵机、电源的基本原理。
- 分组讨论并绘制发射器的结构设计草图,强调稳定性、可靠性和可制造性。
- 动手测量、切割、组装机械部分。
-
课时二:编程逻辑入门(数学、技术)
- 学习变量、事件、条件判断等核心编程概念。
- 实现用按钮控制单个舵机角度变化,理解参数与动作的映射关系。
- 调试“安全范围限制”代码,引入数学中的区间概念。
-
课时三:系统集成与调试(科学、工程)
- 完成全部硬件连接和软件烧录。
- 进行初步功能测试,学习系统调试的基本方法(分模块检查、现象观察、假设验证)。
- 记录遇到的问题和解决方案。
-
课时四:弹道实验与数据分析(科学、数学)
- 设计实验:控制变量(固定拉力,改变角度),测量射程。
- 收集数据,在坐标纸上绘制“角度-射程”散点图。
- 讨论最佳发射角,引入抛体运动理论的初步概念(定性讨论角度与飞行时间、水平速度的关系)。
-
课时五:挑战赛与迭代优化(综合)
- 举办班级挑战赛:定点射击、移动目标射击等。
- 引导学生根据比赛表现,反思自己设计的不足,并提出优化方案(如加固结构、优化程序、校准参数)。
- 分享各组的经验和创意,完成项目报告。
在整个过程中,学生们收获的远不止一个玩具。他们实践了从设计、构建、编程、测试到优化的完整工程流程,遇到了真实的、定义不清的问题(比如“为什么打不准?”),并需要运用跨学科的知识和协作能力去解决它。这种基于项目的学习(PBL)体验,正是创客教育和STEAM精神的精髓所在。这个橡皮筋发射器,就像一粒种子,种下的是对工程、编程和科学探究的兴趣。