基于 Arduino 与 RGB 传感器的高级颜色分拣机
元件与供应
![]() | Arduino Nano R3 | × | 1 |
| TCS34725 RGB 传感器 | × | 1 | |
| LM2596 降压模块 | × | 1 | |
| MG-90S 舵机 | × | 2 | |
| MR105ZZ 滚珠轴承 (5×10×4mm) | × | 3 | |
| 608RS/608ZZ 滚珠轴承 (8×22×7mm) | × | 1 | |
| 6003RS 滚珠轴承 (17×35×10mm) | × | 1 | |
| M3×15mm 沉头螺丝 | × | 1 | |
| M2×10 自攻螺丝 | × | 20 | |
| RGB LED (共阳) | × | 1 | |
| 220Ω 电阻 | × | 3 | |
| 导线 | × | 1 | |
| 2.1×5.5mm 电源插头 | × | 1 | |
| 热缩管 | × | 1 | |
| 杜邦连接器 | × | 1 | |
| 9V/12V 电源 (≥1A) | × | 1 | |
| 5支 22mm×100mm 试管 | × | 1 | |
| Skittles 彩虹糖 | × | 1 |
所需工具
- 3D 打印机
- 螺丝刀
- 剥线钳
- 钳子
- 电烙铁
- 万用表
- 压线钳
项目背景
这个项目原本不在计划中。3.5年前我开始设计一个更复杂的分拣机,却因故搁置。几个月前重拾旧项目,决定先做一个简化版调试取料机构。原以为两个周末搞定,结果经历了两版完全不同的设计和多次原型迭代,才勉强达到可用水平(仍偶有取料故障)。尽管不完美,但结果尚可满意。
工作原理
机器分两级:
- 取料与识别:顶部储料仓底部的取料机构将糖果送至颜色传感器前识别;摇臂防止糖果卡阻(仍偶发)。
- 分拣投放:识别颜色后,试管架旋转对准相应试管,糖果落入。循环直至储料仓空。
自制指南
完整教程见:littlefrenchkev.com/colour-sorting-machine
组装步骤
3D 打印零件清单:

前壳有两种外观版本,功能相同。其余所需零件:

组装过程视频(含慢动作 3D 打印镜头):
初始设置
首次上电时,两舵机复位。需确保取料齿轮/轴处于顶部位置,试管架与取料机构对齐。

常见故障排查
LED 闪烁红灯、无启动序列
RGB 传感器未检测到,检查接线或传感器是否损坏。
试管对齐不准
原因1:舵机精度或打印公差导致。修改 colour_angle 数组微调各颜色停止角度。
原因2:齿轮间隙导致惯性超调。修改前向/后向防回程变量补偿。
颜色识别混淆
修改 colour_limit_values 数组(各色 RGB 阈值)。仅装入单色糖果,打开串口监视器观察实时 RGB 值以校准。
亮点功能
- RGB 状态灯:分拣时显示当前糖果颜色;空仓后循环演示;启动故障时红灯报警。
- 防回程补偿:软件根据旋转方向提前/延后停止角度,抵消齿轮间隙。
- 带渐变的延时函数:
set_led(ms, color)在延时期间平滑过渡 LED 颜色,配合试管架旋转效果极佳。
补充说明
- 黑色打印件会影响传感器读数(尤其是空仓时)。
- 多次分拣后糖果表面磨损/粘手导致识别率下降,校准时请用“新”糖果。
- 涉及食品接触,请使用食品级打印耗材。
- 项目进度关注 Instagram:@little_french_kev
代码
#include <Wire.h>
#include "Adafruit_TCS34725.h"
#include <Servo.h>
// ... 完整代码见原文,含颜色阈值校准、舵机控制、LED 渐变、防回程逻辑等 ...
原理图
接线简单,务必在接入其它模块前确认降压模块输出 5V!
制造工艺
