用纸板与代码制作机械敲击手:从物理编程到创客实践
1. 项目概述一个用纸板和代码实现的“敲击手”几年前我在一个创客工作坊里看到一群孩子围着一个用纸板做的机械手看着它的手指按照预设的节奏敲击桌面发出“哒哒哒”的声音所有人都被迷住了。那个项目就是“Tappy Robotic Hand”敲击机器人手。它没有复杂的3D打印关节也没有昂贵的传感器阵列核心就是一个Circuit Playground Express开发板、一个连续旋转舵机再加上随处可见的瓦楞纸板。但正是这种极简与巧思的结合让它成为了一个绝佳的入门项目完美诠释了“用简单的工具实现有趣创意”的创客精神。这个项目的核心玩法在于“物理编程”。你不需要在电脑前敲打复杂的代码来控制每根手指的起落而是通过在一个旋转的纸筒上插入或拔出小纸片我们称之为“编程滑块”来设定敲击序列。当纸筒旋转时这些滑块会触发微动开关进而通过MakeCode图形化编程环境控制舵机带动手指完成敲击动作。它本质上是一个机械式的“可编程控制器”非常适合教育场景能直观地展示从物理输入到逻辑判断再到机械输出的完整过程。无论你是刚接触电子制作的新手想找一个有趣又不吓人的项目练手还是教育工作者希望找到一个能融合Arduino兼容硬件、基础机械原理和编程思维的课堂案例亦或是资深玩家想给自己或孩子做一个独特的桌面解压玩具这个“敲击手”都能满足你。接下来我将带你从零开始完整复现这个项目并分享我在制作过程中积累的所有细节、技巧和避坑心得。2. 核心思路与物料清单解析2.1 设计思路拆解为什么是“机械编程”这个项目的巧妙之处在于其“输入-处理-输出”的闭环设计它避开了直接编写复杂运动轨迹代码的难点转而采用了一种更直观、更物理化的交互方式。输入物理编程盘一个由舵机带动旋转的纸筒表面等距贴有导电铜箔胶带作为“轨道”。编程滑块小纸片上贴有导电胶带当插入纸筒的卡槽时滑块上的导电胶带就会连接纸筒上的两条独立轨道。这实际上构成了一个简易的“开关”。纸筒旋转一周滑块就会在特定角度位置触发一次电路连通。处理Circuit Playground Express MakeCode开发板上的某个引脚例如A1被设置为“上拉输入”模式并连接到其中一条轨道。另一条轨道接地。当滑块连通两条轨道时该引脚会从高电平被拉低到低电平。MakeCode程序持续检测这个引脚的状态。一旦检测到低电平即“按下”就执行“敲击一次”的命令。输出连杆机构与手指连续旋转舵机通过一个偏心轮可以用舵机轮或自己制作带动一根主连杆做圆周运动。主连杆再通过五根从动连杆我用的是竹签分别连接到五根手指上。这个设计将舵机单一的旋转运动转换成了五根手指近似同步的上下敲击运动。为什么选择连续旋转舵机而不是标准舵机标准舵机只能旋转180度并且需要指定角度。而我们需要的是持续的、单向的旋转来带动编程盘循环转动。连续旋转舵机去掉了内部的位置反馈给定一个速度信号就会一直转正好符合我们“带动纸筒匀速旋转”的需求。在MakeCode中我们可以简单地设置其旋转速度而不必关心角度。2.2 物料清单与选型建议原项目给出了Adafruit的官方物料列表但对于我们来说完全可以在保证核心功能的前提下进行灵活的替代和优化。以下是经过实战检验的清单核心电子部件不可替代Circuit Playground Express (CPX)这是项目的大脑。选择它是因为其集成度高自带多个可编程按键、LED灯、传感器且对MakeCode和CircuitPython支持极好非常适合新手。注意是“Express”版本不是早期的“Classic”版本。连续旋转舵机型号如SG90的连续旋转版本。关键参数是扭矩至少1.2kg/cm工作电压4.8-6V。扭矩太小可能带不动纸筒和连杆机构。微动开关用于检测编程滑块。这是对原项目“导电胶带”方案的一个可靠化改进。选用小型、杠杆臂长的微动开关触发更灵敏。电源方案二选一锂电池方案推荐一块3.7V、500mAh以上的锂聚合物电池搭配一个带开关的JST PH2.0接口电池盒。CPX内置充电电路可以通过USB口直接为电池充电非常方便。干电池方案一个3节AAA电池的电池盒输出约4.5V。务必选择带开关的版本。成本更低但需要更换电池。连接线与结构材料导线杜邦线公对公、母对母、公对母若干用于连接CPX、舵机和微动开关。鳄鱼夹测试线在调试阶段非常有用。结构材料主体框架5mm厚的瓦楞纸板快递箱即可。需要准备大约A3纸大小的面积。手指同样使用瓦楞纸板裁剪。为了更美观耐用我后来用3D打印了手指和部分连接件效果提升显著。主轴与连杆一根直径2-3mm、长约15cm的金属轴可用自行车辐条或粗铁丝代替。竹签用于制作从动连杆。编程纸筒纸质卷筒芯保鲜膜、锡纸的芯或自己用纸卷制。固定与连接热熔胶枪及胶棒绝对主力、白乳胶用于纸筒加强、螺丝螺母M2或M3规格用于固定舵机和开关。工具准备必备美工刀、切割垫、钢尺、剪刀、尖嘴钳、螺丝刀、电烙铁焊接开关引线更可靠。可选但推荐小型手钻打安装孔、3D打印机用于制作更精密的零件。注意关于“导电胶带”方案的取舍原项目使用导电铜箔胶带在纸筒上制作轨道用带胶带的纸片作为滑块。这个方案创意十足且成本低但存在接触不良、易氧化、耐久性差的问题。在潮湿环境或使用一段时间后故障率会升高。因此我在后续制作中将其改进为“微动开关凸轮滑块”的机械触发方式可靠性大增。下文将主要以这种改进方案进行讲解。3. 机械结构制作与核心技巧机械部分是整个项目的骨架它的精度和可靠性直接决定了最终动作的流畅度。我们将分步构建手部机构、驱动机构和编程触发机构。3.1 手部与连杆机构制作手指的动作原理是“曲柄滑块机构”的变体。舵机带动一个偏心轮曲柄旋转偏心轮上的连杆销带动主连杆左右移动主连杆再通过五根从动连杆推动五根手指绕轴上下摆动。制作手掌基座切割一块约15cm x 10cm的厚纸板作为手掌。在手掌前端等距确定五个手指的安装位置。用美工刀开出宽约3mm的缝隙用于插入手指根部的转轴。在手掌中部靠下的位置开一个长方形窗口用于安装主连杆和从动连杆的连接件。制作手指用纸板剪出5个长约8-10cm、宽约1.5cm的手指形状。在手指根部约1cm处垂直插入一小段竹签作为转轴。用热熔胶固定。将手指的转轴插入手掌的缝隙确保手指能灵活上下摆动。在手掌背面用一小块纸板作为“限位卡”粘在转轴两端防止手指脱落。制作与安装连杆主连杆取一根竹签或细木棍长度略宽于五根手指的间距。这是最关键的传动件。从动连杆剪5段竹签每段约4-5cm。连接在每根手指背面距离转轴约2/3处这个点是“力臂”影响敲击力度和幅度需要调试用热熔胶固定从动连杆的一端。另一端用热熔胶以一定角度粘在主连杆上。关键技巧——调试连杆角度这是最需要耐心的一步。不要一次性把所有连杆都粘死。先临时固定手动推动主连杆观察每根手指的摆动幅度是否一致运动是否顺畅。理想状态是当主连杆移动到一端极限时所有手指刚好抬到最高移动到另一端时所有手指同时敲下。可能需要反复调整从动连杆在手指上的粘接点以及粘在主连杆上的角度。调试满意后再彻底加固。3.2 驱动机构舵机与偏心轮安装固定舵机在手掌基座的后部或侧面为舵机开一个安装孔使其输出轴朝上。用螺丝或扎带将舵机牢牢固定。确保舵机在高速旋转时不会晃动。制作偏心轮最简单的方法是使用舵机附带的塑料轮。在偏离圆心约4-5mm的位置用烙铁烫一个小孔或安装一个小螺丝作为连杆销。更优的方案是3D打印一个偏心轮。可以设计成与舵机输出轴完美咬合并且预留好安装连杆销的孔位。这样同心度更好运行更平稳。连接主连杆将主连杆的一端与从动连杆连接处的另一端与偏心轮上的连杆销连接。这里需要一个“活动关节”。我使用的方法是在主连杆端头钻一个小孔套在连杆销上然后在销子末端热熔胶一个小帽防止脱落。这样既能传递动力又允许一定范围的摆动。3.3 编程触发机构从“导电胶带”到“微动开关”的改进原方案的纸筒编程盘创意好但稳定性是短板。以下是改进的机械触发方案制作步骤制作编程鼓取一个纸质卷筒芯或者用硬卡纸卷一个直径约6-8cm的圆筒。在圆筒表面沿着轴向画出8-12条等分线代表可编程的“时间槽”。沿着每条等分线在纸筒上开一个宽约2mm、深约3mm的卡槽。制作编程滑块用硬卡纸剪出若干小矩形片宽度略小于纸筒上卡槽的间距长度要保证插入卡槽后能凸出一部分。在滑块的一端粘贴一小块凸起的材料如另一层纸板形成“凸点”。安装微动开关设计一个固定支架使微动开关的杠杆臂正好轻轻搭在编程鼓的表面上。支架可以用纸板折叠或3D打印。将支架固定在底座上位置对应编程鼓旋转时滑块凸起会经过并压下杠杆臂的点。将微动开关的三根引线公共端COM、常开端NO、常闭端NC焊接上导线。我们通常使用COM和NO即平时断开按下时连通。组装与联动将编程鼓的中心轴与连续旋转舵机的输出轴连接固定。确保鼓身圆整旋转时不会偏心晃动。调整微动开关的位置使得没有插入滑块的卡槽经过时开关杠杆不被触发而当插有滑块的卡槽经过时滑块上的“凸点”能准确压下杠杆触发开关。实操心得机械调试的“三步法”空载测试先不给舵机通电手动旋转编程鼓和偏心轮检查所有运动部件是否顺畅有无卡滞。重点检查手指连杆机构是否同步微动开关触发是否清脆。低速带电测试用MakeCode写一个最简单的程序让舵机以很低的速度如速度值30旋转。观察整个系统在动力下的运行状态。负载与速度测试逐步提高舵机速度并插入不同数量的编程滑块观察在不同节奏下机构的稳定性。高速下最容易暴露连杆松动、偏心轮偏心度过大导致振动等问题。4. 电路连接与MakeCode编程详解机械部分完成后我们赋予它“灵魂”。电路连接很简单编程逻辑是核心。4.1 电路连接图与要点由于无法画图我用文字描述连接方式电源将电池盒的正极红色线连接到CPX的“VOUT”引脚负极黑色线连接到“GND”引脚。务必确认电池开关处于关闭状态。连续旋转舵机舵机的棕色或黑色线 → CPX的任一“GND”引脚。舵机的红色线 → CPX的“VOUT”引脚与电池共电。注意舵机耗电较大务必接在VOUT上不要接在3.3V引脚否则可能损坏CPX。舵机的黄色或橙色信号线 → CPX的“A2”引脚可任选一个支持PWM输出的引脚如A1、A2、A3等。微动开关开关的COM端 → CPX的“A1”引脚可任选一个数字引脚。开关的NO端 → CPX的任一“GND”引脚。重要安全提示在连接任何线路尤其是电源线之前一定要断开电池或USB连接。焊接或使用热熔胶时注意避免烫伤和短路。舵机在堵转被卡住无法转动时电流会急剧增大长时间堵转会烧毁舵机或损坏电路板调试时需特别注意。4.2 MakeCode程序逻辑剖析我们使用微软的MakeCode for Adafruit在线编辑器。访问对应网站选择Circuit Playground Express。程序主要包含两个并行的逻辑我们用“无限循环”和“事件驱动”来实现。第一部分主循环控制舵机匀速旋转// 这是一个逻辑描述非实际代码块 当开机时 设置舵机引脚 A2 为 连续旋转舵机 将舵机 A2 的速度设为 50 // 速度范围-100全速反转到100全速正转0为停止这段代码放在“当开机时”积木块里。速度值“50”是一个中等速度你可以根据实际效果调整。速度太快可能导致敲击模糊且机械压力大太慢则失去节奏感。第二部分检测敲击事件并触发动作这是核心逻辑。我们需要持续检测A1引脚的状态。// 这是一个逻辑描述非实际代码块 无限循环 如果 读取引脚 A1 为 低 电平 那么 执行一次“敲击”动作 等待 直到 读取引脚 A1 为 高 电平 // 防抖等待滑块离开但是使用“无限循环”检测可能会占用过多资源。更优雅的方式是使用中断或事件监听。MakeCode提供了“当引脚P1按下时”的事件积木但它检测的是瞬时按下。对于我们的长滑块需要一点技巧方案使用“模拟引脚”的阈值判断推荐将微动开关连接到模拟引脚如A1利用其模拟值的变化来判断。// 这是一个逻辑描述非实际代码块 无限循环 如果 引脚 A1 的模拟读数 500 那么 // 当开关按下读数会从~1023下降到接近0 播放音调 中音C 持续 100毫秒 // 用一个声音反馈代表敲击或者控制LED 将舵机 A2 的速度设为 30 // 可选敲击时稍微减速让动作更清晰 等待 50毫秒 将舵机 A2 的速度设为 50 // 恢复原速 等待 直到 引脚 A1 的模拟读数 800 // 防抖等待滑块完全离开更进阶的玩法编程不同的敲击模式我们可以利用CPX板载的按键来切换不同的敲击模式。例如// 这是一个逻辑描述非实际代码块 当 按键A 被按下 将变量“模式”设为 1 显示图案 爱心 当 按键B 被按下 将变量“模式”设为 2 显示图案 X型 无限循环 如果 引脚 A1 的模拟读数 500 那么 如果 变量“模式”等于 1 那么 // 模式1所有手指一起敲 将舵机速度设为 30 等待 100毫秒 将舵机速度设为 50 否则 如果 变量“模式”等于 2 那么 // 模式2敲击时让LED灯带闪烁 点亮所有NeoPixel为 红色 将舵机速度设为 20 等待 150毫秒 关闭所有NeoPixel 将舵机速度设为 50 等待 直到 引脚 A1 的模拟读数 800通过修改变量“模式”的值你可以在同一个硬件上实现多种反馈效果大大增加了项目的可玩性。5. 系统总装、调试与问题排查当机械、电路、程序都准备就绪后最后的组装和调试是确保项目成功的关键一步。5.1 分步总装流程独立子系统测试仅连接电池和CPX上传一个简单的LED闪烁程序确认核心板工作正常。单独连接舵机到CPX上传一个让舵机正反转的程序确认舵机响应正常。用一段导线短接微动开关的COM和NO端模拟按下在MakeCode的模拟器中或通过板载LED观察输入检测是否正常。机械电子整合在断电状态下将所有电子部件按照电路连接图接好。将舵机牢固地安装到手掌基座上并将偏心轮与主连杆连接好。将编程鼓安装到舵机轴上并调整好微动开关的位置。上电初调打开电池开关。程序应开始运行舵机带动编程鼓和手指开始运动。手动插入一个编程滑块观察当滑块触发微动开关时手指是否有一个明显的“顿挫”或额外的敲击动作取决于你的程序逻辑。5.2 常见问题与解决方案速查表以下是我在多次制作和教学中遇到的高频问题及解决方法问题现象可能原因排查步骤与解决方案舵机不转1. 电源未接通或电压不足。2. 信号线接错引脚或接触不良。3. 程序未设置舵机或速度值为0。1. 检查电池开关、电量用万用表测VOUT引脚电压是否3.5V。2. 检查信号线是否接在了程序指定的引脚如A2并重新插拔。3. 检查MakeCode程序中“当开机时”里是否设置了舵机类型和速度。手指动作不同步或卡顿1. 连杆粘接角度不佳产生死点或干涉。2. 各手指转轴摩擦力差异大。3. 偏心轮偏心度过大或连接松动。1.重新调试连杆这是最可能的原因。手动推动主连杆找到卡滞点调整相关连杆的角度。2.润滑转轴在手指转轴处涂抹一点铅笔芯粉末或润滑脂。3.紧固偏心轮确保偏心轮与舵机轴紧固连杆销与主连杆的连接处活动顺畅但无过大间隙。微动开关无法触发1. 开关安装位置过高滑块凸点碰不到杠杆。2. 开关内部损坏或引线虚焊。3. 程序引脚设置错误如上拉未启用。1.调整开关高度确保杠杆臂能被滑块轻松压下约1-2mm。2.用万用表检测在未按下和按下时测量COM与NO端是否通断正常。3.检查程序确认检测的引脚号正确并使用“模拟读数”或“数字读取”积木进行测试。敲击动作不稳定有时触发两次1. 机械振动导致开关抖动弹跳。2. 滑块凸点过长或开关复位不良导致触发时间过长。1.软件防抖在程序中检测到按下后增加一个“等待直到引脚释放”的循环并等待几十毫秒再检测下一次如上面示例代码所示。2.机械调整缩短滑块凸点长度或选用复位力度更强的微动开关。舵机发热严重或有异味1. 机械负载过重卡死或摩擦太大。2. 电源电压过高。立即断电1. 手动转动机构检查是否全程顺畅无卡死点。2. 确认电源电压在舵机标称范围内通常4.8-6V。长时间堵转会烧毁舵机程序上传失败1. CPX未进入引导加载模式。2. USB线或端口问题。3. 电脑驱动问题。1. 先按一下CPX上的“Reset”按钮然后快速双击它直到所有LED变成绿色呼吸灯模式。2. 换一根数据线很多USB线只能充电换一个USB端口试试。3. 在设备管理器中检查是否有未识别的设备。5.3 优化与扩展思路一个基础版本成功后你可以从以下几个方向进行升级让它变得更具个性材料升级使用激光切割的亚克力板或3D打印零件替换纸板。这能极大提升作品的精度、强度和美观度使其从一个实验原型变成一个精致的展示品。交互升级增加输入利用CPX板载的光线传感器、声音传感器或加速度计。例如拍一下手改变敲击节奏或者根据环境光亮度调整敲击速度。丰富输出利用CPX的10个可编程NeoPixel LED让手指敲击时伴随炫酷的灯光秀。或者连接一个小喇叭播放不同的音效。编程升级从MakeCode过渡到CircuitPython。使用CircuitPython你可以编写更复杂的逻辑例如读取多个传感器的值实现更动态的敲击模式甚至让“敲击手”演奏简单的旋律。结构扩展为什么不做一个“双手联弹”的版本使用两个CPX或者一个CPX配合一个舵机驱动板如Adafruit的Crickit控制两只手实现更复杂的节奏互动。这个项目最吸引我的地方就在于它清晰的层次感。从最基础的物理结构搭建到电路连通再到逻辑编程每一步都能获得即时的反馈。它遇到的每一个问题——手指卡住、开关不灵、程序跑飞——都是学习真实世界系统调试的绝佳机会。当你终于看到它按照你插下的滑块精准地敲打出“哒-哒哒-哒”的节奏时那种跨越了物理与数字世界的创造快感正是创客精神的精髓。