基于Adafruit CRICKIT与3D打印的水面机器人DIY全攻略 1. 项目概述打造你的第一艘智能水面机器人如果你对机器人、水上航行或者水下摄影感兴趣但又觉得从零开始设计电路和结构太复杂那么这个项目就是为你准备的。今天我想分享一个我最近完成的、非常有趣且实用的创客项目一艘基于Adafruit CRICKIT控制板和3D打印技术的水面机器人。它本质上是一个智能的、可编程的水上小车不仅能平稳地在水面航行还能搭载运动相机进行水下拍摄非常适合用于池塘生态观察、小型水域探索或者仅仅是作为一个酷炫的科技玩具。这个项目的核心魅力在于它的“高完成度”和“低门槛”。我们不需要从零开始设计PCB或编写复杂的底层驱动。Adafruit的CRICKIT为Circuit Playground ExpressCPX提供了强大的电机、舵机驱动能力而CPX本身集成了加速度计、光线传感器、温度传感器等多种传感器开箱即用。3D打印则让我们能以极低的成本和极快的速度获得完全定制化的防水结构件和浮力模块。整个系统就像搭积木一样将成熟的开源硬件模块与个性化的机械结构相结合最终诞生一个功能完整、外观专业的作品。我选择这个方案主要是看中了其快速原型验证的能力。对于创客和教育场景时间成本和试错成本是关键。CRICKITCPX的组合省去了电机驱动板、电源管理等一系列外围电路的设计和焊接工作让我们能专注于机器人的功能逻辑和结构设计。而使用柔性材料TPU进行3D打印来制作防水舱和电机罩相比传统的硅胶密封或购买成品防水盒提供了无与伦比的定制灵活性和成本优势。接下来我将从设计思路、材料准备、打印制作到编程调试完整地拆解这个项目的每一个环节。2. 核心硬件选型与设计思路解析在启动任何硬件项目前理清设计思路和选型依据至关重要。这艘水面机器人的设计目标很明确一个稳定、防水、可搭载相机、易于控制的水上平台。围绕这个目标我们需要解决动力、控制、浮力、防水和承载这五个核心问题。2.1 控制核心为什么是CRICKIT Circuit Playground Express控制部分我选择了Adafruit的CRICKIT for Circuit Playground Express套件。这是一个决定性的选择理由如下集成化与易用性CRICKIT是一个功能强大的“帽子”板它直接插在CPX上提供了4路舵机驱动、2路DC电机驱动可驱动4个有刷电机、大功率LED驱动、音频放大等多个接口。这意味着我们不需要额外购买和连接独立的电机驱动模块、音频模块等极大简化了布线降低了硬件连接出错的风险。丰富的传感器CPX本身内置了10个可编程RGB NeoPixel灯、运动传感器加速度计陀螺仪、温度传感器、光线传感器、声音传感器和一个红外接收发射器。这些传感器为机器人实现交互功能如避障、寻光、声控提供了无限可能而无需外接任何传感器。开发环境友好这套硬件完美支持MakeCode图形化编程和CircuitPython代码编程。对于初学者和快速原型开发MakeCode的拖拽式编程几乎零门槛对于希望深入学习的开发者CircuitPython提供了更强大的灵活性。这种双支持特性覆盖了从教育到专业开发的广泛需求。供电与保护CRICKIT板载了完善的电源管理支持通过DC插座或螺丝端子输入5-12V电压并为CPX提供稳定的3.3V电源。其驱动电路也包含了必要的保护功能。注意在选择电机时务必确认其电压与你的供电方案匹配。本项目使用的130型DC玩具电机标称电压为4.5-9V。使用3节AA电池约4.5V供电是安全保守的选择。若使用2节锂电池约7.4V或更高电压需确保电机和CRICKIT的驱动电路能承受。2.2 动力与结构明轮推进与3D打印防水舱动力系统采用了两个独立的130型有刷直流电机分别驱动左右两个明轮桨轮。选择明轮而非螺旋桨有几点考虑浅水适应性明轮在很浅的水域甚至有水草的池塘里也能正常工作不易被缠绕或触碰池底。控制简单正反转即可控制机器人前进、后退和转向逻辑直观。易于安装与防护明轮可以完全置于船体上方或侧面的打印件中更容易实现防水密封。整个机器人的骨架和防水外壳完全通过3D打印实现。这里的设计精髓在于模块化和材料选择。主舱体用于容纳CRICKIT和CPX主板。设计上采用了上下盖卡扣式密封并在电源接口处设计了专门的柔性TPU密封圈这是一种被动防水思路。电机舱这是防水的关键。每个电机被封装在一个独立的、由“电机外壳”和“电机端盖”两部分组成的TPU打印件内。TPU是一种柔性材料其打印件具有一定的弹性和密封性。两部分通过过盈配合Press Fit压紧在一起利用材料自身的形变来挤压密封同时预留了出线孔。浮力系统直接采用了市售的游泳浮条Pool Noodle。将其切割后插入3D打印的“浮条固定架”中。这种方案成本极低浮力可靠且易于更换。固定架与主舱体通过螺丝连接构成了一个稳固的三角浮体结构保证了机器人在水面的稳定性。2.3 配件与连接细节电池选用带开关的防水3xAA电池盒。AA电池容易获取电压合适4.5V且电池盒本身的防水设计为供电环节增加了保险。线缆连接为了便于组装和维护电机线缆通过2针对接端子与CRICKIT连接避免了焊接。同时两个电机的正极5V通过一个“Y型”对接端子并联共同接入CRICKIT的一个5V驱动端子简化了接线。相机支架通过一个标准的1/4英寸螺丝接口可以连接万向球头进而安装GoPro等运动相机。这个接口被集成在舱体底部使得相机位于水面以下能够拍摄水下视角。这个硬件选型方案在成本、易得性、制作难度和功能之间取得了很好的平衡。所有电子元件均来自Adafruit保证了兼容性和质量结构件通过3D打印实现完全定制浮力材料来自日常用品。整个项目清单清晰可复现性极高。3. 3D打印制作全流程与关键技巧3D打印是这个项目的物理基础打印质量直接决定了防水性能和整体结构的可靠性。我使用了FDM熔融沉积打印机来完成所有零件的制作整个过程有不少值得分享的细节。3.1 模型准备与切片参数设置首先需要获取STL文件。原作者在Thingiverse等平台分享了所有零件的模型。我建议全部下载后用切片软件如Cura、PrusaSlicer打开检查一遍。这个项目的模型主要分为两类刚性结构件主舱体、浮条固定架和柔性防水件电机舱、电源接口密封圈。对于刚性件使用PLA或PETG材料层高0.2mm。这是一个兼顾打印速度和表面质量的通用选择。壁厚至少2倍线宽例如0.4mm喷嘴壁厚设为0.8mm或1.2mm以确保强度。填充密度20%-25%。对于这种小型结构件这个填充率足以提供必要的强度同时节省材料和时间。支撑主舱体内部可能有悬空结构需要生成支撑。务必使用“仅从构建板开始”的支撑避免在模型内部难以拆除的地方生成支撑。附着使用裙边Skirt即可无需 brim 或 raft因为这些零件底面平整。对于柔性件必须使用TPU材料打印TPU是项目的难点也是成功的关键。TPU像橡皮筋一样柔软对打印机的挤出机构要求较高。打印机调整直接挤出机如果可能使用直接挤出机挤出电机直接驱动耗材会比远程挤出机通过Bowden管推送稳定得多能有效减少堵头和挤出不均。打印速度必须放慢。我设置在20-30mm/s。高速打印极易导致挤出跟不上层间粘合差。回抽谨慎开启或完全关闭。TPU弹性大回抽时容易被过度拉伸恢复挤出时造成短暂缺料。如果必须开回抽距离要非常小1-2mm速度也要慢。冷却风扇关闭或极低风速15%。TPU需要保持一定温度来保证层间粘合风冷太强会导致层与层分离。切片软件关键设置层高0.2mm 或 0.25mm。不宜过薄以保证层间结合力。打印温度参考耗材厂商建议通常为220-235°C。可以打印一个温度塔来校准。热床温度40-60°C。TPU粘性很好不需要太高温度。流量挤出倍数可能需要微增至105%-110%以确保密封部位完全密实无缝隙。实操心得打印第一个电机舱时我用了默认的PLA设置结果回抽导致挤出极其不稳定模型上全是孔洞和拉丝。关闭回抽并将速度降到25mm/s后打印质量立竿见影地提升。另外确保耗材干燥受潮的TPU打印时会噼啪作响产生气泡严重影响密封性。3.2 打印后处理与组装验证打印完成后不要急于组装先进行必要的后处理和检查。去除支撑与清理小心地去除所有支撑材料特别是电机舱内部的支撑。可以用镊子和精密钳子辅助。检查所有过盈配合的卡扣或插槽清除任何毛刺或残留的线材。干装配测试在不安装电子元件的情况下先将所有3D打印的结构件组装起来。比如将电机舱的壳体和端盖尝试压合感受一下紧度将主舱体的上下盖扣合。目的是检查打印尺寸是否准确组合是否顺畅。电机舱密封测试重要这是防水成败的关键。将电机不接线放入电机外壳盖上端盖并压紧。然后将整个电机舱浸入一盆水中仔细观察接缝处和出线孔是否有连续的气泡冒出。如果有说明密封不严。可能需要用细砂纸轻微打磨结合面或者尝试在结合面涂一层极薄的凡士林硅基润滑脂更好来增强密封。切记电子元件入水前必须通过此测试。3.3 浮条处理与整体结构组装浮条的处理很简单测量好浮条固定架之间的所需长度用美工刀或锯子切割即可。切口尽量平整。然后将切割好的浮条用力塞入固定架中通常会非常紧无需额外固定。整体结构组装顺序很重要先将电机安装到电机舱并完成密封测试。将电机舱组件通过螺丝固定到浮条固定架上。将浮条插入固定架。最后将组装好的“双体浮筒”通过螺丝连接到主舱体的底部。这个顺序可以避免在狭窄空间内操作螺丝的麻烦。至此一个坚固、轻便且具备基本浮力和防水能力的船体就准备好了。接下来就是让它变得“智能”起来。4. 电路连接与防水布线实操详解电路连接看似简单但细节决定成败尤其是在追求防水的项目中。错误的布线可能导致短路、信号干扰或者影响舱盖的密封。4.1 电机延长线与端子连接原装电机线通常很短我们需要将其延长至合适的长度左电机280mm右电机240mm。长度差异是为了让线缆能更整齐地连接到CRICKIT板上的不同端子避免缠绕和过度拉扯。材料选择建议使用硅胶线。它非常柔软耐弯折且直径较细便于在舱内布线。AWG22或AWG24规格的线比较合适。连接方法焊接最可靠的方法。将延长线与电机原线焊接套上热缩管加热密封。确保焊接牢固并用热熔胶或扎带在焊接点后方做一个“应力消除”防止线缆被拉拽时焊点受力。对接端子如项目中所示使用2针对接端子。这是无焊方案非常方便。务必选择质量好的端子压接时确保金属片刺破了线皮与铜丝接触良好。压接后可以轻轻拉扯测试是否牢固。4.2 CRICKIT板接线与舱内布线安装CRICKIT与CPX首先将Circuit Playground ExpressCPX主板插入CRICKIT板中央的插座确保方向正确USB口朝向一致。然后用提供的螺丝将CPX固定在CRICKIT上。连接电机线将左、右电机的负极通常为黑色线分别接入CRICKIT上“Drive”端子块的“1”和“2”的GND端子。将两个电机的正极通常为红色线先通过一个“Y型”对接端子并联在一起然后从这个并联节点引出一根线接入“1”号端子的“5V”端子。原理这样连接后通过编程控制“1”和“2”号端子的GND信号就能分别控制两个电机的启停和转向而5V电源是共用的。连接电池将防水电池盒的DC插头插入CRICKIT板侧的圆孔DC电源插座。舱内布线艺术预先规划在盖上舱盖前模拟一下线缆的走向。目标是让线缆自然平顺不要绷紧或过度弯曲尤其要避开螺丝柱和卡扣位置。固定与收纳可以使用一点点蓝丁胶或尼龙扎带将线缆松散地固定在舱内角落防止其在机器人运动时晃动拍打主板。出线口处理电机线从舱体侧面的出线口穿出。穿出后在舱内外两侧的线缆上各点一小滴中性硅橡胶如道康宁734。它能起到很好的密封和固定作用且日后需要拆卸时可以用刀片小心割开。切勿使用热熔胶其防水性和耐久性在水下环境中很差。4.3 最终密封与检查在所有内部接线和布线完成后进行最终组装将TPU打印的电源接口密封圈套在电池插头上然后一起插入CRICKIT的DC座。这个密封圈能有效防止水从接口缝隙渗入。仔细检查舱内没有金属碎屑或松动的螺丝。将上盖的线槽对准出线口以一定角度先将一侧卡扣扣入下盖再用塑料撬棒或指甲将另一侧轻轻撬开并压下听到“咔嗒”声表示扣合到位。整个过程要均匀用力避免单点受力导致塑料件断裂。最后将电池盒用螺丝固定在舱盖顶部指定位置。完成这些后一个硬件部分完全就绪的水面机器人就诞生了。但它现在还不会动我们需要赋予它“大脑”和“灵魂”。5. MakeCode图形化编程与功能实现让机器人动起来甚至变得智能全靠编程。Adafruit的MakeCode平台让这一切变得异常简单即使你没有编程基础也能通过拖拽积木块来实现复杂逻辑。5.1 开发环境搭建与初次烧录进入MakeCode用Chrome浏览器访问 https://makecode.adafruit.com/ 。连接设备用USB线将CPX连接到电脑。按下CPX板上的复位键RESET直到板子上的所有LED变成绿色并循环追逐此时它进入了“UF2引导加载模式”在电脑上会显示为一个名为CPLAYBOOT的U盘。安装UF2固件在MakeCode网站点击“新建项目”然后无需任何操作直接点击左下角的**“下载”**按钮。你会得到一个.uf2文件。将其拖拽或复制到刚才出现的CPLAYBOOTU盘里。复制完成后CPX会自动重启并变成一个名为CIRCUITPY的U盘。这表示CircuitPython固件已经烧录成功同时它也支持MakeCode。安装CRICKIT扩展再次点击“新建项目”。在积木区点击**“高级”** -“扩展”。在搜索框中输入crickit然后点击出现的CRICKIT扩展包进行添加。添加后左侧积木分类栏里就会出现一个绿色的**“CRICKIT”**分类。5.2 基础驱动程序编写让我们编写第一个让机器人前进、后退、转弯的程序。“开机启动”逻辑从基本分类中拖出一个当开机时积木。在这里我们可以设置一些初始状态比如点亮一个LED灯表示准备就绪。积木示例当开机时 - 显示图标 笑脸电机控制在CRICKIT分类下找到驱动1和驱动2相关的积木。我们可以用设置驱动1 速度 0这样的积木来控制电机。速度值范围是-100到100负值代表反转。实现简单遥控模拟我们可以用CPX上的按键A和B来分别控制左右电机模拟遥控。积木逻辑示例 当 按钮A 被按下 - 设置 驱动1 速度 50 否则 - 设置 驱动1 速度 0 当 按钮B 被按下 - 设置 驱动2 速度 50 否则 - 设置 驱动2 速度 0 编写一个自动巡航程序更实用的方式是让机器人自主运行一段预设动作。我们可以使用循环和暂停积木。积木逻辑示例 当 开机时 - 显示图标 笑脸 暂停 1000 毫秒 循环无限次 设置 驱动1 速度 80 设置 驱动2 速度 80 暂停 2000 毫秒 // 前进2秒 设置 驱动1 速度 -50 设置 驱动2 速度 50 暂停 500 毫秒 // 原地左转0.5秒 设置 驱动1 速度 0 设置 驱动2 速度 0 暂停 1000 毫秒 // 停止1秒 这个程序会让机器人先前进2秒然后左转0.5秒再停止1秒并不断循环。编写完成后点击左下角的**“下载”**按钮将.uf2文件保存到电脑然后拖入CIRCUITPYU盘。程序会自动运行现在把你的机器人放到水里试试吧。5.3 利用传感器实现交互与避障CPX丰富的传感器能让机器人变得更聪明。例如利用板载的光线传感器和声音传感器我们可以制作一个“趋光”或“声控”机器人。声控启动积木逻辑示例 当 开机时 - 设置 驱动1 速度 0 设置 驱动2 速度 0 循环无限次 如果 声音强度 150 那么 设置 驱动1 速度 60 设置 驱动2 速度 60 暂停 3000 毫秒 设置 驱动1 速度 0 设置 驱动2 速度 0 这个程序让机器人在检测到较大声响如拍手后前进3秒然后停止。简易光寻迹/避障利用光线传感器虽然CPX没有距离传感器但我们可以用光线传感器做一个简单的“悬崖”感应。原理是当机器人接近水池边缘如从水面接近池壁下方光线可能会变暗。积木逻辑示例 循环无限次 如果 光线水平 50 那么 // 可能接近边缘或进入阴影执行后退转向 设置 驱动1 速度 -60 设置 驱动2 速度 -60 暂停 1000 毫秒 设置 驱动1 速度 50 设置 驱动2 速度 -50 暂停 800 毫秒 否则 // 正常水域继续前进 设置 驱动1 速度 40 设置 驱动2 速度 40 你需要根据实际环境的光线水平调整阈值例子中的50。可以在MakeCode中使用串行 - 串行写入数值 “light” 光线水平积木在控制台查看实时光线值来校准。通过组合不同的传感器和逻辑你可以创造出各种有趣的行为模式。MakeCode的可视化编程让调试和迭代想法变得非常快速直观。6. 下水测试、问题排查与优化建议激动人心的下水时刻到了但别急着把它扔进深水区遵循以下步骤进行测试和优化能确保项目成功并延长设备寿命。6.1 分级下水测试流程静态浮力与平衡测试无水环境组装完成后先不打开电源将机器人轻轻放入盛有水的浴缸或大水盆中。观察浮力是否足够舱体上盖应明显高于水面。如果下沉可能是浮条提供的浮力不足或者舱体/电池盒内部意外进水增加了重量。检查所有密封处。姿态是否平衡机器人应该水平漂浮没有严重的左右或前后倾斜。如果倾斜可以微调相机或电池在顶部的安装位置来配平。动态功能测试浅水区在浅水区水深刚没过电机即可进行。打开电源通过预设程序或手动控制如果编了按键控制程序测试前进、后退、左转、右转功能是否正常。观察电机运转是否顺畅有无异常噪音。明轮划水是否有力能否推动机器人。特别注意电机启动和转向时船体会有一个反作用力可能会侧倾或溅起水花这是正常的。全功能与续航测试安全水域选择一个安全的露天水域如平静的池塘、游泳池进行较长时间的航行测试并测试相机拍摄功能。记录一次充电或一组新电池能持续运行多久。观察在微风或小浪情况下机器的稳定性。6.2 常见问题与解决方案速查表在下水测试和后续使用中你可能会遇到以下问题。这里提供一个快速排查指南问题现象可能原因排查与解决步骤机器人完全不动1. 电源未打开或电池耗尽。2. CRICKIT与CPX连接松动。3. 程序未成功上传或损坏。4. 电机线未接好或断路。1. 检查电池盒开关测量电池电压。2. 重新插拔CPX确保紧固螺丝已拧好。3. 重新通过MakeCode下载程序。4. 用万用表通断档检查电机线路。只有一个电机转动1. 不转的电机的接线端子松动。2. 该电机对应的CRICKIT驱动通道故障罕见。3. 程序中只设置了一个电机。1. 检查并重新紧固CRICKIT上的接线端子。2. 交换左右电机接线如果问题跟随电机走则是电机或线缆问题如果问题仍在原侧则可能是CRICKIT问题。3. 检查MakeCode程序确保两个驱动速度都被设置。电机转动缓慢无力1. 电池电量不足。2. 明轮或电机轴被水草、头发等缠绕。3. 电机舱密封过紧导致电机轴摩擦阻力过大。1. 更换新电池。2. 清理明轮和电机轴。3. 小心拆开电机舱检查电机安装是否平正端盖是否压得太紧。舱体内部发现水汽或水珠1. 电机舱或主舱盖密封不严。2. 电源接口密封圈未装好或老化。3. 线缆出线口密封失效。1.立即断电拆开舱体用吹风机冷风档彻底吹干。2. 重点检查所有TPU密封件的结合面清理异物可涂抹微量硅脂增强密封。3. 重新密封线缆出线口。机器人航行跑偏1. 左右电机转速存在差异即使程序设置相同。2. 左右浮筒或电机安装不对称导致阻力不同。3. 明轮叶片形状或安装角度有细微差别。1. 在程序中为两个电机设置略微不同的速度值进行微调例如左电机55右电机50。2. 检查结构组装是否对称浮条是否安装到位。3. 这是常见现象通过软件校准比追求绝对机械对称更实际。控制距离非常短1. 如果使用红外遥控可能是环境光干扰或角度不对。2. 如果使用无线如蓝牙可能超出范围或信号被水反射干扰。1. 本项目未涉及远程遥控。若自行添加需考虑无线模块的防水和天线放置位置。水对无线电信号衰减很大。6.3 项目优化与扩展思路这个基础平台有很大的扩展潜力增加无线控制可以在舱内增加一个蓝牙或无线电接收模块如HC-05 NRF24L01通过手机或另一个单片机进行遥控。需要额外考虑模块供电和信号天线引出可能影响防水。真正的自主避障添加一个防水超声波传感器需自行设计打印支架连接到CPX的GPIO引脚实现前方障碍物检测和自动绕行。数据回传与第一人称视角如果使用支持Wi-Fi视频传输的运动相机可以实时观看水下画面。甚至可以尝试在CPX上连接一个简单的无线数传模块回传传感器数据温度、光线等。功能扩展利用CRICKIT上富余的接口可以添加一个舵机控制的“取样勺”或“水下灯”增加更多互动和研究功能。结构优化可以尝试使用更专业的船体设计如双体船、V型船首来改善航行效率和抗浪性。也可以为电机设计一个可拆卸的防护网防止水草缠绕。这个项目最让我满意的地方是它清晰地展示了一个完整的产品开发流程从需求定义、方案选型、结构设计、原型制作、电路连接、软件编程到测试迭代。每一个环节都有值得深入琢磨的细节。希望这份超详细的指南能帮助你成功打造出自己的水面探索伙伴并在此基础上开启更多有趣的创造。