ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用STM32和离线语音DIY一个会听话的移动垃圾桶

用STM32和离线语音DIY一个会听话的移动垃圾桶 前阵子老妈在客厅追剧瓜子壳、橘子皮堆了一茶几让她起身丢个垃圾跟要她命似的。我就琢磨干脆做个能自己跑过来的垃圾桶喊一嗓子它就来丢完还能自己溜回去。这个项目断断续续折腾了三周从方案选型到程序调通踩了不少坑今天把整个过程和关键细节整理出来开源给同样想动手的朋友。整个项目我全部用的开源方案主控用最常见的STM32F103C8T6电机驱动用TB6612FNG语音识别用SU-03T离线语音模块底盘是两轮差速加万向轮。全套物料加起来不到80块比市面上动辄三四百的所谓智能垃圾桶便宜多了最关键的是核心逻辑和代码都是开源的想怎么折腾就怎么折腾。适合同样喜欢嵌入式DIY的朋友如果你有单片机基础跟着这篇文章把功能跑起来大概需要两个晚上如果你只是刚学会点亮LED也没关系每一步我都写了验证方法和排查思路照着抄也能做出来。1. 项目思路拆解为什么做一个会“听”会“走”的垃圾桶做项目第一件事不是画电路图也不是写代码而是先把需求想清楚。我这个移动垃圾桶的核心功能其实就几个能听懂人话、能自己动、能避开障碍最后把垃圾装进去。听起来简单但每一条背后都有对应的技术选型。1.1 需求拆解到底要做成什么样很多新手做DIY项目失败多半是栽在“一步到位”上——上来就想着做全功能产品结果每部分都半吊子。我这次把需求分成了三个等级逐级实现第一级基础功能听到“过来”就朝人移动听到“停”就原地停下人手动按下盖子键开盖丢垃圾。第二级体验功能语音召唤后能跟随人移动前方碰到障碍物会自动绕开或减速避免撞到沙发腿。第三级锦上添花语音说“回窝”能自动回到充电位置盖子上加感应开关手靠近自动翻盖。实际开发中我把第一级和第二级做扎实了第三级的“回窝”做成了简化版——靠红外对管找定位点。为什么不一次性做完全部因为每一级都在给下一级铺路比如语音模块的串口协议定了后续加功能不需要动硬件只改主控代码就行。这也算是开源项目的通用思路先在模块层面解耦再谈功能叠加。这个项目能解决什么问题往大了说它是检测你嵌入式基本功的一块试金石——电源、串口、PWM、传感器采集、状态机逻辑全都覆盖了。往小了说它能让家里的老人、行动不便的人不用频繁地跑去丢垃圾。我觉得很适合作为学生社团、个人创客的开源项目也适合拿来练手“从零到一”的完整开发流程。1.2 方案选型背后的取舍为什么选这个主控、这几种传感器先说说主控。我选STM32F103C8T6俗称“C8T6”小板不是因为性能强而是因为它开源资料最多、价格最低几块钱一片、引脚足够用。语音模块选SU-03T而不是LD3320是因为SU-03T支持离线自定义唤醒词和命令词不需要联网家里不依赖Wi-Fi环境LD3320虽然也能离线识别但词条需要自己跑训练工具对新手不太友好。底盘方面很多人纠结要不要上四驱或麦克纳姆轮。我的建议是普通家用场景两轮差速加一个万向轮就够了。差速转向的控制逻辑非常直观——左轮快右轮慢就往右转反过来就往左转。麦克纳姆轮虽然能横移但控制算法复杂四个电机的速度同步一致性很难调而且轮子贵一套下来比整车成本还高。用生活类比就是你平时在家推个行李箱拉杆比四个万向轮好用多了它不需要横移转弯半径小就够了。传感器选型也讲性价比。跟随功能用两个HC-SR04超声波模块分别装在左右两侧通过两侧测距的差值判断目标在哪个方向防撞用前向超声波模块。为什么不直接上激光雷达无论是单线雷达还是TOF传感器成本都翻好几倍处理算法复杂度也上来了。超声波在这个场景下精度完全够还便宜好修坏了换一个也就几块钱。1.3 整体架构供电、主控、感知、执行怎么串起来我画了一张架构图在笔记本上这篇文章就用文字描述一下整个系统分成四层供电层两节18650锂电池串联标称7.4V。电量经过一个降压模块到5V给主控、语音模块、超声波模块供电电机直接用电池电压经过TB6612驱动不经过降压模块这样可以避免电机启动瞬间的大电流把5V电压拉垮。感知层SU-03T语音模块串口输出命令、三个HC-SR04超声波前向防撞、左右跟随、一个红外对管回窝定位。主控层STM32F103C8T6负责所有逻辑判断包括接收语音指令、读取超声波距离、计算差速控制量、输出PWM。执行层TB6612FNG电机驱动 两个N20减速电机 舵机控制的桶盖。这里有个关键设计原则语音识别和运动控制不放在同一个模块里。SU-03T只负责“听懂并发送命令码”主控拿到命令码再做决策。这样语音模块就算抽风也不会影响电机运行。后续你想把语音换成ESP32接入大模型只需要改串口协议解析这一小块。2. 核心模块解析语音、测距、电机驱动与电源的实战要点这节我把每个模块的选型和调试细节拆开讲。很多教程只告诉你“这样接就行”但我想把“为什么这样接”也讲透以后你换任何模块都能举一反三。2.1 语音识别模块SU-03T离线语音的配置与易踩坑点SU-03T是上海顺芯的一款离线语音识别芯片板子很小自带麦克风和喇叭接口出厂自带一套演示固件。我的用法是通过上位机配置工具定义唤醒词和命令词烧录进模块。配置工具里你需要设置唤醒词比如“小桶小桶”然后给每个命令词绑定串口输出内容比如唤醒词唤醒后说“过来”模块会通过UART发送0xA1 0x01 0x01这个帧。配置要点有三个。第一波特率我设成了9600够用且稳定ST-Link的串口调试助手直接就能看。第二命令词不要设太多我设了五个——“过来”“停下”“打开盖子”“关上盖子”“回窝”每个都绑定不同的数据帧。第三模块的工作电压是3.3V~5V但实际跑下来建议用5V供电因为它内部功放会给喇叭供电电压低了识别率和唤醒距离都会下降。实操中有个坑比较隐蔽SU-03T的串口发送引脚是TTL电平STM32的USART也是3.3V电平按理说电平兼容没问题但如果你的板子和模块距离远、飞线长干扰会引入误码。我的处理方法是唤醒词后的第一帧命令不直接执行而是让主控等一个“握手确认”——收到同一帧两次再动作这样即使出现一次误码也不会误触发。这是我在实际调程序时踩出来的经验原理很简单抑制噪声最好的办法不是硬件上滤波而是在逻辑上做确认。还有一点SU-03T对唤醒词的识别率高度依赖麦克风位置。如果你把模块装进外壳里麦克风孔必须露出来且不要正对电机——电机转起来有电磁噪音会严重影响语音识别。我第一次装在桶盖正下方电机一转唤醒成功率掉到一半以下就是吃了这个亏。2.2 测距避障与跟随HC-SR03的布局、采样和跟丢处理HC-SR04是个很经典也很有年代感的超声波模块测距原理是主控给Trig引脚一个10us以上的高电平模块内部发射8个40kHz的超声波脉冲同时把Echo引脚拉高Echo高电平的时间就是声波往返的时间。距离 时间 × 声速 ÷ 2。声速按340m/s算所以1cm对应的Echo脉宽大约是58.8us。代码里我通常用定时器输入捕获模式来测脉宽。简单点也可以用轮询——发Trig后等Echo变高再延时等待Echo变低记录Micros差值。但轮询在超声波模块多的情况下很吃亏因为等待期间MCU干不了别的。我三路超声波用的是“轮询触发 定时器测量”每路间隔50ms触发一次避免三路同时发射互相串扰。跟随的核心算法不复杂属于典型的“差值控制”。左右两个探头分别测到人和垃圾桶的距离如果左边比右边近说明人在偏左方向程序就让左侧电机减速、右侧电机加速车头慢慢向左转。差值越大转向越猛。这里有个隐藏问题超声波探头是有波束角的大概是15度左右如果人站在正前方偏一点两个探头的读数可能都很大转向就不灵敏。我的解决办法是除了左右探头让前向探头的数据也参与判断——当前向距离大于左右两侧很多时说明目标丢失车先停止转动原地等待几秒再继续找。这里再强调一个容易忽略的点传感器的安装高度。超声波模块离地高度最好在15cm~25cm之间太低了容易扫到地面产生虚假回波太高了垃圾桶跟着人走的时候容易把人腿和家具搞混。我实测把模块装在桶身中下部、略微外倾5度左右效果最好。2.3 电机驱动与差速控制N20减速电机和TB6612的姿态调校N20减速电机是玩具车、小底盘上最常见的电机自带减速箱输出轴扭矩比裸电机大得多。我选的是减速比1:30的版本空载转速大约200rpm转/分钟。配65mm直径的轮子理论最高速度可以算一下轮子周长 π × 直径 3.14 × 0.065 ≈ 0.204米 每分钟行进距离 200 × 0.204 ≈ 40.8m换算成速度大概是0.68m/s这个速度在室内刚刚好既不会慢得像蜗牛也不至于冲出去刹不住。如果你想要更稳的跟随效果选1:50减速比、空载转速降到120rpm左右也可以代价是最高速度变慢。我的建议是跟随时不需要太快0.3~0.5m/s的移动速度足矣所以实际程序中PWM最大占空比我限制在60%留足调节余量。驱动芯片TB6612FNG比L298N好在哪里尺寸小、发热低、效率高它内部是MOSFET H桥结构不靠三极管饱和导通压降很小。接线我列一下关键引脚VM接电池正极4.5V~13.5V都行我接7.4VVCC接3.3V逻辑电源给芯片内部逻辑供电PWMA/PWMB接主控定时器PWM输出脚控制左右轮速度AIN1/AIN2控制左轮方向BIN1/BIN2控制右轮方向STBY接3.3V这个引脚是待机控制拉低后芯片不工作我直接用杜邦线接高让芯片始终保持工作状态差速转向的核心是PWM调速。STM32的定时器输出PWM我设置ARR为999也就是PWM周期1000个计数单位CCR值就是实际的占空比计数。速度控制用最朴素的P控制器// 跟随差速控制pLeft/pRight 是左右轮PWM基准值 int16_t diff distanceLeft - distanceRight; // 左侧近则diff为正 int16_t turn diff * 2; // 比例系数需现场整定 pLeft BASE_SPEED - turn; pRight BASE_SPEED turn;这个diff * 2的比例系数不是拍脑袋定的是实验整定出来的。如果系数太大车身会左右摆动像“点头”一样系数太小转向力矩不够绕不开障碍物。我的整定方法把垃圾桶放好人在左侧0.5m处观察1.5秒内车头是否能转到对着人的方向如果转不到位就调大系数如果转过了再回调。实测系数在1.5~3之间比较合适具体看轮子抓地力。2.4 电源与电量管理掉电重启和续航太短的根因电源是整个项目里最容易被忽视、也最容易翻车的部分。我第一版电路用的是单节18650加升压模块结果电机一转电压瞬间掉到3.3V以下STM32直接复位语音模块也重连不上。问题出在电机启动瞬间的堵转电流——N20电机启动瞬间电流能到1A以上升压模块根本扛不住。后来我改成两节18650串联电池端直接给TB6612降压模块单独给控制电路这个问题基本消失。具体接线电池正极 → TB6612的VM引脚电池正极 → 降压模块输入 → 5V输出 → 主控、语音、超声波电池负极全部共地。这里要提醒一点TB6612的逻辑地GND必须要和STM32的地连接否则PWM信号参考电位不一致电机乱转。我见过很多新手在这里吃亏他们觉得“驱动板上标了VM、VCC、GND就按字面接”结果漏了共地电机一抖一抖的。电池续航方面实测两节18650单节2000mAh能支撑连续运动大约1小时这个数据看着不惊艳但室内用是够了。真正影响续航的其实不是电机本身而是频繁的启停——每次从静止到起步电机都要克服静摩擦电流比匀速转动大得多。所以我在程序里做了软启动PWM从0逐步升到目标值以20ms为步长每步增加10个计数单位。这样既保护了电机也显著减少了电池电压的瞬时跌落。软启动代码很简单void motor_set_speed(uint8_t target_pwm) { static uint8_t current_pwm 0; if (current_pwm target_pwm) { current_pwm 10; } else if (current_pwm target_pwm) { current_pwm - 10; } // 将current_pwm写入CCR寄存器 }别小看这段软启动它解决了我之前遇到的“偶尔复位”问题。电机从急停到满速瞬间电流冲击非常大加了软启动后电池电压曲线平稳多了。3. 实操过程从BOM清单到整车联调的完整路径这节我把从采购到运行的全过程串一遍你可以当一份可以直接抄作业的清单用。成本、接线、代码逻辑、调参步骤都在里面。3.1 开源物料清单BOM与开源资料准备做DIY项目最怕的不是东西买贵而是买了不匹配。我整理了一份经过实测的清单照着买基本不会出错。总价控制在80元以内不含工具器件型号/规格数量参考价用途主控板STM32F103C8T6最小系统板1约8元主控逻辑ST-Link V2 下载器淘宝蓝色款即可1约12元烧录调试语音模块SU-03T带喇叭1约18元离线语音识别超声波模块HC-SR043约5元/只测距避障跟随电机驱动TB6612FNG模块1约6元H桥驱动电机减速电机N20减速电机 1:30 带轮子2约8元/只底盘动力万向轮1寸万向轮1约4元辅助支撑舵机SG90 9g1约6元桶盖开合电池18650电池 带线电池盒21约20元整机供电降压模块MP1584/LM2596 输出5V1约5元控制电路供电红外对管寻迹/避障红外模块1约4元回窝定位这里有个采购原则不要在一个店里买齐所有东西分开买反而能省不少比如STM32和下载器在一家买电机轮子和底盘件在一家买传感器在一家买。另外N20电机的轴径、轮子孔径、联轴器尺寸一定要问清楚再下单我第一次买回来的轮子孔径是2mm电机轴是3mm硬生生多等了三天快递。开源资料的准备方面我在GitHub上建了仓库代码、接线图、3D打印的STL文件都上传了仓库地址在文末。你本地开发还需要准备的东西Keil MDK编译STM32工程、SU-03T的串口配置工具、ST-Link驱动。第一次烧录前建议先用LED点灯测试确认下载器能识别芯片。3.2 硬件接线与底盘结构组装我把接线按模块拆开写建议你一边看一边对着实物操作。先接电源和驱动部分再接感知模块最后接语音和舵机。这样逐个完成每完成一部分就可以单独验证避免最后接完一团乱麻查不出错。电源与主控部分STM32的3.3V引脚接到降压模块5V输出板上自带稳压芯片输入5V即可TB6612模块的VM接电池正极7.4VGND接电池负极TB6612的VCC接STM32的3.3VSTBY接3.3V左右电机分别接TB6612的AO1/AO2、BO1/BO2主控与电机驱动信号PA6 → PWMAPA7 → PWMB分别控制左右轮PWMPB0 → AIN1PB1 → AIN2左轮方向PB10 → BIN1PB11 → BIN2右轮方向感知模块前向HC-SR04Trig接PA0Echo接PA1左向HC-SR04Trig接PA2Echo接PA3右向HC-SR04Trig接PA10Echo接PA9红外对管输出接PB3高电平表示有反射物语音与舵机SU-03T的RX接STM32的TXPA9TX接STM32的RXPA10舵机信号线接PB8VCC接5VGND共地我最开始把三个HC-SR04的Trig全部接到同一个引脚上想着一路触发三个一起测。实测发现三个模块同时发射超声波会互相干扰Echo回来的时间完全对不上。后来改成每个模块独立Trig引脚程序里分时触发问题才解决。这也是我为什么上面列了三个不同引脚的原因。底盘组装顺序也有讲究先装两个电机和万向轮让底盘能平稳站在地面上再固定STM32、驱动板、电池最后才装传感器和外壳。重心尽量放低电池盒我用3D打印了一个支架固定在底盘正中央偏下如果重心太高急转弯时桶身会甩出去。3.3 主控程序逻辑状态机、串口解析与关键代码程序我整体按状态机来写这是嵌入式开发里最不容易出错、也最好调试的结构。每个状态对应一个动作集合状态之间靠事件切换。状态枚举typedef enum { STATE_IDLE, // 空闲待机 STATE_COME, // 被召唤朝人移动 STATE_FOLLOW, // 跟随人移动 STATE_STOP, // 停车等待 STATE_BACK_HOME, // 回窝 STATE_AVOID, // 避障子状态 } state_t;状态迁移的核心逻辑默认处于IDLE此时电机停转只有语音模块和超声波模块在低功耗轮询。SU-03T发来“过来”命令状态切到COME进入COME后前向超声波测距如果距离大于40cm就前进小于40cm进入FOLLOWFOLLOW期间如果收到“停下”命令切回IDLEFOLLOW期间如果前方障碍物小于20cm优先进入AVOID状态控制电机转向避开后再恢复跟随。串口解析这块SU-03T通过TX引脚发来的是一组固定字节。我在串口中断里收数据存到环形缓冲区主循环里解析// 串口中断服务函数简化版 void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) { uint8_t data USART_ReceiveData(USART1); // 写入环形缓冲 rx_buffer[buf_write_idx] data; if (buf_write_idx BUF_SIZE) buf_write_idx 0; } }实际工程里要注意命令帧是一串字节不能只读一个字节就执行。我定义了一套简单协议0xAA 命令码 0x55主循环里检测到完整的帧头帧尾才执行动作。帧头帧尾校验能过滤掉很多干扰数据比如舵机转动时产生的电源噪声耦合到串口线上。跟随状态的代码前面贴了速度差算计这里补一个防撞优先级判断if (distance_front 20) { // 前方太近紧急停止并微转向 motor_set_speed(0); motor_set_speed(0); delay_ms(100); // 左转一点再继续 motor_set_speed(-20); motor_set_speed(20); delay_ms(150); // 重新进入跟随/召唤逻辑 }这段代码写在主循环的开始相当于给整个运动控制加了一个安全网。不管当前状态是COME还是FOLLOW只要前方超声波小于20cm就必须停下来。我实测这个小逻辑非常有效垃圾桶推着沙发脚、桌子腿往前走的情况基本被杜绝了。3.4 功能调试顺序先电机、再语音、再测距、最后联动我强烈建议不要跳过任何一个单独的调试步骤直接上整车。整套系统串起来之后任何一个环节出问题都容易互相掩盖。我的调试顺序是电机方向验证用一段测试代码单独让左轮正转、反转右轮正转、反转确认两个电机前进方向一致。这一步很基础但很关键因为两个电机如果反了差速控制就全乱套。我给这段代码起了个名“电动车测试”每次换硬件都要跑一遍。PWM调速验证写一个斜坡函数让PWM从0逐渐加到50%再降到0观察电机是否平顺。如果听到电机有明显的“咔咔”声说明PWM频率太低或死区时间不对。我用的PWM频率是20kHz设置方法TIM3的ARR999PSC72-172MHz/(1000×72)1kHz其实我实测1kHz就够但20kHz更安静电机线圈的啸叫会小很多。语音模块验证不接主控用USB转TTL先跟SU-03T单独通信确认每个命令词都能发出对应的数据帧。这一步能避免“模块没烧录好”和“主控解析有问题”混在一起。超声波模块验证用串口打印每个探头的实时距离人从1.5m外慢慢走近看读数是否连续变化。如果读数跳变很大大概率是电源纹波干扰或者触发间隔太短。联动测试把上面所有模块都接上跑完整的状态机逻辑从“小桶小桶”唤醒开始一路测到回窝。4. 常见问题与排查技巧实录我踩过的那些坑这部分我最想写因为翻车现场学到的比顺风调试多得多。我把几个高频问题整理成了速查表你遇到类似的现象可以直接对照排查。现象可能原因处理方法电机不转驱动板没上电/STBY没拉高用万用表量VM和VCC电压把STBY接3.3V电机只往一个方向转AIN1/AIN2电平组合错误交换控制引脚或改代码电平电机一转MCU就复位电池电压被拉垮检查供电拓扑控制回路与电机回路分开语音唤醒成功率低麦克风朝向不对或供电纹波露出麦克风孔给语音模块单独加100uF电容串口数据乱码波特率不匹配或共地问题确认波特率9600检查GND是否连通跟随画龙左右摆动左右探头差异过大/比例系数过大重新校准探头安装角度调小diff系数前方读数跳动触发间隔太短/多探头串扰每个探头间隔50ms以上分时触发跑不直左右电机基准不对称给左右轮分别设置基准PWM系数回窝位置不准红外对管太灵敏/机械限位缺失加机械挡板红外对管装低一点这几个问题的根源有共性电源不干净、信号参考不统一、机械安装不牢靠。如果你调试时遇到多个问题并发我的建议是“先解决电源再解决信号最后看机械”。电源是万物基础我踩过无数坑最后发现一根杜邦线接触不良导致的GND虚接让整个系统行为毫无规律。这里再写几个独家避坑细节第一个是超声波模块的供电。HC-SR04标注工作电压5V但市面上很多模块VCC引脚内部并没有稳压直接给5V没问题但如果和STM32共地后5V模块的Echo输出高电平是5V而STM32的GPIO容忍3.3V电平不兼容。有些板子PA口是5V容忍的有些不是。稳妥做法是Echo引脚加一个分压电阻10kΩ串接到PA1。我在设计第一版的时候没加结果超声波偶尔触发一次错误的远端读数导致垃圾桶朝家具冲。加了分压后再没出现过。第二个是语音模块的喇叭不要放在桶盖转轴附近。桶盖开合时舵机臂会碰到喇叭纸盆声音会变得闷唤醒词识别率下降。我把喇叭固定到桶壁侧面用热熔胶稍微垫高一点声音出来就清晰多了。第三个是如果你想做“打开盖子”这个动作舵机的行程范围要留余量。SG90舵机0~180度但桶盖实际打开到90度左右就够。程序里我设的打开角度是95度关闭角度是5度而不是极限0和180这样能避免舵机堵转发热也延长机械结构寿命。第四个是电池尽量用带保护板的18650不然过放一次电池基本报废。我之前贪便宜买了裸电池两次忘充电就放到2V以下内阻变大后面怎么充都充不满。后来换了大容量带保护板的版本贵不了几块钱但省心很多。5. 进阶扩展方向从“听话”到“自主”的路怎么走如果你把上面的基础版本跑通了下一步想让它更聪明我觉得有几个方向特别值得探索成本都不高而且逻辑上和现有代码是平滑过渡的。5.1 加入视觉识别让垃圾桶能分辨垃圾类型你可以在桶盖位置加一个K210视觉识别模块比如Sipeed Maix Bit价格大概50元左右训练几个简单的分类模型识别矿泉水瓶、易拉罐、纸巾等常见垃圾。识别结果通过UART发给STM32再控制舵机把对应分类的舱门打开。这个扩展能直接把项目从“智能垃圾桶”升级成“简易垃圾分类桶”。训练模型用MaixHub的开源平台不需要自己搭机器上传几张图片就能在线训练。我试过用K210识别“纸团”和“塑料瓶”精度在室内光线条件下还能接受。但要注意K210识别需要一定处理时间大概几百毫秒这会和超声波跟随的实时性冲突。我的建议是让视觉识别作为一个独立线程跑不给它打断运动控制的权利识别结果只是“提示音”而不是直接触发动作。毕竟你丢垃圾的时候垃圾桶基本是停着的不需要边跑边识别。5.2 接一个Wi-Fi模块远程查看电量与召唤ESP8266或者ESP32模块很便宜十几块钱。你可以让垃圾桶通过MQTT协议连接家里已有的智能家居平台比如Home Assistant。这样一来你可以用手机App查看电量、当前状态在哪、在干啥甚至远程发命令让垃圾桶去某个位置。STM32和ESP8266之间也是串口通信协议完全可以复用现有命令帧——你只要在ESP8266里加一层MQTT转串口的功能。这个扩展对代码改动很小因为我前面特意把命令解析和运动控制解耦了所有动作入口都是串口帧。你只需要在main函数里加一个“网络命令缓冲队列”让ESP8266发来的数据和语音模块发来的数据走同一个分发函数。我在实际做这个功能时发现ESP8266的串口引脚默认是软件串口速率高了容易丢数据建议用硬件串口或降低波特率到4800。5.3 自己画一块集成PCB摆脱杜邦线地狱如果你动手能力强一点可以把STM32最小系统、TB6612、稳压模块、超声波接口全部集成到一块双层PCB上。开源社区有很多类似的参考设计Gitee和GitHub上搜“STM32 垃圾桶”就能找到不少原理图。画PCB的好处不只是好看更重要的是信号完整性和电源完整性变好了——杜邦线飞线状态下电机启动电流变化会在长导线上产生压降和干扰PCB上走线短而粗问题能缓解很多。我认识一个朋友把这块PCB打了样顺手把超声波模块换成贴片版本整体尺寸做到手机差不多大装在桶盖上完全看不到线缆。他用的是立创EDA来画直接下单打样五片只要二十来块。如果你是第一次画板建议先复制一个成熟的开源工程学着改而不是从零开始画原理图。最后说个我自己在实践里的体会这类移动机器人项目真正难的从来不是某一项技术而是多个传感器、多个执行器在一起时的“协同调优”。你单独测超声波没问题单独测电机也没问题但它们一起工作时电源波动、信号干扰、时序冲突全来了。所以调试的时候我始终坚持“一次只改一个变量”改了硬件就重新测软件改了参数就观察车子的物理响应。这套方法看起来很慢但恰恰是避开“玄学Bug”的最快路径。如果你按照这篇文章一步步做下来最后能跑通“小桶小桶——过来——停”这套流程恭喜你你已经拥有了一台真正会“听”会“走”的智能移动垃圾桶。仓库里的代码和接线图都开放在GitHub仓库地址github.com/yourname/voice-trash-can有问题可以直接提Issue或者加入交流群一起讨论。做开源项目最大的乐趣就是看着别人用你的代码做出不一样的东西期待看到你的版本。
返回列表