从零打造仿生扑翼机器人:Arduino与3D打印的机械传动实践
1. 项目概述:一只会扑腾翅膀的机械鸟
几年前,我为了一个科技竞赛项目,捣鼓出了一只仿生鸟机器人。它的核心目标很简单:用最基础的硬件,让一对3D打印的翅膀像真鸟一样上下扑腾。听起来像是玩具,但整个过程涉及了机械结构设计、电子控制逻辑和动手制作的完整闭环,非常适合想从零开始接触机器人或STEAM教育的朋友。
这个项目的核心,就是解决一个经典的仿生学问题:如何用简单的旋转电机(舵机)模拟鸟类翅膀复杂的多关节运动。真鸟的翅膀有肩关节、肘关节和腕关节,能做出收拢、展开、上下扑动等复合动作。我们当然不需要那么复杂,但至少要让它看起来“像那么回事”。我选择了Arduino Nano作为大脑,两个微型舵机作为肌肉,配合自己设计的3D打印连杆机构和扭力弹簧,最终实现了一个虽然粗糙但原理清晰的扑翼原型机。如果你对机械传动、基础电路和Arduino编程感兴趣,想亲手做一个会动的机械生物,那么这个从概念到实物的拆解过程,或许能给你不少直接的参考。
2. 核心机械结构设计与思路拆解
2.1 仿生运动分析与简化
设计机械翼的第一步,不是画图,而是观察。我花了大量时间观看鸟类慢动作飞行的视频,分析其翅膀在一个扑动周期内的姿态变化。我发现,一个简化但有效的扑翼动作可以分解为两个主要阶段:
- 下扑阶段:翅膀展开,整体向下运动,为身体提供升力和向前的推力。
- 上抬阶段:翅膀部分折叠(以减少阻力),向上运动,准备下一个下扑。
试图用一个舵机直接驱动整个翅膀模仿这种运动是低效甚至不可能的。因为舵机只能做简单的往复旋转,而翅膀需要的是包含展开/收拢的复合运动。因此,我的设计思路是将复杂的生物运动,解耦为可由简单机械结构实现的组合。
2.2 三连杆扑翼机构原理
我最终采用的方案是一种经典的三连杆机构,它巧妙地将一个旋转输入转化为包含角度变化的输出。我将翅膀抽象为三个部分:
- 基座:固定在鸟身体上的部分,包含驱动轴。
- 上臂:与基座驱动轴直接相连,作为主动杆,由舵机直接驱动做往复旋转。
- 前臂:模拟鸟的翼尖部分,通过一个连接杆与基座相连。
其核心工作原理如下:舵机驱动上臂旋转。一根连接杆的一端铰接在基座的一个特定点上(非圆心),另一端铰接在前臂上。当上臂旋转时,它会带动前臂运动。由于连接杆的约束,前臂相对于上臂会产生一个变化的角度。具体来说,在上臂旋转到某个位置时,连接杆会推动前臂更展开;在另一个位置时,又会拉动前臂更收拢。这样,仅仅通过一个舵机的旋转,就同时实现了翅膀整体的上下摆动(由舵机直接提供)和翼尖的展开/收拢动作(由连杆机构转化而来)。
注意:连接杆在基座上的铰接点位置至关重要。这个点的位置决定了前臂(翼尖)收拢与展开的幅度和时机。需要通过软件(如Fusion 360)进行运动仿真,或者实际制作多个版本进行测试,才能找到最优位置。我的经验是,这个点通常不在圆心,且偏向于驱动轴的一侧,才能形成有效的推拉效果。
2.3 弹性元件的引入:扭力弹簧的作用
仅有连杆机构,翅膀只能被动运动。为了模拟鸟类快速下扑后,翅膀依靠自身弹性及肌肉快速回弹上抬的动作,我引入了扭力弹簧。在上臂与基座之间安装一个扭力弹簧,使其具有将上臂向“展开”方向扭转的趋势。
这样,整个运动循环就变成了:
- 舵机主动旋转,克服弹簧扭力,将翅膀下拉(下扑阶段,同时连杆机构使翼尖展开)。
- 当舵机旋转到极限或收到控制信号反转时,舵机卸力或反向运动。
- 此时,储存了弹性势能的扭力弹簧迅速释放,驱动上臂快速回弹,带动翅膀快速上抬(上抬阶段,连杆机构可能使翼尖略微收拢)。
这个“主动驱动+弹性回弹”的组合,不仅让动作更迅速、更有力,也更接近真实生物肌肉的“主动收缩-被动舒张”特性,同时大大降低了舵机所需的功率和扭矩,可以用更小、更便宜的微型舵机实现。
3. 硬件选型与3D建模要点
3.1 核心电子元件清单与考量
硬件不在多,在于匹配和可靠。以下是经过验证的清单:
- 主控:Arduino Nano
- 为什么是Nano? 相比于UNO,Nano体积更小,更适合嵌入到仿生鸟有限的“胸腔”内。其引脚数量和性能对于控制2-3个舵机绰绰有余。价格低廉,兼容性好,是入门项目的绝佳选择。
- 执行器:微型舵机 (9g舵机) × 2
- 型号选择:SG90或MG90S这类常见9克舵机即可。MG90S金属齿轮版本扭矩稍大,更耐用。
- 扭矩考量:驱动翅膀需要克服机构阻力和弹簧扭力。经过估算和实测,在5V电压下扭矩大于1.5kg·cm的舵机基本够用。如果动作迟缓,优先检查机构是否卡顿,其次考虑换扭矩更大的舵机(如15g或20g舵机)。
- 供电警告:切勿直接通过Arduino的5V引脚为两个舵机供电! Arduino板载稳压芯片无法提供瞬间的大电流(舵机启动时电流可达500mA-1A),会导致板子重启或损坏。必须使用外部供电。
- 电源系统
- 方案:一块独立的5V稳压模块(如LM2596降压模块)或一个5V/2A以上的开关电源,为舵机供电。Arduino Nano则可以通过这个5V电源的另一个接口,或者通过USB口单独供电(如果使用USB调试)。更常见的做法是使用一块7.4V锂电池,通过降压模块分别输出5V给舵机和Arduino。
- 结构材料
- 主体:PLA 3D打印件。PLA材料硬度足够,易于打印,是原型制作的首选。
- 连接件:M2或M3的螺丝、螺母、垫片套装,用于组装关节。
- 弹性元件:根据设计尺寸采购的扭力弹簧。需要明确其线径、外径、圈数和扭力系数,或者直接购买多种规格进行测试。
3.2 3D建模与打印实战心得
建模是想法落地的第一步。我使用Fusion 360进行设计,它有强大的参数化设计和装配体运动仿真功能。
- 分件设计原则:不要试图打印一个整体翅膀。应将基座、上臂、前臂、连接杆、身体外壳分别建模。这样便于打印、调整和维修。关节处预留轴承或光滑的轴孔。
- 关节设计关键:
- 轴孔配合:用于插入螺丝作为转轴的孔,直径要比螺丝直径大0.2-0.3mm,确保转动顺滑又不至于过分晃动。例如,使用M3螺丝,轴孔可以设计为3.2mm或3.3mm。
- 避免支撑:设计时考虑打印方向,尽可能让关节的轴孔在打印时无需支撑材料,否则清理支撑物会破坏孔内壁的光滑度,导致转动卡涩。可以让轴孔开口朝上打印。
- 限位结构:在基座或上臂上设计物理凸起,限制舵机的旋转角度在安全范围内(如0-90度),防止机构运动到死点导致堵转损坏舵机。
- 打印参数设置:
- 层高:0.2mm层高在强度和打印时间上取得较好平衡。
- 填充率:15%-20%的填充率对于这种小型结构件足够坚固,且能减轻重量。重量是影响扑翼频率和舵机负荷的关键因素。
- 壁厚:至少2条轮廓线(约0.8mm-1.0mm),保证薄壁处的强度。
- 实战教训:第一次打印的连接杆太细,在弹簧回弹的冲击下断裂了。后来我将杆件设计成“工”字形截面,在不增加太多重量的情况下,抗弯强度大大提升。
4. 电路连接与Arduino控制程序详解
4.1 电路接线图与供电方案
可靠的电路是机器人稳定工作的基础。下图展示了清晰的接线方案:
接线核心要点:
- 共地:所有部件的GND(电源地、降压模块地、Arduino地、舵机地)必须连接在一起,这是电路正常工作的前提。
- 独立供电:如前述,舵机必须由外部降压模块供电。降压模块的输入可以是锂电池、电池组或直流电源适配器。
- 信号线:舵机的信号线只需要连接Arduino的数字引脚即可,电流极小。
4.2 舵机控制程序与运动逻辑
Arduino程序的核心是控制两个舵机按特定时序和角度运动。这里使用经典的Servo库。
程序逻辑解析与调参心得:
flapDownAngle和flapUpAngle:这两个值需要根据你实际组装好的机械结构来校准。使用servo.write()函数,从0到180度慢慢测试,观察翅膀的运动范围,找到不会卡死机构且扑动幅度最大的两个极限角度。flapSpeed:控制舵机从flapUpAngle运动到flapDownAngle的速度。这个速度影响下扑动作的力度感。太快可能扭矩不够,太慢则动作绵软。- 弹簧与程序的配合:在
simpleFlap()函数中,下扑后有一个delay(50)的保持时间。这很重要,它确保了舵机有足够时间输出扭矩,将弹簧充分拧紧,储存能量。随后servoFlap.write(flapUpAngle)命令让舵机快速回到上位,此时弹簧储存的能量瞬间释放,辅助甚至主导了快速上抬动作,使得整个扑动更有“爆发力”。 - 调试技巧:务必先拆下翅膀负载,空载测试舵机角度范围是否正常。然后装上机构,用手轻轻辅助转动,感受阻力点。最后再上电低速测试。串口输出调试信息(如当前角度)能极大帮助定位问题。
5. 组装、调试与优化全记录
5.1 机械组装步骤与注意事项
组装顺序影响调试难度。建议按以下步骤进行:
- 组装单侧翅膀:先将扭力弹簧套入基座的转轴,再将上臂安装上去,确保弹簧的两只脚分别卡在基座和上臂的专用卡槽内。然后用螺丝将连接杆与基座、前臂分别铰接。最后,将整个翅膀组件通过基座的主轴孔,用螺丝临时固定在侧板上。此时不要拧紧,方便后续调整。
- 连接舵机:将舵机放入身体模型的舵机仓,用螺丝或热熔胶固定。将舵机的输出舵盘与翅膀上臂的驱动臂用螺丝连接。确保在舵机处于中位(通常90度)时,翅膀处于一个理想的中间位置(比如半展开)。
- 通电初步测试:上传一个让舵机在30度到150度之间缓慢往复运动的测试程序。观察翅膀运动是否顺畅,有无卡顿、干涉。重点听声音,如果发出“滋滋”的堵转声,立即断电检查。
- 安装对侧翅膀:重复步骤1-3。确保左右翅膀的零件是镜像对称的。两个舵机应连接到Arduino的不同引脚。
- 总装与最终固定:将两侧翅膀组件、Arduino、电源模块全部放入身体外壳,理顺线材。确认所有运动部件与外壳有足够间隙。最后拧紧所有固定螺丝。
重要经验:在所有转动关节的轴孔处,涂抹少许润滑脂(如白色塑料齿轮润滑脂)。这能显著减少摩擦,使运动更顺滑,降低舵机负载和噪音,对提升寿命和效果有奇效。
5.2 运动调试与性能优化
组装完成只是开始,调试才是让机器人“活”起来的关键。
- 对称性调试:编写程序让两个舵机同步运动。站在正前方观察,左右翅膀的上下位置、展开幅度应基本一致。如果出现偏差,可以通过微调程序中左右舵机的
flapDownAngle和flapUpAngle值进行补偿。 - 扑动频率与幅度调优:
- 频率:调整主循环中的
delay(300)值。减小延迟,扑动加快;增加延迟,扑动变慢。找到看起来最自然、机械结构运行最稳定的频率。 - 幅度:调整
flapDownAngle和flapUpAngle的差值。差值越大,扑动幅度越大,但需要舵机更大的扭矩,也可能触及机械限位。需要在力度和范围间取得平衡。
- 频率:调整主循环中的
- “无力感”排查:如果翅膀扑动软弱无力,按以下顺序排查:
- 电源:用万用表测量舵机供电电压在运动时是否跌落到5V以下?如果是,说明电源功率不足,需要更换更大电流的电源或电池。
- 机械阻力:断开舵机,用手拨动翅膀,感受阻力是否很大。检查每个关节是否拧得过紧、有无毛刺、是否缺润滑。
- 弹簧扭力:扭力弹簧是否太软?更换扭力系数更大的弹簧。或者,弹簧的预紧角度是否不够?可以尝试调整弹簧在卡槽中的初始安装角度,使其预紧力更大。
- 舵机扭矩:以上都排除后,可能是舵机扭矩确实不足,考虑升级更大扭矩的舵机。
6. 常见问题排查与项目扩展思路
6.1 故障速查表
在实际制作中,你很可能遇到下表所列的问题:
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 舵机不动,无反应 | 1. 电源未接通或电压过低 2. 信号线接触不良或接错 3. Arduino程序未上传或引脚定义错误 |
1. 检查电源连接,用万用表测电压。 2. 重新插拔信号线,确认接在正确的数字引脚。 3. 重新上传程序,检查 servo.attach(pin)中的引脚号。 |
| 舵机抖动或运动不连续 | 1. 电源干扰或功率不足 2. 机械阻力过大导致堵转 3. 程序中的延迟( delay)过短 |
1. 为Arduino和舵机供电增加大容量电容(如1000μF)滤波。 2. 检查机构,润滑关节,确保运动顺畅。 3. 适当增加控制循环中的延迟时间。 |
| 只有一个翅膀动 | 1. 第二个舵机信号线或电源线断路 2. 程序中只定义或控制了一个舵机对象 |
1. 检查第二个舵机的所有连线。 2. 检查代码,确认两个 Servo对象都已定义并attach到正确引脚。 |
| 运动到某位置卡死并异响 | 1. 机械结构达到死点或发生干涉 2. 舵机旋转角度超出实际机械限位 |
1. 手动检查运动范围,修正3D模型或增加物理限位块。 2. 在程序中减小 write()的角度值范围。 |
| 扑翼动作慢,无力 | 1. 舵机供电电压/电流不足 2. 扭力弹簧太软或预紧不足 3. 机械摩擦太大 |
1. 使用动力电池,确保降压模块输出电流能力>2A。 2. 更换更硬弹簧或调整安装角度增加预紧。 3. 全面润滑所有转动部位。 |
6.2 项目扩展与进阶玩法
这个基础平台有很大的扩展潜力:
- 增加传感器,实现交互:
- 声音触发:加入声音传感器(如KY-038),拍手或发出特定声音时,鸟儿开始扑翼。
- 避障:在头部安装超声波传感器(HC-SR04),检测到前方障碍物时,改变扑翼频率或转向(如果加了轮子或舵机控制方向)。
- 光控:加入光敏电阻,光线变暗时鸟儿“归巢”停止运动。
- 美化与造型:
- 用轻质的羽毛、EVA泡沫或硅胶膜覆盖在3D打印的骨架上,制作出更逼真的翅膀蒙皮。
- 使用彩绘或喷漆为鸟身涂装,增加艺术感。
- 设计可动的头部和尾巴,用额外的微型舵机控制,实现转头、摆尾等更生动的姿态。
- 飞控探索(高级):
- 本项目是固定底座的展示模型。真正的仿生飞行是一个巨大的挑战。进阶方向可以研究:使用更轻的材料(碳纤维杆、轻木、蒙皮)、优化气动外形、引入陀螺仪和加速度计(如MPU6050)进行姿态稳定,甚至尝试无线的遥控扑翼飞行。但这需要深厚的空气动力学、控制理论和轻量化设计知识。
这个仿生鸟项目,从一张白纸到能动起来,整个过程充满了工程实践的魅力。它教会你的不仅仅是Arduino编程或3D打印,更重要的是如何将一个模糊的生物运动概念,通过机械设计、电子控制和反复调试,最终变成一个看得见摸得着的实体。最让我有成就感的时刻,不是程序第一次跑通,而是当我调整好弹簧的预紧力和程序的延迟参数后,那只简陋的塑料翅膀突然“啪”地一声有力地扇动起来的那一刻——它有了生命感。建议你在复现时,不必追求一步到位,可以先让一个翅膀动起来,吃透原理,再完成整体。过程中遇到的每一个问题,都是最宝贵的学习材料。