西电通院微控2026-MCU任务
第一周任务
3.21更新,改为串口控制采集
具体代码详见github
简介
本周要求完成MCU功能验收,需要通过微控制器板读取传感器数据,提供的开发板为NUCLEO-F411RE,颜色传感器为TCS34725,使用I2C通信,提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出;距离传感器为VL6180
TCS34725数据处理与算法选择
在获取传感器底层数据后,系统引入了 RGB 到 HSV 色彩空间的转换算法。其主要原因如下:
消除光照干扰: 传感器原始的 RGB 输出对光照变化极其敏感,亮度的微小改变会导致 R、G、B 三个维度的数值同时发生剧烈变化,难以设定固定的判定阈值。
特征解耦: HSV 色彩空间将“颜色分类(色相 H)”与“光照强度(明度 V)”在数学上进行了分离。
提升识别鲁棒性: 通过转换,判定逻辑可主要依赖于受光照影响极小的色相(H)参数。这大幅降低了复杂光照环境对验收测试的干扰,确保了微控制器能够稳定、准确地识别目标物体的真实颜色。
为什么不采用简单的 RGB 归一化算法?
虽然对原始 RGB 数据进行归一化(如求取 R/(R+G+B) 比例)也能在一定程度上抵消光照强度的变化,但在实际 MCU 编程与验收测试中存在局限性:
-
阈值设定复杂: 归一化 RGB 仍需同时依赖三个通道的比例区间来圈定某种颜色,缺乏直观性,调试难度大。
-
消色差物体(黑白灰)识别困难: 在低照度或面对黑、白、灰等无色相物体时,归一化会放大传感器噪声,且无法有效区分这三种状态。
-
HSV 的降维优势: HSV 模型不仅将光照(V)解耦,还引入了饱和度(S)特征。系统可通过设置 S 的阈值轻松过滤掉黑白灰与环境噪声,随后仅通过一维的色相(H)角度即可完成颜色的精准分类,大幅简化了判定逻辑并提高了系统的鲁棒性。
使用说明
I2C 配置
- 颜色传感器 TCS34725 使用 I2C1 接口
- 接线:D15 (SCL)、D14 (SDA)
- 距离传感器 VL6180 使用 I2C3 接口
- 接线:D7(SCL)、D5(SDA)、D6(GPIO中断)
校准步骤
- 烧录固件后,观察板载 LED 快速闪烁(校准模式)
- 将传感器对准白色物块,按下蓝色按钮
- LED 变为缓慢闪烁
- 将传感器对准黑色物块,按下蓝色按钮
- 校准完成后进入命令等待状态(串口不会自动连续输出)
测量操作步骤(串口命令)
- 上位机串口发送
color?,单片机执行一次颜色测量并返回一条颜色结果 - 上位机串口发送
distance?,单片机执行一次距离测量并返回一条距离结果 - 发送其他命令返回
ERR,BADCMD
输出格式示例
RAW(C=3117,R=1329,G=1325,B=1561),RGBN(0,0,0),HSV(H=0,S=0,V=0),PCT(0,0,0),COLOR=黑色
distance:189
字段说明
| 字段 | 含义 |
|---|---|
| C | 总光强(清晰光) |
| R/G/B | 红/绿/蓝分光强 |
| RGBN | 光强归一化后的 RGB 值(0-255) |
| PCT | RGB 百分比(相对光强比例,%) |
| H | 色相(0-359°) |
| S | 饱和度(0-100%) |
| V | 亮度(0-100%) |
| COLOR | 识别的颜色名称 |
| distance | 距离 |
校准流程
步骤如下:
- 发送
ERR,10,LED 快闪提示采集白基准 - 按键确认后,采集白基准
- 发送
ERR,11,LED 慢闪提示采集黑基准 - 按键确认后,采集黑基准
- LED 保持 500ms 后熄灭,进入正常运行
串口协议与错误码
正常数据
请求命令:
color?
distance?
颜色行:
RAW(C=...,R=...,G=...,B=...),RGBN(...),HSV(H=...,S=...,V=...),PCT(...),COLOR=...
距离行:
distance:<mm>
或
distance:NA
未知命令:
ERR,BADCMD
错误码(ERR,<code>)
01:TCS34725 初始化失败02:颜色原始数据读取失败03:校准失败04:颜色消息构建失败20:VL6180 初始化失败23:VL6180 读取距离失败24:UART2 中断接收启动失败10:提示开始白基准采样11:提示开始黑基准采样
注意事项
- 为保证测量准确,应当使传感器和物块的距离保持固定
- 校准是识别精度的前提,建议每次上电后按流程重新完成黑白基准采样
- 当前参数为固定阈值策略,不同光照环境下可能需要调整颜色区间参数
更多推荐



所有评论(0)