1. 项目概述
在物流仓储和工业生产领域,物料分拣一直是个让人头疼的问题。记得去年参观一家电商仓库时,看到工人们弯腰分拣包裹的场景,当时就在想:这种重复性工作能不能用自动化设备替代?这就是我们开发这款STM32智能分拣小车的初衷。
这款小车采用STM32F103ZET6作为主控芯片,集成了路径识别、障碍避让、颜色识别和机械分拣四大核心功能。相比市面上动辄上万的工业分拣设备,我们的设计成本控制在千元以内,但性能毫不逊色——实测分拣准确率能达到98%以上,单件分拣耗时仅3秒左右。
2. 硬件系统设计
2.1 主控模块选型
选择STM32F103ZET6主要基于三点考虑:
- 丰富的GPIO资源(112个I/O口)可以同时连接多个传感器
- 内置定时器支持PWM输出,方便控制电机和舵机
- 72MHz主频足以处理传感器数据并实时响应
实际使用中发现,这款芯片的ADC采样速率能达到1MHz,对于颜色传感器的数据采集非常有利。不过要注意的是,使用前需要仔细配置时钟树,否则容易出现采样不准的问题。
2.2 传感器配置方案
我们采用了三级传感体系:
- 底层定位:5路TCRT5000红外传感器阵列,间距2cm
- 中层避障:HC-SR04超声波传感器,检测角度15°
- 上层识别:TCS3200颜色传感器,检测距离3-5cm
这里有个实用技巧:红外传感器安装高度建议控制在8-10mm,这个距离对黑白线的识别最敏感。我们最初设置成15mm,结果反光干扰严重,后来调整后才稳定。
2.3 驱动与执行机构
电机驱动采用经典的L298N方案,但要注意:
- 电机供电必须与逻辑供电隔离
- PWM频率建议设置在15-20kHz(实测这个区间电机噪音最小)
- 一定要加装续流二极管,我们曾因省略这个烧过两个驱动芯片
分拣机构使用SG90舵机+3D打印夹爪,设计时特别注意了:
- 舵机扭矩要留足余量(实际需要至少2kg·cm)
- 夹爪开合行程要大于物料最大尺寸20%
- 末端最好加装硅胶套增加摩擦力
3. 软件架构实现
3.1 主程序流程
采用状态机设计模式,主要包含以下几个状态:
- 循迹模式(默认状态)
- 避障模式(检测到障碍时触发)
- 识别模式(到达分拣点时激活)
- 分拣模式(完成识别后执行)
c复制void main() {
hardware_init();
while(1) {
switch(current_state) {
case TRACING: tracing_handler(); break;
case AVOIDING: avoid_handler(); break;
case RECOGNIZING: recognize_handler(); break;
case SORTING: sort_handler(); break;
}
}
}
3.2 关键算法实现
循迹PID控制:
我们采用增量式PID算法,参数整定过程如下:
- 先调P(比例项),让小车能基本跟随
- 再加D(微分项),抑制振荡
- 最后微调I(积分项),消除静差
最终参数:
c复制#define KP 0.8
#define KI 0.01
#define KD 0.2
颜色识别算法:
TCS3200输出的是频率信号,我们的处理流程:
- 分别采集R、G、B三通道的脉冲数
- 进行归一化处理
- 计算色度坐标
- 与预设阈值比较
c复制Color detect_color() {
uint16_t r = read_red();
uint16_t g = read_green();
uint16_t b = read_blue();
float sum = r + g + b;
float nr = r/sum, ng = g/sum, nb = b/sum;
if(nr > 0.6 && ng < 0.3) return RED;
if(ng > 0.5 && nr < 0.3) return GREEN;
if(nb > 0.4 && nr < 0.2) return BLUE;
return UNKNOWN;
}
4. 系统调试与优化
4.1 常见问题排查
问题1:循迹时左右摆动
- 检查PID参数是否合适
- 确认传感器安装是否水平
- 测试电机转速是否一致(可用示波器看PWM占空比)
问题2:颜色识别不稳定
- 确保检测环境光线均匀
- 调整传感器与被测物的距离(3-5cm最佳)
- 增加采样次数取平均值
问题3:分拣动作不到位
- 检查舵机零点位置
- 确认机械结构是否有卡顿
- 测量电源电压是否足够(建议≥6V)
4.2 性能优化记录
通过三次主要迭代提升了系统性能:
-
第一版:基础功能实现,但分拣成功率仅85%
- 问题:颜色识别受环境光影响大
- 改进:增加光源补偿算法
-
第二版:成功率提升到92%,但响应慢
- 问题:算法处理耗时过长
- 改进:优化代码结构,使用查表法替代浮点运算
-
第三版:最终达到98%成功率
- 改进:增加传感器校准流程
- 添加运动预测机制
5. 应用扩展与升级
这套系统其实还有很大扩展空间:
- 通信扩展:可加装蓝牙/WiFi模块实现远程监控
- 功能升级:增加RFID识别模块处理更多品类
- 集群协作:多车协同可通过红外或无线组网
我们在实验室已经实现了三车协同分拣,关键点在于:
- 采用时分复用避免通信冲突
- 设置优先级仲裁机制
- 路径规划采用A*算法
实际部署时发现,地面反光、电磁干扰等问题会比实验室环境复杂得多。建议正式应用前一定要在现场做充分测试,最好能连续运行24小时以上观察稳定性。
