用Micro:bit与纸板制作红外感应击掌机器人:从传感器原理到动手实践
1. 项目概述:当纸板遇上代码,一个“击掌”机器人的诞生
如果你手头有一块Micro:bit,又恰好攒了几个快递纸箱,别急着扔掉。今天我想分享的,就是如何用这些看似普通的材料,制作一个能和你“击掌”的互动机器人。这不仅仅是一个手工项目,更是一个融合了基础编程、简单机械结构和电子互动的绝佳入门案例。它非常适合教育工作者用来激发学生对STEM(科学、技术、工程、数学)的兴趣,也适合家长和孩子作为周末的亲子活动,甚至对于刚接触硬件的编程爱好者来说,也是一个低门槛、高成就感的实践项目。
这个“击掌”机器人的核心逻辑很简单:当你靠近它时,它会通过传感器感知到你的存在,然后驱动一个由舵机控制的“手臂”完成一次击掌动作,并可能伴有灯光或声音的反馈。整个过程,从结构设计、电路连接到代码编写,都充满了动手的乐趣和解决问题的挑战。通过这个项目,你将直观地理解传感器如何“看见”世界,代码如何指挥硬件,以及如何用最朴素的材料实现有趣的互动。下面,我们就从零开始,一步步拆解这个充满创意的制作过程。
2. 核心思路与方案设计:为什么是“纸板+Micro:bit”?
在开始动手之前,我们先来聊聊为什么选择这个组合,以及整个系统的设计思路。理解背后的“为什么”,能帮助你在制作过程中更好地应对变化和创新。
2.1 核心元件选型与角色解析
整个系统的核心是Micro:bit这块小巧的开发板。它集成了加速度计、磁力计、温度传感器、蓝牙以及一个5x5的LED点阵,最关键的是,它拥有多个可编程的GPIO(通用输入输出)引脚。对于我们的项目,我们将主要利用它的GPIO引脚来连接和控制外部设备。
感知部分:如何“看到”击掌对象?我们需要一个传感器来检测是否有人靠近并准备击掌。常见的选择有超声波传感器、红外避障传感器和触摸传感器。
- 超声波传感器:通过发射和接收超声波来测量距离,精度高,但成本相对较高,编程稍复杂。
- 红外避障传感器:通过发射红外线并检测是否反射回来判断前方是否有物体。它输出的是简单的数字信号(有障碍/无障碍),价格低廉,使用简单。
- 触摸传感器:需要主动触摸才能触发,不符合“自动感知”的互动逻辑。
基于成本、复杂度和项目趣味性的平衡,红外避障传感器是一个理想的选择。它能让机器人在一定距离内(通常2-30cm可调)自动感知你的手,实现“非接触式”触发,互动体验更自然。
执行部分:如何完成“击掌”动作?我们需要一个执行机构来模拟手臂的挥动。这里舵机是唯一且最佳的选择。舵机是一种可以精确控制旋转角度的电机。我们可以通过程序命令它旋转到0度、90度或180度等特定位置。用一个舵机来驱动一个纸板手臂,就能模拟从“待机”到“击掌”再到“收回”的动作序列。
结构部分:为什么是纸板?纸板(瓦楞纸)易于切割、弯曲、粘合,并且成本几乎为零。它的强度足以支撑Micro:bit、传感器和一个小舵机的重量。使用纸板鼓励了“快速原型设计”的理念,允许我们快速迭代机器人的外形,即使失败了也能轻松重来。这本身就是一种重要的工程思维。
最终方案框图:整个系统的工作流程可以概括为:红外传感器检测到手部接近 → 发送信号给Micro:bit → Micro:bit运行预设程序 → 控制舵机旋转特定角度,完成击掌动作 → 同时可能在LED点阵上显示一个笑脸或对勾图案作为视觉反馈。
2.2 工具与材料清单
在开始制作前,请准备好以下物品:
电子部分:
- Micro:bit主板及USB数据线:1套。
- Micro:bit扩展板或鳄鱼夹/杜邦线:强烈推荐使用扩展板(如Elecfreaks的Octopus:bit或DFRobot的Boson扩展板),它提供了便于插接的引脚接口和内置的电源管理,能极大简化连接过程。如果使用鳄鱼夹或杜邦线,则需要额外注意正负极的连接。
- SG90微型舵机:1个。这是最常用、最廉价的9克舵机,工作电压4.8-6V,扭矩足够驱动纸板手臂。
- 红外避障传感器模块:1个。常见型号为KY-032或类似。确保模块上有三个引脚(VCC, GND, OUT)和一个可调电位器(用于调节检测距离)。
- 电池盒与电池:为整个系统供电。一个3节AA(5号)电池的电池盒(输出约4.5V)是常见选择。注意:单独给Micro:bit供电可通过USB,但驱动舵机需要扩展板或外部电源。
结构与工具部分:
- 硬质纸板:若干。快递盒是主要来源。
- 裁纸刀/美工刀、钢尺、切割垫:用于精确切割纸板。
- 热熔胶枪与胶棒:粘合结构的主力,固化快,强度高。
- 铅笔、橡皮、圆规:用于画图和设计。
- 螺丝刀:可能需要小号十字螺丝刀来固定舵机摇臂。
- 可选装饰:马克笔、贴纸、毛毡等,用于个性化你的机器人。
注意:安全第一!使用裁纸刀和热熔胶枪时务必小心。热熔胶温度很高,避免烫伤。切割时使用钢尺辅助,远离手指。
3. 机械结构设计与制作:搭建机器人的“骨骼与肌肉”
这是将想法变为实体的第一步。一个稳固而巧妙的结构是机器人可靠运行的基础。
3.1 主体结构设计与切割
我们不需要复杂的设计,一个稳定的底座和一个支撑臂就足够了。
- 设计底座:在纸板上画一个长方形(例如15cm x 10cm),这将是机器人的“身体”和底座。在底座后方设计一个垂直的“背板”(高约12cm),用于安装舵机和支撑手臂。你可以将背板与底座设计成一体,通过划痕后折弯成型,也可以用单独的纸板片用热熔胶粘合。一体折弯的结构通常更稳固。
- 制作舵机安装座:舵机需要被牢固地固定在背板的上部。根据你的舵机尺寸,用纸板裁剪一个“U”形或方框形的卡座,使其能紧紧包裹住舵机,然后用大量热熔胶将这个卡座粘在背板预定位置。确保舵机的输出轴朝向前方,并且旋转时不会碰到背板。
- 制作可动手臂:这是击掌动作的直接执行者。用纸板剪出一个长条状的手臂(长约10-15cm,宽2-3cm)。在一端剪出一个孔,用于连接舵机附带的塑料摇臂(舵机附件)。通常我们会使用最长的那个十字摇臂。用配套的小螺丝将摇臂固定在手臂的孔洞处。
3.2 传感器安装与整体组装
- 安装红外传感器:将红外传感器模块用热熔胶固定在底座的前沿,传感器探头朝前,高度大约与站立时人的手部自然高度持平。注意调整传感器模块上的电位器,逆时针旋转通常可以增加检测距离。先用USB线给Micro:bit供电,用手在传感器前移动,观察其信号指示灯(通常检测到障碍时会亮起),初步确定一个合适的检测距离(例如10-15厘米)。
- 安装舵机与手臂:将舵机放入安装卡座并粘牢。把已经固定好摇臂的手臂,套在舵机的输出齿轮上。这里有一个关键步骤:在通电初始化前,手动将舵机旋转到大约90度的位置(中间位置),然后将手臂水平地(或呈一个你喜欢的待机角度)安装上去。这样,我们的程序就可以以这个位置为基准,定义“收回”和“击掌”的角度。
- 布置电路与Micro:bit:将Micro:bit插到扩展板上,或者用鳄鱼夹准备好连接。暂时先不要连接所有线缆,但可以规划好走线位置。用热熔胶或扎带将多余的线缆整理好,固定在背板后面或底座下方,保持外观整洁。
实操心得:结构稳固性测试在粘死所有部件之前,先进行“干测试”。用手模拟舵机动作,检查手臂运动范围是否顺畅,是否会碰到其他部分。轻轻摇晃整个结构,检查底座是否够重、够稳,避免击掌时机器人自己翻倒。可以在底座内部粘贴一些重物(如石头、金属块)来降低重心。
4. 电路连接详解:让信号流动起来
正确的电路连接是硬件项目成功的一半。我们将使用扩展板来简化这一过程。
4.1 引脚定义与连接步骤
我们假设使用一块常见的Micro:bit扩展板,它通常会将Micro:bit的引脚以防插反的插座形式引出。
- 舵机连接:舵机有三根线:棕色(GND,地线)、红色(VCC,电源正极)、橙色(信号线)。
- 将舵机的棕色线连接到扩展板的GND引脚。
- 将舵机的红色线连接到扩展板的VCC或5V引脚(注意:有些扩展板的VCC引脚输出的是Micro:bit的3.3V,可能不足以驱动舵机,务必使用标有“5V”或专门舵机供电的引脚)。
- 将舵机的橙色线(信号线)连接到扩展板的一个支持PWM输出的数字引脚,例如P0、P1或P2。我们这里选择P1。
- 红外传感器连接:红外传感器模块也有三根线:通常黑色或棕色(GND)、红色(VCC)、黄色或白色(OUT,信号输出)。
- 将传感器的GND线连接到扩展板的另一个GND引脚。
- 将传感器的VCC线连接到扩展板的3.3V引脚(大多数此类模块工作电压为3.3V-5V,接3.3V与Micro:bit电平匹配更安全)。
- 将传感器的OUT线(信号线)连接到扩展板的一个数字输入引脚,例如P0。我们这里选择P0。
- 供电:将电池盒的输出线连接到扩展板专用的外部电源输入接口(通常标有“BAT”或“EXT.PWR”)。务必注意正负极(红线正极,黑线负极)。在编程和调试阶段,可以暂时只用USB供电,但驱动舵机时可能会因为电流不足导致动作无力或Micro:bit复位,因此最终测试务必使用电池供电。
重要提示:电源管理舵机在启动和堵转时会产生较大的瞬时电流,如果与Micro:bit共用USB的5V电源,可能会引起电压波动导致Micro:bit重启。使用扩展板的外接电池供电,可以将电机电路与核心控制电路在电源上进行一定隔离,保证系统稳定性。这是实践中非常关键的一点。
4.2 连接检查清单
在通电前,请务必双重检查:
- [ ] 所有连接牢固,没有松动。
- [ ] 电源正负极没有接反。
- [ ] 舵机信号线接到了P1,传感器信号线接到了P0。
- [ ] 传感器和舵机的电源电压选择正确(传感器3.3V,舵机5V)。
5. 编程逻辑与代码实现:赋予机器人“灵魂”
我们将使用MakeCode for Micro:bit图形化编程环境,它直观易学,非常适合初学者。当然,你也可以使用Python。
5.1 程序逻辑流程图
在写代码前,先理清逻辑:
- 初始化:程序启动时,设置舵机初始位置(如90度,手臂水平待机),清空LED屏幕。
- 主循环:不断检查红外传感器的状态。
- 触发判断:如果传感器检测到障碍物(手),则执行“击掌序列”。
- 击掌序列: a. 控制舵机快速旋转到一个角度(如150度),模拟手臂扬起准备击掌。 b. 短暂延时(如200毫秒)。 c. 控制舵机快速反向旋转到另一个角度(如30度),模拟手臂向前挥出击掌。 d. 在挥出的同时,让LED点阵显示一个“笑脸”图案。 e. 短暂延时(如300毫秒),保持击掌姿势。 f. 控制舵机回到初始位置(90度)。 g. 清空LED屏幕。
- 防误触与连续触发处理:在完成一次完整的击掌序列后,加入一个短暂的“冷却时间”(如1秒),在这段时间内即使检测到手,也不响应,防止因手持续在传感器前晃动而导致的连续疯狂击掌。
5.2 MakeCode 图形化编程步骤详解
打开MakeCode编辑器,新建一个项目。
- 初始化舵机:
- 在“高级”→“引脚”模块中,找到“伺服写入引脚 P1 到 90”。将其放入“当开机时”积木块中。这样一上电,手臂就会转到90度位置。
- 主循环与传感器读取:
- 在“无限循环”中,加入“如果...那么”判断。
- 在判断条件中,从“高级”→“引脚”中找到“数字读取引脚 P0”。由于红外传感器检测到障碍时通常输出低电平(0),未检测到时输出高电平(1)。所以我们的条件应该是“数字读取引脚 P0 等于 0”。
- 构建击掌动作序列:
- 在“那么”分支中,依次放入以下积木:
伺服写入引脚 P1 到 150(扬起手臂)暂停(毫秒) 200伺服写入引脚 P1 到 30(挥出击掌)显示图标(选择一个笑脸图标)暂停(毫秒) 300伺服写入引脚 P1 到 90(收回手臂)清除屏幕
- 在“那么”分支中,依次放入以下积木:
- 添加防抖延时:
- 在序列的最后,
清除屏幕之后,添加一个暂停(毫秒) 1000。这1秒的暂停既给了机械动作完成的缓冲,也防止了连续触发。
- 在序列的最后,
- (可选)添加启动提示:
- 在“当开机时”块中,可以在设置舵机前加一个
显示图标(比如一个勾号),然后暂停一下再清屏,让用户知道设备已启动。
- 在“当开机时”块中,可以在设置舵机前加一个
完整的图形化代码逻辑描述如下:
当开机时: 显示图标 √ 暂停 500 毫秒 清除屏幕 伺服写入引脚 P1 到 90 无限循环: 如果 数字读取引脚 P0 等于 0 那么 伺服写入引脚 P1 到 150 暂停 200 毫秒 伺服写入引脚 P1 到 30 显示图标 ☺ 暂停 300 毫秒 伺服写入引脚 P1 到 90 清除屏幕 暂停 1000 毫秒5.3 代码烧录与初步测试
用USB线将Micro:bit连接到电脑。在MakeCode编辑器中点击“下载”,将生成的.hex文件保存到出现的MICROBIT盘符中。下载完成后,Micro:bit背后的黄色指示灯会闪烁,程序开始运行。
初步测试步骤:
- 观察上电后,舵机是否转动到90度位置。
- 用手在红外传感器前晃动,观察舵机是否执行完整的击掌序列,以及LED是否显示笑脸。
- 测试“冷却时间”:完成一次击掌后,手持续放在传感器前,机器人应不再动作,直到手拿开超过1秒后再放回。
6. 调试、优化与创意扩展
基本功能实现后,我们进入打磨和提升阶段,这是项目从“能用”到“好用”、“好玩”的关键。
6.1 常见问题与排查技巧
即使按照步骤操作,你也可能会遇到一些问题。这里记录了一些典型情况及解决方法:
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 舵机完全不动作 | 1. 电源未接通或电压不足。 2. 信号线连接错误或接触不良。 3. 程序未正确烧录或引脚设置错误。 | 1. 检查电池盒开关、电池电量,用万用表测量舵机VCC-GND间电压是否在4.8V以上。 2. 重新插拔舵机信号线到P1,检查扩展板连接。 3. 重新下载程序,检查代码中“伺服写入”的引脚号是否为P1。 |
| 舵机抖动或动作不到位 | 1. 电源功率不足(特别是USB供电时)。 2. 机械结构卡阻。 3. 舵机扭矩不足或损坏。 | 1.务必换用电池盒供电,这是最常见的原因。 2. 手动转动手臂,检查是否被纸板或其他部分卡住,调整结构。 3. 尝试另一个舵机。 |
| 红外传感器一直触发或不触发 | 1. 检测距离电位器调节不当。 2. 传感器与环境光线干扰(强光可能影响红外接收)。 3. 引脚连接错误。 | 1. 仔细调节传感器上的电位器,并用串口输出或在LED上显示P0引脚的值来辅助调试。 2. 避免在阳光直射或强红外光源下使用,可以给传感器做个纸筒遮光罩。 3. 确认OUT线接P0,VCC接3.3V。 |
| 动作序列混乱或只执行一部分 | 1. 程序逻辑错误,特别是延时设置不当。 2. 传感器信号抖动造成多次触发。 | 1. 检查“无限循环”内的逻辑,确保动作序列和防触发的“暂停”都在“如果”语句内。 2. 在代码中增加“软件防抖”:检测到触发后,先延时50毫秒再读取一次传感器,如果仍然触发才执行动作。 |
| Micro:bit频繁自动复位 | 舵机工作瞬间电流过大,导致系统电压被拉低。 | 这是典型的电源问题。确保使用外接电池盒为扩展板供电,且电池电量充足。可以在舵机电源正负极之间并联一个100-470μF的电解电容,以吸收瞬时电流冲击。 |
6.2 性能优化与体验提升
- 动作平滑化:目前的动作是直接跳转到目标角度,有些生硬。可以尝试使用循环,让舵机每次转动一小步,中间加入短暂延时,模拟出更柔和的加速减速效果。在MakeCode中可以用“循环”和“伺服写入”结合来实现。
- 多感官反馈:除了LED点阵,还可以连接一个无源蜂鸣器到另一个引脚,在击掌时播放一段简短的上升音调,让互动更有趣。你需要使用“音乐”模块。
- 状态指示:在待机时,让LED点阵以缓慢的节奏显示一个“等待”动画(如闪烁的心形),当检测到手时,先快速闪烁两下作为“发现目标”的提示,再执行击掌。
- 个性化外观:用彩笔、贴纸、毛毡布等装饰你的纸板机器人,给它画上眼睛、嘴巴,甚至穿上“衣服”,让它更具个性。
6.3 项目扩展思路
这个基础项目可以衍生出许多变体:
- 双人击掌机器人:使用两个红外传感器,分别检测左手和右手,用两个舵机控制两条手臂,实现左右交替或同时击掌。
- “猜拳”机器人:将手臂末端做成手掌形状,可以摆出“石头、剪刀、布”的姿势。利用Micro:bit内置的加速度计(摇晃)来随机选择一种姿势,与人对战。
- 情绪化机器人:加入更多的传感器,如声音传感器。根据环境声音大小,让机器人做出不同的反应:安静时“睡觉”(手臂下垂,LED显示Zzz),拍手时“兴奋击掌”,大声喊叫时“害怕躲闪”(手臂捂住“脸”)。
- 远程击掌:利用Micro:bit的无线电功能,制作两个机器人。当其中一个检测到击掌时,通过无线电信号通知另一个,两个机器人同时做出击掌动作,实现“远程互动”。
制作这个纸板击掌机器人的过程,远比最终那个会动的小家伙更有价值。它完整地走了一遍“发现问题-设计方案-动手实现-调试优化”的工程闭环。你遇到的每一个小麻烦,比如舵机抖了一下、传感器太灵敏,都是学习底层原理的绝佳机会。我自己的第一个版本就因为电源问题折腾了好久,最后加了电容才稳定下来,这个教训让我对电机驱动的电源设计有了刻骨铭心的认识。所以,不要怕出问题,解决问题的过程才是真正的收获。当你调试成功,看到机器人稳稳地和你击掌的那一刻,那种成就感就是驱动你探索下一个项目的最好燃料。
