基于Micro:bit的智能射击靶:从传感器到嵌入式系统的创客实践
1. 项目概述一个能自动计分的智能射击靶前阵子带着几个学生做创客项目想找一个既能练手编程、又能玩得起来的硬件项目。最后我们决定做一个智能射击靶——不是那种简单的物理靶子而是被球击中后能自动识别区域、实时计分还能把分数显示出来的“聪明”靶子。核心就是用一块Micro:bit微控制器搭配一些简单的导电材料自己动手从切割、组装到编程完整地做出来。这个项目麻雀虽小五脏俱全。它涉及了嵌入式系统最基础的输入输出控制用自制的传感器其实就是铜箔胶带来检测“命中”事件用Micro:bit来处理逻辑判断命中区域并累加分数最后用点阵屏这个输出设备来显示结果。整个制作过程还融入了激光切割来加工结构件让作品看起来更规整、专业。它完美地诠释了物联网和智能硬件的入门思想感知物理世界的变化经过计算再给出反馈。无论是用于创客教育的课堂还是作为一个有趣的交互装置放在家里玩都非常合适。接下来我会把这个项目的完整实现过程拆解给你看从设计思路、材料准备、结构组装到核心的电路连接和程序编写最后还有我们调试时踩过的坑和解决方案。即使你之前没怎么接触过Micro:bit跟着步骤做也能把它做出来。2. 核心设计思路与方案选型2.1 为什么选择Micro:bit与物理计算方案选择Micro:bit作为这个项目的核心大脑几乎是入门级交互装置的最优解。首先它集成度高板载了5x5的LED点阵屏、两个可编程按钮、加速度计、磁力计等我们正好用它的屏幕来显示分数用按钮来重置分数。其次它的GPIO通用输入输出引脚可以方便地读取数字信号这正是我们检测“射击命中”所需要的。最后其图形化编程环境MakeCode对初学者极其友好降低了编程门槛能让制作者更专注于逻辑和交互设计本身。整个装置的检测原理我们采用了最直观的“物理接触导通”方案。市面上当然有更“高级”的方案比如用红外对管、压力传感器甚至摄像头图像识别。但对于一个教学和快速原型项目来说这些方案要么成本高要么调试复杂。我们的方案是每个靶心区域比如同心圆环都是一个独立的导电部件平时它们之间是绝缘的。当一个导电的抛射物比如包着铝箔的乒乓球同时碰到两个相邻的、但原本绝缘的部件时就相当于在它们之间“搭了一座桥”形成了一个电路回路。Micro:bit通过检测这个回路的通断就能判断出是哪个区域被击中了。这个方案成本极低主要材料是铜箔胶带原理直观非常适合讲解传感器的基础——将物理接触事件转化为可识别的电信号。2.2 机械结构与电路设计解析整个靶子的机械结构主要承担两个功能第一为三个不同分值的靶心圆环提供稳定的、分层的支撑第二为每个圆环配置一个独立的“触发机构”。我们设计了一个三层的同心圆靶面从外到内直径依次减小分别代表1分、2分和3分区。它们被固定在一根垂直的金属轴上但彼此之间用绝缘垫片隔开。关键在于每个金属圆环都不能直接与公共地那根金属轴导通。每个圆环都连接了一根信号线引到Micro:bit的一个IO口上。而“触发机构”是一组固定在底座上的、带有弹性的导电触片。每个触片的位置都精确对准一个圆环的内侧。在静止状态下触片和圆环之间有微小间隙电路是断开的。当靶子受到冲击发生摆动时圆环会晃动并碰到对应的导电触片从而将该圆环的信号线与公共地短暂接通。Micro:bit检测到这个接通事件就知道对应的区域被击中了。这种“动-静接触”的设计比让抛射物直接去短路两个部件更可靠。因为它将一次随机的、可能接触不良的撞击转化为了一个结构性的、可靠的闭合动作大大提高了检测的成功率。电路连接也非常清晰金属轴连接Micro:bit的3.3V引脚作为上拉电压源三个圆环的信号线分别连接三个配置为“上拉输入”模式的GPIO引脚如P0、P1、P2。当电路未导通时IO口读到的是高电平1当圆环碰到触片导通到地时IO口被拉低到低电平0程序便捕获到这个下降沿信号。注意上拉电阻的重要性Micro:bit的IO口在设置为输入模式时内部可以启用上拉电阻。这相当于在信号线和电源3.3V之间连接了一个电阻。这样当信号线悬空未连接时会被稳定地拉至高电平避免因静电干扰产生误触发。只有当信号线被主动拉低到地时才会读到低电平。这是我们电路稳定工作的关键。3. 材料准备与激光切割加工3.1 物料清单与工具准备要完成这个项目你需要准备以下材料和工具。大部分材料都很常见可以在电子市场或网上买到。电子部分Micro:bit主板 x1项目核心。Micro:bit电池扩展板 x1用于安装2节AAA电池提供移动电源。务必确认扩展板带有开关。AAA电池 x2。铜箔胶带带导电背胶x1卷宽度建议5mm或10mm。这是制作导电触片和连接线的关键材料比导线更容易在纸质或木制结构上粘贴。鳄鱼夹测试线 x4用于连接固定部分的电路和可移动的Micro:bit方便调试和拆卸。绝缘胶带 x1卷用于隔离不该导通的部位。细砂纸用于打磨激光切割后的材料边缘特别是需要导电接触的部位确保接触良好。结构部分激光切割材料我们选用3mm厚的椴木板或亚克力板。你需要准备足够切割出所有结构件的一大张。椴木板更容易加工和粘贴亚克力板更美观但较脆。绝对不要使用易燃、易产生有毒气体的材料进行激光切割。金属轴 x1长度约275mm直径2.5mm的不锈钢棒或黄铜棒。它既是结构的核心支撑也是电路的公共地线。M3螺母与螺栓若干用于紧固结构。准备不同长度的如10mm和20mm。强力胶或白乳胶用于粘合非承重的结构部分。一小块海绵或泡沫双面胶用于制作弹性触片的缓冲层。工具激光切割机用于加工所有木板/亚克力板结构件。如果你没有条件也可以用手工切割如线锯配合钻床但精度和效率会低很多。电脑用于Micro:bit编程。Micro-USB数据线用于给Micro:bit下载程序。万用表强烈建议准备。在电路调试阶段用它来测试通断、排查故障无可替代。基本手工工具螺丝刀、钳子、剪刀、美工刀。3.2 激光切割文件设计与加工要点结构设计我用的是矢量绘图软件如Inkscape, Adobe Illustrator最终导出为SVG格式供激光切割机使用。整个靶子主要分为以下几个部分底座与侧板构成一个稳定的箱体用于容纳所有内部机构和安装Micro:bit。侧板上需要开一个矩形孔用于插入Micro:bit电池扩展板让Micro:bit的屏幕露在外面。靶心圆环三个同心圆环分别对应大、中、小三个分值区域。每个圆环需要设计一个“连接耳”上面预留小孔用于穿过金属轴和连接信号线。绝缘垫片圆形垫片中间有孔用于套在金属轴上隔开三个靶心圆环确保它们彼此绝缘。触发弹片支架这是关键部件。它需要固定在底座上其顶端是一个带有弹性的“悬臂梁”结构梁的末端粘贴铜箔作为导电触片。当圆环摆动时会挤压这个悬臂梁使铜箔与圆环内侧可靠接触。电池盒/Micro:bit支架一个简单的插槽结构用于固定电池扩展板。激光加工参数建议以3mm椴木板为例功率约45-50%根据机器校准。速度8-12 mm/s。切割次数1-2次确保切透。焦点务必调整到材料表面。实操心得文件分层与标注在绘制SVG时我习惯把不同功能、需要不同切割参数比如有的只是雕刻轮廓有的需要切透的部件放在不同的图层并用颜色区分如红色线条代表切割蓝色代表雕刻。在文件里用文字标注每个部件的名称和所需数量这样在操作激光切割机时不容易出错后期清点零件也方便。加工完成后仔细检查每个零件是否切割完整用小刀或砂纸清理边缘的毛刺和激光灼烧产生的炭黑特别是所有需要导电接触或粘贴的部位清洁的表面能保证后续电路连接的可靠性。4. 机械结构组装详解4.1 主体框架与靶心安装首先组装靶子的外框。将底座板、两侧板、背板和后顶板按照设计好的榫卯或卡槽结构拼合起来可以用白乳胶在接缝处加固。确保整个框架方正、稳固。这是所有内部机构的基础必须扎实。接下来安装核心的靶心组件。步骤如下将金属轴垂直插入底座上预留的孔中。可以在孔内点一点胶水如401胶水固定轴的下端确保轴垂直于底座。依次套入部件先套一个绝缘垫片到轴上紧贴底座然后套入最大1分的靶心圆环再套一个绝缘垫片接着套入中等2分的靶心圆环再一个绝缘垫片最后套入最小3分的靶心圆环。顶部可以用一个螺母或设计一个顶盖稍微锁紧但不要过紧要保证圆环能在受到撞击时轻微摆动。关键检查用万用表的通断档分别测量金属轴与三个圆环之间是否导通。正常情况下电阻应为无穷大显示OL即绝缘。如果发现某个圆环与轴导通检查是否是垫片破损或者圆环与轴之间有金属毛刺短路。必须确保三者之间以及它们与轴之间完全绝缘。4.2 触发弹片机构的制作与安装这是整个机械部分最精细、也最影响灵敏度的地方。制作弹性触片取一小段铜箔胶带粘贴在激光切割好的“悬臂梁”弹片末端。为了增加接触的可靠性和弹性可以在铜箔下面先贴一小块薄海绵或泡沫胶再贴铜箔这样形成一个有缓冲的导电面。安装弹片支架将三个弹片支架分别用胶水或螺丝固定在底座内壁的预定位置上。位置需要精确调整确保每个弹片末端的铜箔正好对准其对应靶心圆环的内侧边缘且保持约1-2毫米的初始间隙。这个间隙很重要太大需要很大力气才能触发太小容易因自身抖动误触发。连接信号线从每个弹片支架的根部非活动端用铜箔胶带“走线”将导电层延伸到底座边缘并预留一个焊接点或夹持点。这里铜箔胶带就像印刷电路板PCB上的导线。走线时注意避免不同路的铜箔交叉如果必须交叉要在交叉点垫一层绝缘胶带。连接公共地用一根导线一端连接金属轴可以用鳄鱼夹临时夹住或焊接另一端也引到底座边缘的公共接地点。注意事项弹片的弹性与耐久性悬臂梁的长度和厚度决定了它的弹性。太硬触发费力太软容易疲劳变形。测试时可以用手轻轻拨动靶心圆环去触碰弹片应该能感觉到清晰的“咔哒”感并且松手后弹片和圆环能迅速分离。如果弹片回弹无力可能需要更换更厚或有韧性的材料。5. 电路连接与布线技巧5.1 Micro:bit引脚分配与连接完成机械部分后我们开始连接电路。Micro:bit的引脚分配如下3V连接至金属轴。这是我们电路的电源正极。GND连接至一个公共的接地排可以用一小块铜箔贴在底座内部所有弹片支架的导电部分最终都要通过导线连接到这里。注意在电路中弹片是接地的。P0连接至**3分区域最小圆环**对应的弹片信号线。P1连接至**2分区域中圆环**对应的弹片信号线。P2连接至**1分区域最大圆环**对应的弹片信号线。为什么这样连接这形成了一个“上拉电阻-开关-地”的电路。以P0引脚为例Micro:bit内部将P0设置为“上拉输入”模式引脚内部通过一个电阻连接到3.3V。在外部P0连接到3分区的弹片信号线而弹片本身是接地的。平时弹片未接触圆环开关断开P0引脚被内部上拉电阻拉到高电平1。当3分区被击中圆环摆动碰到弹片相当于P0通过圆环、金属轴连接到3V了吗不这里有个关键点弹片是接地GND的。圆环连接的是3V金属轴。当圆环接触弹片时实际上是将3V通过圆环和GND通过弹片直接短路了不对这会短路这里的设计需要修正。正确的电路逻辑应该是金属轴连接的是GND而不是3V。每个靶心圆环都是独立的它们之间绝缘且都不直接接GND或3V。每个圆环连接一根信号线到Micro:bit的一个IO口如P0、P1、P2并且这些IO口在程序中被设置为上拉输入模式内部连接到3.3V。每个弹片则全部连接在一起并接到Micro:bit的GND。工作流程初始状态IO口上拉为高电平1。圆环与弹片不接触。当某个圆环被击中碰到对应弹片该圆环的信号线即IO口通过圆环-弹片这条路径被连接到GND。IO口从高电平1被拉低到低电平0。Micro:bit程序检测到这个引脚的电平变化从1到0判定为该区域被击中。所以接线更正为金属轴连接至Micro:bit的GND。弹片1对应1分区、弹片2对应2分区、弹片3对应3分区全部连接在一起并也连接到Micro:bit的GND。实际上因为弹片支架是固定在金属底座上的如果底座是导电的并接了GND那么弹片自然就接地了。1分区圆环连接至P2。2分区圆环连接至P1。3分区圆环连接至P0。5.2 布线工艺与可靠性保障在狭小的木结构内部布线整洁和可靠是关键。使用铜箔胶带走线对于固定在底座上的线路优先使用铜箔胶带。像贴壁纸一样沿着设计好的路径粘贴用力刮平使其粘牢。在拐角处可以将胶带折叠或裁剪后拼接。焊接节点在铜箔胶带的末端、以及与鳄鱼夹导线的连接点最好进行点焊。焊锡能使连接更牢固可靠。如果没有电烙铁务必确保鳄鱼夹咬合在铜箔上面积足够大、夹得很紧并可以用绝缘胶带缠绕固定。绝缘处理所有裸露的铜箔、焊点以及可能发生短路的地方如两根靠近的铜箔都要用绝缘胶带覆盖。特别是金属轴穿过各层圆环和垫片的地方确保轴只与GND线连接不会意外碰到任何信号线。预留调试接口将Micro:bit的引脚用杜邦线引到一个排针上或者直接用鳄鱼夹连接。这样在调试阶段可以方便地测量和调整连接而不用把线焊死。完成所有连接后先不要安装电池。用万用表进行全面的通断测试测试每个圆环与金属轴GND之间正常应为断路。测试每个圆环与其对应的弹片之间手动使它们接触应显示导通松开应显示断路。测试任意两个圆环之间应为断路。测试任意两个弹片之间因为都接了GND应为导通。6. Micro:bit编程逻辑与代码实现6.1 MakeCode图形化编程详解我们使用微软的MakeCode for Micro:bit在线编辑器进行编程。它的图形化积木块非常适合逻辑可视化。程序的核心逻辑如下初始化开机时设置变量分数为0。在LED屏幕上显示分数0。将引脚P0、P1、P2都设置为上拉输入模式。这意味着引脚内部连接了一个上拉电阻到3.3V默认读取为数字值“1”高电平。主循环持续检测不断检查P0、P1、P2的数字输入值。如果检测到某个引脚的值从1变为0即从高电平变为低电平就表示对应的靶心被击中电路导通到GND。根据被击中的引脚给分数变量增加相应的值P0加3P1加2P2加1。更新LED屏幕显示的分数。加入防抖动延时在检测到一次击中并加分后让程序等待一小段时间比如200毫秒再继续检测。这是为了防止一次物理接触中由于振动导致电平在短时间内多次跳变被误判为多次击中。重置功能监听按钮A的按下事件。当按钮A被按下时将分数变量重置为0并更新屏幕显示。在MakeCode中具体的积木块拼接如下在“输入”类别中找到“当引脚P0被按下时”积木块。但注意这个“被按下”在Micro:bit里通常指引脚连接到GND低电平。我们可以直接用这个块来对应每个引脚。或者为了更精确地控制防抖动可以使用“无限循环”块里面放入“如果...那么...”判断。判断条件来自“引脚”类别下的“读取数字引脚P0”积木块将其与“0”进行比较。在“变量”类别中创建“分数”变量并使用“更改分数 by 1”等积木块来增减分数。在“基本”类别中使用“显示数字”积木块来显示分数。在“输入”类别中使用“当按钮A被按下时”积木块来实现重置。6.2 代码优化与功能扩展基础功能实现后可以考虑一些优化和扩展让体验更好音效反馈利用Micro:bit的蜂鸣器通过引脚P0但注意与传感器引脚冲突或者外接一个蜂鸣器模块。在检测到击中时播放一个简短的音效不同分值可以播放不同音调互动感更强。视觉特效击中时除了显示分数还可以让LED屏幕闪烁一下特定的图案比如一个靶心图案。连击奖励通过变量记录连续击中的次数且不脱靶如果连续击中高分区可以额外奖励分数。倒计时模式利用Micro:bit的计时器功能增加一个限时射击模式。按下按钮B开始60秒倒计时时间到后显示最终得分。无线对战如果你有两套Micro:bit可以利用其内置的无线电功能。让两个靶子之间可以无线通信实现双人对战实时显示双方比分。编程心得状态变量防误触在实际测试中我们发现即使加了延时快速连续射击时还是可能误判。一个更稳健的方法是引入“状态变量”。例如为每个靶区设置一个“是否已触发”的变量。当检测到击中时如果该变量为“假”则计分并将其设为“真”。然后只有当检测到该引脚恢复到高电平1且保持一小段时间后才将这个变量重置为“假”允许下一次计分。这能有效处理一次接触中的抖动问题。7. 系统集成、调试与问题排查7.1 整机组装与功能测试将所有部件组装到一起将连接好导线的底座内部清理干净确保没有线材阻碍靶心圆环或弹片的运动。将Micro:bit安装到电池扩展板上再一起插入侧面的支架。用鳄鱼夹测试线按照“5.1”章节更正后的连接方式将底座内部的信号线来自各圆环、公共地线金属轴及弹片公共端与Micro:bit扩展板上的对应引脚连接起来。装入电池打开电源开关。首次上电测试流程观察屏幕Micro:bit应正常启动显示初始分数0。静态测试用手轻轻拨动每个靶心圆环使其接触对应的弹片。观察LED屏幕上的分数是否按预期增加小环3中环2大环1。同时观察当触发一个环时其他环的分数是否被误加这可以检查电路绝缘是否良好。动态测试使用准备好的抛射物如包有铝箔的小球在合适的距离进行投掷射击。测试不同力度、不同角度下的触发可靠性。重置测试按下Micro:bit上的A按钮分数应归零。7.2 常见问题与解决方案速查表在制作和调试过程中你很可能遇到以下问题。这里列出了排查思路和解决方法问题现象可能原因排查与解决方法任何区域被击中都没有反应1. 电源未打开或电池没电。2. Micro:bit程序未下载或损坏。3. 公共地GND未连接好。1. 检查电池盒开关用万用表测电池电压。2. 重新下载程序到Micro:bit确保下载成功。3. 用万用表检查金属轴是否与Micro:bit的GND引脚连通。某个特定区域无反应1. 该区域信号线断路铜箔脱落、鳄鱼夹没夹好。2. 该区域弹片与圆环间隙过大或弹片失去弹性。3. 该区域对应的Micro:bit引脚设置错误或损坏。1. 用万用表从圆环到Micro:bit引脚逐段测量通断。2. 调整弹片位置减小间隙或更换更有弹性的弹片材料。3. 在程序中临时将该区域引脚换到另一个确认好用的引脚上测试。分数乱跳或一次击中加多次分1. 机械抖动导致接触弹跳抖动。2. 电路绝缘不良存在轻微短路或漏电。1.软件上增加防抖动延时或采用“状态变量”法见6.2。2.硬件上检查并清洁所有绝缘部位确保铜箔间无意外接触弹片动作后应能迅速回位避免持续接触。未击中时自动加分误触发1. 环境电磁干扰可能性较小。2. 引脚模式设置错误应为上拉输入若悬空输入则易受干扰。3. 弹片与圆环间隙过小自身振动导致接触。4. 信号线太长且未屏蔽引入干扰。1. 确认程序中引脚已设置为“上拉输入”。2. 适当增大弹片与圆环的初始间隙。3. 整理线材尽量缩短信号线长度。按下重置按钮A无反应1. 按钮A损坏罕见。2. 程序中的事件积木块拼接错误。1. 测试Micro:bit上其他按钮功能是否正常。2. 检查MakeCode中“当按钮A被按下”的积木块是否被正确放置并且其内部的设置分数、显示分数积木块逻辑正确。显示屏幕混乱或不显示1. 程序逻辑错误如在循环内频繁清屏又显示。2. Micro:bit与扩展板接触不良。1. 简化程序测试例如只保留显示一个固定数字的功能看是否正常。2. 重新插拔Micro:bit确保金手指接触良好。最终调试技巧当一切就绪后进行压力测试。快速、连续地射击不同区域观察计分是否准确、稳定。调整弹片的松紧和间隙直到找到一个灵敏度和抗误触发能力的最佳平衡点。你还可以用不同重量、不同材质的抛射物进行测试了解装置的适应性。这个基于Micro:bit的智能计分射击靶项目就全部完成了。从构思、画图、切割、组装、接线到编程调试它完整地走通了一个智能硬件原型的开发流程。最大的收获不是做出了一个玩具而是在解决一个个具体问题比如机械结构的稳定性、电路连接的可靠性、软件防抖的逻辑的过程中对嵌入式系统如何与物理世界交互有了真切的理解。下次你可以尝试给它加上无线计分牌、或者用舵机做一个自动复位装置乐趣和挑战又会是全新的。