很多人觉得扫地机器人这东西要么是“真香神器”要么是“智商税”。我属于中间偏执的那一类——买过成品机把家里的石头和科沃斯都拆过后来干脆自己动手攒了一台。今天写这篇不吹不黑只聊一个事怎么样才能拥有一台“你自己的”扫地机器人。我整理出三条路线外加一张攒机路线图从纯小白到电路动手党都能找到自己的切入点。先说结论三条路线分别是“买成品机”、“买模块半成品自己拼”和“全自主攒机”。前两条适合大多数人第三条是真正的“攒机”玩法。不管走哪条你对扫地机器人的理解都会比只看广告的人深一个层级。这篇文章会把每条路线的成本、难度、时间、踩坑点都说透重点放在第三条路线因为这才是标题里“攒机”两个字的核心价值。1. 三条路线从“买现成”到“全自主”1.1 路线一成品机的“零门槛”与“天花板”第一条路线最简单打开电商平台花一两千买个主流品牌的扫拖一体机开箱、联网、建图、让它自己跑。这条路线的优势是省心激光雷达、陀螺仪、路径规划算法、防跌落传感器这些复杂的软硬件人家都给你调好了你只需要定期倒尘盒。但我得说句实话成品机的“天花板”非常明显。我拆过自家那台两千价位的机器内部结构其实不复杂——一个激光雷达、两个驱动轮、一个万向轮、一套边刷和滚刷机构、一块电池、一块主板。真正值钱的是它的导航算法和APP云端服务而这些恰恰是你无法改造和升级的部分。你想让它扫得更细一点、定点清扫某个区域、换一套更高效的吸风结构对不起厂商没给你留这个口子。所以路线一的真正问题是你拥有的只是“使用权”不是“掌控权”。它坏了、旧了、想改你都使不上力。适合人群预算充足、不想折腾、只想要结果的人。但如果你想拥有一台“自己的”扫地机器人我会建议你至少走完路线二再看。1.2 路线二半DIY模块化方案图的是什么第二条路线是购买模块化组件自己组装。目前市面上有不少扫地机器人底盘套件比如带电机驱动的底盘模块、现成的碰撞传感器模块、Arduino或ESP32控制板、红外避障模块甚至还有开源的扫地机固件项目可以刷到兼容主板上。我为什么推荐这条路线因为它是“攒机”的入门阶梯。你不需要画PCB、不需要设计机械结构只需要把模块互相插好线、写一段控制逻辑就能得到一台可以满地跑的小机器。这个过程带来的价值是让你彻底搞明白机器人最基本的几个子问题怎么走直线轮速控制、怎么感知障碍传感器、怎么决定下一步动作决策逻辑。我身边很多朋友都是从这条路走进机器人坑的。半DIY方案的难度大概在进阶水平会一点Arduino基础知识、能看懂接线图就能搞定。成本大概在三百到八百元之间比你买成品机便宜得多而且所有零件坏了都能单独换。它的短板也很明显清扫能力弱没有建图能力路径随机更像“会跑的玩具”而非“清扫工具”。但作为学习和把玩的载体它比成品机有意思十倍。1.3 路线三全自主攒机玩的就是掌控感第三条路线就是真正的“攒机”——从零开始自己选主控、传感器、电机驱动、电池、底盘架构和清扫机构自己写程序自己做结构组装。路线图里最关键的一点是先确定你的机器到底要承担什么角色。如果是为了扫地那主控选型、清扫机构设计、吸风通道的密封性都是重点如果是为了学习和把玩那重心就放在运动控制、避障逻辑和路径规划上如果要兼顾那就需要综合设计。我自己的第一台攒机作品走了偏学习路线清扫功能很弱但避障和沿墙逻辑做得还算扎实因为我觉得这部分才是能迁移到任何机器人项目的底层能力。全自主攒机的成本波动很大。控制在三百块以内能做出能跑的小车五百到八百块能做出像样的扫地机器人上探到一千多块可以加装树莓派实现建图导航。时间和精力成本是最高的我从画结构到稳定跑起来前后花了两个周末外加好几个晚上。遇到问题的时候论坛上的开源资料帮了大忙。这条路适合愿意查资料、愿意试错的人收获是三条路线里最大的。1.4 三条路线怎么选预算、动手能力与时间成本我做了一张选型对照表方便各位直接对号入座对比维度路线一成品机路线二半DIY模块路线三全自主攒机预算800-3000元300-800元300-1500元时间投入1天2-3天2-4周动手难度无低-中中-高清扫效果强弱中可调可玩性低高极高故障可修性低保修期内不敢拆高高学习价值低中高我的建议是如果你只是想家里干净别犹豫走路线一如果你对机器人怎么工作有好奇心走路线二如果你看完这篇文章手痒难耐、家里还有一堆闲置的开发板和传感器那直接跳到路线三。接下来整篇文章的重点就是第三条路线的完整路线图。2. 攒机路线图的核心部件拆解2.1 主控选型Arduino、ESP32还是树莓派攒机第一步是选主控它决定了你能写出多复杂的逻辑。市面上常用的三款主控各有各的脾气。Arduino Uno/Nano是我最推荐的入门选择。它上手门槛极低网上教程一抓一大把用C语言写控制逻辑烧录简单稳定可靠。缺点也很明显单线程、性能弱、没有网络功能跑不了SLAM建图算法RAM更是小得可怜复杂地图数据塞不下。ESP32是我自己攒机时用的主控。它比Arduino强大得多双核240MHz有Wi-Fi和蓝牙能接入智能家居协议内存也勉强够跑简化的栅格地图。价格甚至比Arduino还便宜一块开发板十几块钱二十块钱就能拿下。缺点是引脚和时钟配置比Arduino复杂新手上手会有一段落差而且3.3V逻辑电平和一些5V传感器接的时候需要转换。树莓派这类Linux单板电脑是终极方案能跑完整SLAM、用摄像头做视觉识别、甚至部署轻量级神经网络。缺点也明显开机慢、功耗高、价格贵还配着一堆外设。我用树莓派做过一次语音助手联动但作为扫地机器人的主控总觉得像用大炮打蚊子——性能溢出不说供电和管理复杂度也上来了。我的建议很直接想先跑通做个原型用Arduino想做一台真正有点智能、能连接网络和家庭的机器用ESP32想冲刺研究级建图导航再上树莓派。扫地机器人攒机路线图里ESP32是我的主力推荐。2.2 传感器组避障、沿墙、碰撞检测一台扫地机器人眼睛由三种传感器组成碰撞传感器、红外测距传感器和可选的陀螺仪/编码器。碰撞传感器是所有扫地机的地板我用的是一组微动开关装在机器前端和两侧的弹性缓冲板上。撞到障碍物时缓冲板向里缩微动开关被触发主控就知道“撞到了”。选用时要注意触发力度我买过一批太灵敏的开关还没碰到就触发机器变成了“神经质”在开阔地疯狂转向。后来换成需要明显位移才能触发的型号才正常。红外测距传感器是避障的关键。我用的方案是让两个红外收发管一组放在机器前左右方向发射红外光并检测反射光强度感知前方是否有障碍物以及大致距离。这个方案成本很低一组几块钱缺点是容易受环境光干扰在大太阳地板上可能误判。为了抑制干扰我让红外发射以38kHz频率调制接收端用一体化红外接收头效果稳定很多。陀螺仪和编码器是路线图里容易被忽略的部分。陀螺仪用MPU6050能感知机器朝向变化避免走曲线电机编码器能反馈轮子实际转速才能做到两个轮子速度一致。这两样东西决定了扫地机器人能不能走直线我在第三节会细讲。没有它们你的机器会像喝醉了一样在房间里画圈圈。2.3 电机与驱动轮子怎么听话轮子驱动我用的是TT马达加编码器的方案。TT马达很常见减速比1:48扭矩适中价格几块钱一个。编码器通过霍尔传感器输出转动脉冲主控计算脉冲来估算转速。这个方案是“攒机”路线图里最经典的配置。电机驱动板选择方面我建议直接用TB6612FNG。相比老式L298N它体积小、压降小、发热低PWM调速线性也更好。接线时要注意逻辑电压和电机电压分开供电不然主控很容易被电机的电流尖峰打死。这里有个关键概念叫“闭环控制”。如果你只给两个电机塞一个固定PWM占空比由于轮胎摩擦、电压波动和电机个体差异左右轮实际转速很难一致机器就跑不直。配合编码器主控不断读取左右轮转速用PID算法修正PWM让两个轮子始终维持在目标转速。我把PID调参放在下面第五节讲这里只先记住一句话没有编码器反馈的扫地机器人是不合格的。2.4 清扫机构设计毛刷、尘盒与风道清扫机构是扫地机和普通小车的本质区别。攒机路线图里最简单的清扫方案是一个边刷加一个中扫毛刷的组合。边刷负责把墙边和缝隙的垃圾扒到中间中扫毛刷负责把垃圾扬起再配合风扇和尘盒收集。边刷电机我用的是N20微型减速电机配合硅胶边刷支架转速控制在两三百转。中扫部分我做过两个版本第一版直接用N20带一根橡胶棒转起来纯属“扰民”地面灰尘根本扬不起来。第二版换成了带毛刷滚轮的结构扫地效果立刻提升。核心经验是毛刷滚轮必须紧贴地面但又不能被压死一般留0.5毫米左右的间隙最好。风道和尘盒的设计是最容易被忽略的“隐形重点”。风扇电机放在尘盒上游还是下游、风道有没有漏气直接决定吸力。我第一版用了二手涡扇直接把风扇怼在尘盒开口处结果尘盒里永远空荡荡垃圾全被卡在毛刷处。后来把尘盒做成一个密封盒子进风口加了一层滤网风机放在出风口后面抽气这样才能形成负压垃圾才真正被吸进尘盒。实测下来密封性对吸力的影响远大于风机本身的功率。3. 实战从零件到一台能跑的扫地机器人3.1 底盘组装与接线我来说说我攒机的实际过程按步骤走完各位至少能复刻一个能跑的原型。底盘我用的是一块8毫米厚的亚克力板尺寸大概20×20厘米两层结构下层装电机和电池上层装主控和驱动板。四个角装上碰撞缓冲传感器前端装红外避障模块。这样设计的理由是重心低不容易在越障时翻车上下分层方便拆装调试时不用每次都把整个机器掀开。接线顺序我总结成一句口诀先电源、再电机、后传感器。电源地用独立线束连接正负极之间加一个1000微法电解电容做滤波防止电机启停瞬间拉低电压导致主控复位。我用的是两节18650电池串联标称7.4V给驱动板供电再通过降压模块输出5V给主控、输出3.3V给红外传感器和MPU6050。多说一句不要直接用AMS1117给电机电路供电电流不够电压还会被拖垮。TB6612驱动板的接线比较直观VM接电池正极VCC接逻辑电压5VAIN1/AIN2和BIN1/BIN2接主控四路GPIOPWMA/PWMB接PWM引脚。电机编码器的输出接到主控的外部中断引脚上这样能在轮子转动时立刻触发脉冲计数。3.2 基础运动控制程序接线完成后第一件事不是加传感器而是先写一个最基础的运动控制程序验证电机能不能转、编码器能不能读到数。我用ESP32和Arduino框架核心代码如下#include Arduino.h // 电机驱动引脚 #define AIN1 16 #define AIN2 17 #define PWMA 18 #define BIN1 19 #define BIN2 21 #define PWMB 22 // 编码器引脚外部中断 #define ENC_A_LEFT 34 #define ENC_A_RIGHT 35 volatile long leftCount 0; volatile long rightCount 0; void IRAM_ATTR leftEncoder() { leftCount; } void IRAM_ATTR rightEncoder() { rightCount; } void setup() { Serial.begin(115200); pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT); pinMode(BIN1, OUTPUT); pinMode(BIN2, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(PWMB, OUTPUT); attachInterrupt(digitalPinToInterrupt(ENC_A_LEFT), leftEncoder, RISING); attachInterrupt(digitalPinToInterrupt(ENC_A_RIGHT), rightEncoder, RISING); } void setMotor(int pwmA, int pwmB) { digitalWrite(AIN1, pwmA 0 ? HIGH : LOW); digitalWrite(AIN2, pwmA 0 ? LOW : HIGH); digitalWrite(BIN1, pwmB 0 ? HIGH : LOW); digitalWrite(BIN2, pwmB 0 ? LOW : HIGH); ledcWrite(0, abs(pwmA)); ledcWrite(1, abs(pwmB)); } void loop() { setMotor(200, 200); // 左右轮同向200/255占空比 delay(1000); Serial.printf(L:%ld R:%ld\n, leftCount, rightCount); }这里有几个坑提醒一下ESP32的PWM通道需要用ledcSetup和ledcAttachPin提前配置上面代码里我简化了这部分各位务必补上编码器中断函数里做了IRAM_ATTR标记不然在Wi-Fi启用后会触发复位或崩溃。跑起来后观察串口输出的左右轮脉冲数如果相差很大说明两个轮子的驱动力矩确实不同这就是后面需要PID校准的原因。3.3 避障与沿墙逻辑的实现电机验证完毕接下来就是给扫地机器人加“性格”——也就是避障行为逻辑。这一步是整个项目最有意思的地方因为有无数种设计方案从最简单的“碰撞则转向”到带状态机的“沿墙清扫”都可行。我的实现方式是红外传感器先探测超声波或者碰撞传感器兜底。逻辑框架是前方没有障碍物时直行红外检测到左前方或右前方有障碍就朝相反方向转向碰撞传感器触发时先倒退半秒再随机转一个角度继续走。这里有一个关键的设计决策“随机转角”不能是等概率随机否则机器会在原地反复转圈我管这叫“脱困不足”。我实现的策略是生成一个非对称的随机角度比如偏向连续性方向的60度到120度这样在房间里转一圈回来大概率能覆盖边缘区域。沿墙逻辑则用侧面红外传感器保持与墙面15厘米左右距离行驶一旦距离变远就向墙内转向。用状态机的方式实现最清晰。把机器当前状态分成IDLE、FORWARD、TURNING、BACKOFF、WALL_FOLLOW几个状态每个状态下执行对应动作根据传感器事件切换状态。这样写出来的代码逻辑清晰方便排查问题也方便后续加建图逻辑。我把这个状态机看作扫地机器人攒机路线图里最核心的知识点。4. 常见问题与排查实录4.1 走不直、乱撞怎么办“走不直”是我被问到最多的问题。排除机械因素后问题基本出在轮速闭环没做好。我第一次攒机时左右轮脉冲差高达15%机器每两米就偏了一个身位。后来给两个电机各加了一个增量式PID控制器误差才压到2%以内。增量式PID的思路是在每个循环周期里读取当前编码器计数和期望值做差用比例、积分、微分三个环节计算PWM补偿量。我这里给出一个能用的简化版本typedef struct { float kp, ki, kd; float target, lastError, integral; } PID_T; float updatePID(PID_T* pid, float current) { float error pid-target - current; pid-integral error; float derivative error - pid-lastError; pid-lastError error; return pid-kp * error pid-ki * pid-integral pid-kd * derivative; }调参的经验是先只调kp从0.1开始缓慢往上加直到转速接近目标值但有轻微抖动再加一点点ki消除稳态误差kd我一般设得很小甚至为零。特别注意integral项要限幅不然机器启动瞬间的误差会导致积分饱和一启动就飞轮全开。我在实际调试中还加过一个“防抖”技巧PID输出值在极小范围内变化时直接保持上一次输出能延长电机驱动管寿命。4.2 清扫效果差的三个真相很多人绕过了路线一直接走路线三攒出来的机器扫不干净于是回来问我怎么回事。我总结了三个最容易被忽略的真相。第一个真相是最基本的物理问题吸力不是风机的错是风道的漏。用一张纸巾贴住尘盒进风口如果纸巾能被吸住且风机转速不衰减说明风道密封性合格如果风机转了但纸巾纹丝不动十有八九是漏气。我用美工胶带把尘盒盖和风道接口缠了两圈吸力立刻上来。第二个真相是毛刷的“抛尘”作用比吸力更重要。扫地机器人能否把地上的灰尘“端”起来核心在于中扫毛刷的高速转动。很多人攒机时只重视吸尘电机结果毛刷转速太低垃圾被扫到旁边又弹走。我给中扫毛刷单独加了一条PWM通道转速调到3000转以上效果明显改善。第三个真相是续航和尘盒容量的本质矛盾。扫地机的尘盒只有几百毫升越小的尘盒越需要频繁清理。攒机方案里我倾向于做大尘盒而不是加强吸力因为风机的静压和风量之间存在权衡尘盒体积大风机在运行时反而不容易堵死。4.3 电池续航短升级方向我最初用两节18650电池容量标称2600mAh实测续航只有四十几分钟还没跑完一个客厅就趴窝。排查发现不是电池虚标而是驱动电路静态功耗太高ESP32开发板LED灯、降压模块空载电流、电机PWM频率设置太高都成了“电老虎”。优化方向有几个。把开发板上的电源指示灯焊掉空载功耗从几十毫安直接降到几毫安降压模块换成低静态电流的型号比如MT2492系列做到几十微安级空载电机PWM频率从1kHz降到20kHz左右的高级PWM模式可以减少开关损耗。这样组合优化后续航提升到两个小时左右。如果还嫌不够不要盲目加电池要考虑并联扩容和放电倍率。18650要选动力电池或者阻值低的型号不然放电电流不足电机一拉高负载电压就剧烈波动主控会反复复位。我在后期换成了两串的21700电池组容量翻倍电压平台更稳扫地时的韧性显著上升。5. 成本、安全与后续扩展5.1 全套攒机成本明细很多读者最关心的就是“自己攒一台到底要花多少钱”。我把常见配置的零配件价格整理成表按我自己第二版的配置来算部件型号/方案参考价格主控ESP32 DevKit15元电机驱动TB6612FNG模块8元TT电机编码器带霍尔编码器25元/个电池两串18650保护板40元红外避障模块38kHz红外对管10元微动开关碰撞缓冲组10元MPU6050六轴陀螺仪模块8元亚克力底盘定制双层板30元清扫机构N20电机毛刷尘盒35元降压模块MT2492/AMS11176元合计约两百元出头。我再算上杂七杂八的螺丝、线材、热缩管、杜邦线总成本控制在三百元内。这个价格只有成品扫地机的五分之一但动手带来的满足感完全不是一回事。如果你想更高阶比如加树莓派、激光雷达和SLAM建图那预算就要上到一千以上性能和“智商”也会有明显飞跃。5.2 安全注意事项攒机过程里最容易忽视的就是安全问题。我拆过不少别人的DIY小车有的真的让我捏一把汗。电池安全排第一。18650电池一定要配保护板不配保护板的电芯在过放、过流时都可能鼓包甚至起火。充电时也必须用专门的平衡充或者带保护的充电模块绝不能直接用可调电源瞎怼。我见过一个案例把两串电池直接接到USB充电器上几分钟就把保护板烧了。走线安全排第二。电机进线要选用0.5平方毫米以上的硅胶线别贪图细线节省空间。所有焊点要套热缩管所有接线端子要做绝缘处理。主控和电池之间一定要串联一个自恢复保险丝或物理开关这样调试时能一键断电避免不小心烧板子。我还习惯在风扇或电机堵转时加了软件层面的超时保护防止堵转电流长期拉高造成过热。最后一个安全问题是运行时的人机环境。扫地机运行时周围不要有裸露的线材和宠物毛团边刷缠线是大家都会遇到的事。我后期给边刷加了一个弹性的过载保护结构缠死后会自动打滑而不是硬转导致电机烧毁。5.3 进阶方向导航、建图与联动攒机走到这个阶段机器已经能跑了但我身边的人玩到这一步往往不会停下因为更大的乐趣在后面。第一个进阶是导航建图。用树莓派加激光雷达跑开源的Cartographer或ROS的gmapping算法就能让扫地机器人从“随机乱逛”进化为“地图清扫”。这一阶段会用到里程计、IMU、激光雷达数据融合对有人想入门SLAM来说是个特别好的实践平台。我之前用ESP32做实时数据采集把串口数据传给电脑上跑ROS的虚拟机在客厅里跑出过一张还不错的栅格地图。第二个进阶是联网智能联动。ESP32本身就支持接入MQTT或Home Assistant扫地机器人扫描完一个区域后可以联动智能灯、空气净化器、加湿器设备。比如我在扫地机回充时让客厅灯自动调亮便于观察清扫效果这种自定义联动是成品机永远给不了的体验。第三个进阶是边缘计算视觉识别。树莓派加一个广角摄像头跑YOLO之类的目标检测模型就能识别是袜子、电线还是宠物粪便决策“绕过去”还是“停下来”。门槛偏高但对有兴趣的人来说这是把扫地机器人从“家用工具”变成“机器人学习平台”的里程碑。最后再分享一个我自己的小习惯每完成一个功能迭代都用Markdown补一段调试日志记录当时的参数、现象和修改原因。攒机最大的乐趣不是让机器变聪明而是让你越来越清楚每个细节背后的原理。下次再遇到问题时翻翻日志很多坑都能快速绕过去。这篇路线图写到这里我实验台上那台自攒扫地机器人还在角落里沿着墙边来回走。它走得不算优雅吸力也不算大但我每次拆开底盘换零件、调参数的时候都会觉得这三百块花得比买一台成品机值太多了。如果看完你也手痒建议先从最便宜的Arduino小车轮子方案开始一次只加一个功能剩下的交给耐心就好。