1. 项目概述:基于STM32的智能药品分拣系统
在医疗场景中,药品分拣是药房日常运营中最耗时且容易出错的环节之一。传统人工分拣不仅效率低下,还容易因视觉疲劳导致发药错误。我们团队基于STM32F103C8T6单片机开发了一套智能药品分拣系统,通过图像识别技术实现药盒形状的自动分类,配合电机驱动完成物理分拣。实测表明,系统对标准药盒的识别准确率达到98.7%,单次分拣周期不超过3秒。
这套系统的核心创新点在于:
- 采用双屏协同机制(OLED+Drivic显示屏)
- 集成K210人工智能模块实现边缘计算
- 设计低成本电机驱动电路
- 开发轻量级图像识别算法
2. 硬件架构设计
2.1 主控芯片选型
选用STM32F103C8T6作为主控芯片,主要基于以下考量:
- 72MHz主频满足实时图像处理需求
- 64KB Flash存储空间足够存放识别算法
- 丰富的外设接口(3个USART、2个SPI、2个I2C)
- 成本控制在20元以内
注意:实际采购时需选择正版ST芯片,市场上存在国产兼容型号(如GD32),虽然价格更低但部分外设时序存在差异。
2.2 图像采集模块
采用OV2640摄像头模组,配置参数如下:
- 分辨率:320x240(QVGA)
- 帧率:30fps
- 接口:DVP并行总线
- 供电:3.3V/120mA
通过STM32的DCMI接口直接连接摄像头,采用DMA传输节省CPU资源。实际调试中发现需要添加10cm焦距的镜头,否则近距拍摄会产生畸变。
2.3 电机驱动电路
使用TB6612FNG电机驱动芯片驱动N20减速电机,关键设计参数:
- 工作电压:6-12V
- 峰值电流:1.2A
- PWM频率:10kHz
- 启停加速度:0.5s
电路设计中特别注意了反电动势防护,在电机两端并联1N5819肖特基二极管。
3. 软件实现流程
3.1 图像处理算法
开发了基于轮廓检测的轻量级识别算法:
c复制// 边缘检测核心代码
void edge_detect(uint8_t *img_in, uint8_t *img_out) {
for(int y=1; y<HEIGHT-1; y++) {
for(int x=1; x<WIDTH-1; x++) {
int gx = img_in[(y-1)*WIDTH+x+1] + 2*img_in[y*WIDTH+x+1] + img_in[(y+1)*WIDTH+x+1]
- img_in[(y-1)*WIDTH+x-1] - 2*img_in[y*WIDTH+x-1] - img_in[(y+1)*WIDTH+x-1];
int gy = img_in[(y+1)*WIDTH+x-1] + 2*img_in[(y+1)*WIDTH+x] + img_in[(y+1)*WIDTH+x+1]
- img_in[(y-1)*WIDTH+x-1] - 2*img_in[(y-1)*WIDTH+x] - img_in[(y-1)*WIDTH+x+1];
img_out[y*WIDTH+x] = sqrt(gx*gx + gy*gy) > THRESHOLD ? 255 : 0;
}
}
}
3.2 K210模块集成
Sipeed MAIX Bit开发板通过UART与STM32通信,主要完成:
- 药盒模板训练(5次采样取均值)
- 实时图像特征提取
- 形状分类结果输出
通信协议设计为:
code复制[Start][Length][CMD][Data][CRC]
- Start:0xAA
- Length:数据长度
- CMD:0x01训练/0x02识别
- Data:图像数据或结果
- CRC:校验和
4. 系统调试与优化
4.1 常见问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 图像模糊 | 镜头焦距不准 | 调整镜头到10cm距离 |
| 电机抖动 | PWM频率过低 | 调整到10-15kHz |
| 误识别率高 | 环境光干扰 | 增加环形补光灯 |
| 通信中断 | 波特率不匹配 | 统一设置为115200 |
4.2 性能优化技巧
-
图像处理优化:
- 采用Q格式定点数运算替代浮点
- 使用STM32的CRC硬件加速校验
- 开启I-Cache和D-Cache
-
电源管理:
- 添加100μF钽电容滤波
- 电机电源与逻辑电源隔离
- 选用ME6211-3.3稳压芯片
-
机械结构改进:
- 增加药盒导向槽
- 采用橡胶减震垫
- 优化分拣臂杠杆比
5. 实测数据与效果
经过200次测试得到以下数据:
| 指标 | 圆形药盒 | 方形药盒 |
|---|---|---|
| 识别准确率 | 98.2% | 99.1% |
| 平均耗时 | 2.8s | 2.5s |
| 极端情况 | 反光表面 | 倾斜放置 |
系统功耗表现:
- 待机状态:0.5W
- 识别过程:3.2W
- 分拣动作:8.5W(峰值)
在实际药房环境中,该系统可替代2-3名人工分拣员的工作量,投资回收期约6个月。我们特别设计了分拣异常报警功能,当连续3次识别失败时会触发声光报警,并记录错误图像供后期分析。