在医疗机构的日常运营中,药品分拣是一项既关键又繁琐的工作。传统的人工分拣方式不仅效率低下,还容易因疲劳导致错误。作为一名长期从事嵌入式系统开发的工程师,我曾亲眼目睹药剂师因连续工作导致药品分发错误的案例。这促使我思考:能否利用现代嵌入式技术和人工智能,开发一套可靠、高效的自动化药品分拣系统?
经过三个月的研发迭代,我们成功实现了基于STM32单片机的智能药品分拣系统。该系统采用双屏协同显示(OLED+Drivic TFT LCD),结合K210开发板上的SIPeed AI模块进行药品形状识别,最终通过电机驱动完成分拣操作。实测表明,系统对正方形和圆形药盒的识别准确率达到99.2%,单次分拣耗时仅1.3秒。
关键设计理念:将嵌入式系统的实时性与AI的图像识别能力相结合,在保证响应速度的同时提升识别精度。硬件上采用模块化设计,便于维护升级;软件层面实现学习-识别-执行的闭环控制。
系统采用分层架构设计,从下至上分为硬件驱动层、算法处理层和应用逻辑层:
mermaid复制graph TD
A[药盒图像采集] --> B[图像预处理]
B --> C{形状识别}
C -->|圆形| D[电机顺时针转动]
C -->|方形| E[电机逆时针转动]
D --> F[圆形药品分拣区]
E --> G[方形药品分拣区]
选择该型号主要基于三点考量:
实测发现:使用DMA传输图像数据时,CPU利用率从78%降至42%
采用"OLED+Drivic TFT LCD"双屏设计实现功能分离:
对比测试显示,这种组合比单屏方案的误操作率降低63%。
选用L298N驱动芯片配合42步进电机,经过PID调参后:
python复制# 图像预处理伪代码
def preprocess(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度化
blur = cv2.GaussianBlur(gray, (5,5), 0) # 高斯滤波
edges = cv2.Canny(blur, 50, 150) # 边缘检测
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
return contours
传统霍夫变换在嵌入式平台执行较慢(平均380ms),我们改进为:
优化后识别时间降至120ms,内存占用减少42%。
系统支持5次重复学习机制:
实测表明,5次学习后识别稳定度提升至99.5%以上。
采用三级供电架构:
教训:初期未隔离电机电源,导致MCU复位现象。添加1000μF电容后问题解决。
总结出"三区隔离法":
| 测试项目 | 指标要求 | 实测结果 |
|---|---|---|
| 识别准确率 | ≥98% | 99.2% |
| 单次分拣耗时 | ≤1.5s | 1.28s |
| 连续工作稳定性 | 8小时 | 12小时无故障 |
| 光照适应性 | 200-1000lux | 150-1200lux |
问题现象:圆形药盒误判为方形
排查过程:
当前系统已在实际医疗场景中验证了可行性,后续可扩展:
开发建议:若需处理更多形状,建议升级K210至K510芯片,其NPU算力提升5倍。
经过半年实际运行,该系统已成功分拣药品超过12万次,错误率为0.08%,显著提升了药房工作效率。这个项目让我深刻体会到,嵌入式系统与AI的结合能为传统行业带来真正的变革价值。