1. 项目概述:一只会“寻光”的机械海龟
几年前,我在一个创客工作坊里第一次看到这个项目的雏形,当时就被它简单的巧思打动了。它不像那些复杂的工业机器人,需要精密的伺服电机和复杂的算法。相反,它只用了一块能感知光线的开发板、两个普通的直流电机,加上随处可见的纸板和胶水,就赋予了一个平面海龟剪影“生命”——让它能在黑暗中“沉睡”,一旦感受到光亮,就会摆动“鳍肢”,执着地向着光源“爬行”。这个“基于光敏传感器的仿生海龟机器人”项目,完美诠释了如何用最基础的技术模块,实现一个生动有趣的交互式作品。
这个项目非常适合作为机器人学、嵌入式系统或STEAM教育的入门实践。无论你是对硬件编程感兴趣的学生,还是想带孩子一起动手体验科技魅力的家长,或是寻找一个综合性小项目的电子爱好者,它都能提供一条清晰的学习路径。你不仅会学到如何将传感器信号转化为控制指令,还能亲手完成从结构搭建、电路连接到图形化编程的完整流程。整个过程几乎没有枯燥的理论堆砌,每一步的成果都肉眼可见,那种看着自己制作的机器人第一次对光线做出反应的成就感,是任何教科书都无法替代的。
2. 核心硬件选型与设计思路拆解
这个项目的核心在于“感知-决策-执行”这一经典控制逻辑的微型化实现。整个系统的设计思路非常清晰:用一个传感器感知环境(光),用一个微控制器处理信息并做出决策,再用执行器(电机)产生动作。下面我们来拆解每个环节的硬件选型背后的考量。
2.1 控制核心:为什么是 Circuit Playground Express + CRICKIT?
项目选择了 Adafruit 的Circuit Playground Express (CPX)作为大脑,并搭配CRICKIT扩展板,这是一个经过深思熟虑的“黄金组合”。
Circuit Playground Express (CPX)本身就是一个功能极其丰富的微控制器开发板。它集成了温度传感器、光线传感器、运动传感器、麦克风、蜂鸣器,甚至还有10个可编程的RGB LED。对于本项目而言,其内置的模拟光敏传感器是关键。它省去了我们额外购买和焊接光敏电阻的麻烦,其输出是连续的模拟电压值,可以被微控制器读取,从而精确感知环境光强的变化。CPX的另一个巨大优势是它支持多种编程环境,包括本项目使用的Microsoft MakeCode(图形化块编程)、CircuitPython(基于Python的简单文本编程)以及Arduino IDE,为不同基础的用户提供了平滑的学习曲线。
然而,CPX的GPIO引脚驱动能力有限,无法直接驱动需要较大电流的直流电机。这就是CRICKIT扩展板登场的原因。CRICKIT 直译就是“创意机器人交互构建套件”,它本质上是一个强大的电机和传感器驱动盾板。它提供了:
- 4路大电流直流电机/步进电机驱动:内置电机驱动芯片,可以直接连接并控制本项目用的TT电机,提供足够的电流和电压。
- 安全的电源管理:它将电机驱动电源(本项目用的3节AA电池)与CPX的逻辑电源(通过USB或电池提供)进行了隔离和稳压处理,避免了电机启停时产生的电压波动“冲死”脆弱的微控制器。
- 丰富的扩展接口:除了电机,它还提供了伺服电机接口、大功率数字输出/模拟输入口、电容触摸输入口等,为项目后续升级(比如增加声音触发、触摸控制)留足了空间。
这个组合将复杂的电机驱动电路、电源管理电路全部封装好了,让我们可以像搭积木一样专注于逻辑和结构设计,极大降低了入门门槛和失败风险。
2.2 执行机构:TT电机的特性与选型
项目指定了200RPM的TT直流减速电机。这里的“TT”通常指那种黄色齿轮箱、黑色电机主体的常见型号。选择它有几个原因:
- 减速齿轮箱:200RPM指的是输出轴的转速。直流电机本身转速很高(可能高达几千转每分钟),但扭矩很小。经过齿轮箱减速后,转速降低,输出扭矩显著增大,这才有力气带动纸板海龟在桌面上“爬行”。
- 适中转速:200RPM的转速对于这个尺寸的机器人来说比较合适。太快了会导致海龟动作抽搐、难以控制方向甚至翻倒;太慢了则运动不明显,缺乏趣味性。
- 安装便利:配套的快装轮毂可以让用户用扎带轻松地将自制的“鳍肢”固定到电机轴上,无需3D打印或复杂加工。
注意:市面上TT电机电压规格常见有3-6V和6-12V。本项目使用3节AA电池(约4.5V),因此必须选择3-6V规格的电机。使用过高电压规格的电机在4.5V下会无力,而使用过低电压规格的电机(如3V)直接接4.5V则可能烧毁。
2.3 传感与能源:光敏传感器与电源方案
传感部分完全依赖于CPX板载的光敏传感器。它是一个光电晶体管,光谱响应接近人眼,对可见光敏感。在MakeCode中,我们可以直接读取它返回的模拟值(0-255),这个值会随着光照增强而增大。这比简单的数字开关(只有亮/暗)提供了更细腻的控制可能性,例如可以实现“光线越强,电机转得越快”的模拟控制,虽然本项目最初只用了阈值开关控制。
能源方案采用了3节AA电池盒通过DC插头供电。这是一个独立、安全的供电方案。
- 独立性强:机器人可以脱离USB线自由活动。
- 容量充足:3节碱性AA电池可以提供约4.5V电压和较大的容量,足以驱动两个电机和CPX板运行较长时间。
- 安全隔离:通过CRICKIT上的DC插座供电,确保了电源管理的规范性。务必注意:CRICKIT上有一个电源拨动开关和一个为CPX供电的USB/外部电源选择跳线帽。正确设置是:电池插在CRICKIT的DC口,跳线帽选择“EXT”(外部电源),这样CPX的逻辑电就由CRICKIT从电池稳压后提供。
3. 机械结构制作与装配详解
机器人的“肉身”决定了其运动的可靠性和表现力。用纸板作为主体材料,成本极低、易于加工,且能很好地体现DIY精神。
3.1 海龟主体的制作与强化
- 模板获取与处理:首先需要一张海龟的轮廓图。你可以使用项目提供的PDF模板,也可以在网上搜索“海龟轮廓简笔画”找到自己喜欢的样式。打印出来后,将其粘贴在硬纸板上。这里有个关键技巧:涂抹胶水(白乳胶或手工胶)时,不仅要涂在图纸背面,最好也在纸板上薄薄涂一层,然后趁湿贴合,用刮板或另一块废纸板从中心向四周刮平,彻底排除气泡。这样干燥后图纸不易起皱、脱落。
- 裁剪与细节处理:待胶水完全干透(建议等待半小时以上),用美工刀或剪刀沿着轮廓线仔细切割。美工刀配合钢尺切割直线边缘会更整齐。切割下主体后,需要将四个鳍肢单独剪下来。切割时,在鳍肢与身体的连接处留出大约2-3毫米的连接桥,先不要完全切断,待会儿安装电机时可以根据实际位置做最后调整,这样容错率更高。
- 结构强化考虑:单层纸板在电机震动下可能容易弯曲。一个提升耐用性的方法是使用双层纸板。将两块纸板用胶水粘合在一起,或者选择更厚的瓦楞纸板。在安装电机和电池盒的位置,可以在背面额外用胶水粘贴一些加强筋(小块纸板条),分散安装点的应力。
3.2 鳍肢与电机的连接工艺
这是将旋转运动转化为划水动作的关键步骤,牢固可靠的连接至关重要。
- 安装快装轮毂:首先,将快装轮毂用力按压到TT电机的输出轴上,直到听到“咔哒”声,确保其安装牢固,不会打滑。
- 定位与打孔:将剪下的纸质鳍肢根部(之前留了连接桥的那端)贴在轮毂的安装面上。用笔透过轮毂上的安装孔(通常是两个小孔)在纸鳍肢上标记出孔位。然后移开轮毂,用锥子、粗针或螺丝刀尖在标记位置扎出小孔。
- 扎带固定:将塑料扎带穿过纸鳍肢的小孔和轮毂的安装孔,拉紧固定。这里有一个非常重要的细节:扎带锁紧的齿面应朝向纸鳍肢,平滑面朝向轮毂。拉紧后,将多余的扎带头剪掉。建议每个安装点使用两根扎带,呈“八”字形或平行固定,可以防止鳍肢在单方向受力时旋转松动。
- 运动空间检查:固定好一侧鳍肢后,手动转动电机轴,观察鳍肢的旋转轨迹。确保它在转动360度时,不会刮擦到海龟的身体或其他部分。通常需要将鳍肢修剪得比原模板更短、更圆润,特别是尖端部分,以避免干涉。这是装配中必须进行的“调试”步骤。
3.3 电子部件的布局与安装
合理的布局不仅美观,更影响重心和稳定性。
- 电池盒安装:3节AA电池盒是整机最重的部件,它的位置决定了机器人的重心。通常建议安装在身体中部略微靠前的位置。这样设计的好处是:当两只后鳍肢(电机)推动身体前进时,重心在前有助于保持直线运动,减少原地打转的可能。使用自攻螺丝固定时,先在纸板上戳出导孔,然后慢慢拧入螺丝,让螺丝的螺纹“咬”住纸板纤维,这样固定非常牢固。
- 电机安装:两个TT电机分别负责左后和右后的鳍肢。使用高厚度的双面泡沫胶(最好是VHB胶带)将它们粘在海龟身体底部的后方左右两侧。粘贴前,务必确保两个电机的输出轴朝向一致(比如都朝向外侧或都朝向后方),并且轴线与海龟身体中轴线平行。粘贴时用力按压30秒以上,确保粘合面充分接触。
- CPX与CRICKIT的安装:将CPX板插入CRICKIT扩展板。然后用粗棉线、尼龙扎带或麻绳,穿过CRICKIT板上的安装孔和纸板身体,在背部打结固定。切忌使用金属螺丝直接紧固,因为CRICKIT板背面有裸露的焊点和元件,直接用螺丝硬顶可能导致短路。用线缆固定既安全又方便调整角度。安装时,确保CPX板上的光敏传感器(位于板子边缘,一个小黑点)朝上且无遮挡,这是机器人的“眼睛”。
实操心得:在最终拧紧所有固定件之前,最好把所有部件(电池、电机、控制板)都放上去,用手推着模拟运动一下,感受重心。一个前部稍重的机器人走直线性能会好很多。如果机器人总是转圈,除了检查代码中电机转向,也可以尝试轻微调整电池盒的左右位置来配平。
4. 图形化编程与逻辑实现
对于初学者,Microsoft MakeCode的块编程环境是理解程序逻辑的绝佳工具。它把复杂的代码封装成色彩鲜艳的积木块,通过拖拽和组合就能完成编程。
4.1 MakeCode 项目初始化与设备连接
- 访问编辑器:在浏览器中打开 MakeCode for Adafruit 网站,新建一个项目。
- 切换板卡类型:在设置中,将目标硬件选择为“Circuit Playground Express”。这决定了代码块库和模拟器都会针对CPX的特定功能(如那10个NeoPixel灯、光传感器等)。
- 添加CRICKIT扩展:这是关键一步!在“高级” -> “扩展”中,搜索并添加“CRICKIT”扩展库。添加成功后,侧边栏会出现一个螃蟹图标,里面包含了所有控制电机、伺服、舵机等CRICKIT功能的积木块。
- 进入Bootloader模式:用Micro USB线将CPX连接到电脑。正常情况下,电脑会识别出一个名为
CIRCUITPY的U盘(这是CircuitPython模式)。为了刷入MakeCode程序,我们需要让其进入Bootloader模式:按下CPX板中央那个小小的复位按钮(Reset)。此时,板载的所有LED灯会快速闪烁红色然后变为绿色,电脑上会出现一个名为CPLAYBOOT的新U盘。这个盘就是用来传输我们编写好的.uf2固件文件的。
4.2 程序逻辑块逐行解析
项目的核心代码逻辑清晰,主要包含两个部分:初始化设置和主循环。
// 以下为MakeCode块对应的逻辑描述 当开机时: 设置 CRICKIT 的电机1 方向为 反转 显示图标 海龟 暂停 500 毫秒 清空屏幕 将 光线级别 以条形图显示在 所有LED 上,最高值为 255设置电机1方向为反转:这是为了解决两个电机物理安装时可能存在的镜像对称问题。假设两个电机面对面安装,它们的轴转向自然是相反的。为了让两个鳍肢都产生向后的推力,我们需要在软件上将一个电机的控制信号反转。通常先假设一个电机转向正确,如果实际运动时机器人原地转圈,就尝试修改这个设置。显示图标和条形图:这些是很好的调试和状态指示功能。开机动画增加了趣味性。而将光线级别以条形图显示这个块非常实用,它让板载的10个LED灯根据当前光照强度亮起不同数量,让你能直观地“看到”传感器读数的实时变化,对于后续调整光线阈值至关重要。
无限循环: 如果 光线级别 > 150 那么 CRICKIT 设置电机1 速度为 50% CRICKIT 设置电机2 速度为 50% 否则 CRICKIT 停止电机 1 CRICKIT 停止电机 2无限循环:这是程序的主循环,会不断重复执行其中的指令。光线级别:这个值来自CPX板载的光敏传感器,范围是0(完全黑暗)到255(非常明亮)。具体数值取决于环境光。阈值150:这是一个判断条件。你可以把它理解为一个门槛。当传感器读数超过150,程序就认为“足够亮了”,于是执行那么后面的块:同时启动两个电机,以50%的速度运行。当光线低于150,则执行否则后面的块:停止两个电机。电机速度50%:这里控制的是电机的占空比,即功率。50%是一个比较温和的启动速度,既能提供足够的动力,又不会因启动太猛导致机器人“跳起来”或电流冲击过大。你可以尝试调整这个值(从30%到100%)来改变海龟的“活力”。
4.3 代码烧录与初步测试
- 下载与烧录:在MakeCode编辑器中完成编程后,点击左下角的下载按钮。这会生成一个
.uf2格式的文件。将这个文件拖拽或复制到CPLAYBOOT磁盘中。完成后,磁盘会自动弹出(系统可能提示弹出错误,可忽略),程序即烧录完成。 - 脱离USB运行:拔掉USB线。将CRICKIT上的电源开关拨到ON。此时机器人应该已经上电,但电机不转(除非环境光很强)。
- 功能测试:用手电筒或台灯照射CPX板上的光敏传感器(那个小黑点),你应该会看到板载LED灯显示的条形图变长,同时两个鳍肢开始划动。移开光源,电机应逐渐停止。这个过程就是最基础的光控开关。
- 校准阈值:房间里的自然光可能已经超过了150。你可以用手遮住传感器,观察LED条形图显示的数字(在MakeCode模拟器中可以看到具体数值,实际板上看亮灯数量估算),从而了解当前环境光对应的读数。然后回到代码中,调整
如果光线级别 > XXX中的XXX值,使其略高于环境光读数。这样,海龟在常态下安静,只有当你用更亮的光源(如手电)照射它时,它才会被“唤醒”。
5. 系统调试、优化与功能拓展
一个项目从“能动”到“运行良好”再到“有趣”,离不开调试和优化。这里分享一些实战中积累的经验和进阶玩法。
5.1 常见问题排查速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 上电后毫无反应,LED也不亮 | 1. 电池没电或装反。 2. CRICKIT电源开关未打开。 3. CRICKIT与CPX连接松动。 | 1. 检查电池电量及正负极方向。 2. 确认CRICKIT侧面电源开关拨至“ON”。 3. 重新拔插CPX与CRICKIT的连接口。 |
| LED有反应,但电机不转 | 1. 电机线未接好或松动。 2. CRICKIT上电机接线端子螺丝未拧紧。 3. 程序未正确设置电机或速度设为0。 | 1. 检查电机线是否牢固插入CRICKIT电机接口(1和2)。 2.用小型螺丝刀拧紧电机端子上的螺丝,这是最常见的问题点! 3. 在MakeCode中检查 设置电机速度的块是否被正确执行。 |
| 只有一个电机转,机器人原地转圈 | 1. 两个电机转向相反,推力抵消。 2. 其中一个电机连接或机械卡死。 | 1. 在当开机时块中,尝试**增加或移除设置电机1方向为反转**的块。2. 交换两个电机在CRICKIT上的接口,如果问题跟随接口走,是程序问题;如果问题跟随电机走,是电机或机械问题。 |
| 对光线反应不灵敏或没反应 | 1. 光线阈值设置不当。 2. 光敏传感器被遮挡。 3. 环境光太强/太弱,超出传感器量程。 | 1. 使用LED条形图功能查看实时光感值,重新调整阈值。 2. 确保CPX板上方无遮挡,特别是黑色小点区域。 3. 尝试在较暗环境下用手电筒测试。 |
| 电机转动缓慢无力 | 1. 电池电量不足。 2. 电机速度设置过低。 3. 机械阻力过大(如鳍肢刮擦身体)。 | 1.更换全新碱性电池,电机耗电大,碳性电池或旧电池很快会乏力。 2. 将电机速度从50%提高至70%-80%。 3. 检查并修剪鳍肢,确保转动顺畅无干涉。 |
| 无法进入CPLAYBOOT模式 | 1. USB线或接口问题。 2. 按键操作不对。 | 1. 尝试更换USB线和电脑USB口。 2. 确保是在连接USB线的情况下,快速点按一次复位键,而不是长按。 |
5.2 性能优化与可靠性提升技巧
- 降低误触发——增加迟滞比较:当前代码是简单的阈值比较,在临界值附近,光线稍有波动(如云层飘过),电机就会频繁启停。我们可以引入“迟滞”逻辑,让启动阈值和停止阈值不同。例如:
如果光线级别 > 160 则启动,如果光线级别 < 140 则停止。这样在140-160之间的光线变化不会引起状态改变,运行更稳定。在MakeCode中,这需要用到变量来记录电机当前状态,并用如果...否则如果...逻辑块来实现。 - 模拟“挣扎”效果——加入随机动作:真实的小海龟爬行不是匀速的。我们可以让电机速度在一定范围内随机变化,甚至偶尔短暂停顿一下。在MakeCode中,可以使用
随机取数块来生成一个速度值,比如在40%到60%之间随机取值赋给电机速度,这样运动看起来更生动。 - 增加“眼睛”反馈:利用CPX上那10个可编程RGB LED(NeoPixel),可以赋予机器人更多表情。例如,在黑暗中让所有LED发出微弱的蓝色(睡眠状态),当被光线唤醒时,LED变成绿色并波浪流动(活跃状态),遇到障碍物时闪烁红色(困惑状态)。这不仅能提升观赏性,也是调试程序状态的强大工具。
- 结构强化升级:如果纸板在多次测试后变得松软,可以考虑将主体材料升级为3毫米椴木板或亚克力板,用激光切割或手工锯出形状。这种材料更坚固耐用,能保证长期的机械精度。电机也可以用螺丝直接固定在这种硬质材料上,比双面胶更可靠。
5.3 功能拓展与创意方向
这个项目是一个完美的起点,你可以基于此框架探索更多可能性:
- 多传感器融合触发:CRICKIT支持连接多种传感器。你可以增加一个声音传感器,让海龟在听到拍手声后启动;或者增加一个超声波距离传感器,实现“遇到障碍自动后退转弯”的避障功能。在MakeCode中,只需从扩展库添加相应传感器模块,然后在
无限循环里增加判断逻辑即可。 - 从开关控制到比例控制:现在的代码是“开-关”控制。可以尝试更高级的“比例控制”:让电机转速随着光线强度线性变化。光线越强,爬得越快。这需要用到
映射块,将光线级别(0-255)映射到电机速度(0%-100%)。注意要设置一个最小启动速度(如20%),因为电机在过低电压下可能无法启动。 - 引入状态机与复杂行为:通过多个变量和条件判断,你可以为海龟设计一套简单的“行为树”。例如:默认状态是“睡眠”(电机停,LED蓝光慢呼吸)。当光线持续超过阈值2秒,进入“寻找”状态(电机慢速转,LED绿色闪烁)。如果“寻找”状态下5秒内光线持续增强,则进入“冲刺”状态(电机全速,LED全亮绿色)。这能让机器人的行为更具智能感和故事性。
- 切换至CircuitPython编程:当你对逻辑控制有更高需求时,可以从图形化的MakeCode过渡到文本式的CircuitPython。在CircuitPython中,你可以更灵活地使用函数、列表、字典等数据结构,编写更复杂的算法,同时也能更方便地使用网络模块、显示模块等高级外设。Adafruit为CPX和CRICKIT提供了极其完善的CircuitPython库,几乎每一行代码都有示例可循。
从一张纸板、几行图形代码开始,到最终做出一个能与环境互动的智能体,这个过程所蕴含的教育意义和创造乐趣远远超出了项目本身。它拆解了机器人技术的黑箱,让你亲手触摸到感知、思考和行动的每一个环节。最重要的是,它告诉你,创造的开始不需要万事俱备,从这样一个简单、完整且充满成就感的项目出发,通往更广阔天地的路径自然会清晰起来。