颜色/RGB识别传感器 — 展厅"识物辨色"互动的判色小能手
- ✓ 搞懂光电二极管加 RGB 滤光片如何测出颜色,以及 RGB 与 HSV 判色的差别
- ✓ 理解环境光和补光对判色的决定性影响,学会用打光罩把变量控住
- ✓ 会为识物分拣、颜色配对、道具识别选合适的判色方案
- ✓ 掌握 I2C 就近读和做成开关量色标两种工程接法,把信号送进采集与中控
- ✓ 学会白平衡标定和阈值分档,把"差不多的颜色"稳定分开
第一次做"彩色积木识别"互动栽的跟头,现在还记得:实验室调得好好的,红黄蓝白都能准确认出来,一到现场展厅全乱套。后来才反应过来——现场头顶是暖色射灯,展台又靠窗有天光,环境光把传感器看到的颜色整个"染"了一遍。颜色传感器最大的敌人从来不是颜色本身,是光。
颜色传感器在展厅里的活儿是:判断放上来的东西是什么颜色,然后触发对应的内容。识物分拣、颜色配对游戏、不同颜色道具切不同剧情,都是它的主场。这篇把测色原理、环境光这个大坑、两种接法和标定讲透,帮你把"实验室能用、现场翻车"的经典陷阱绕过去。
R2 内容,涉及传感器选型与接线。颜色传感器的积分时间、增益、I2C 地址、输出量程以所用型号的官方 datasheet 为准;工业采集与中控链路以科星官方文档为准。
原理:把反射光拆成 RGB 再判色
颜色传感器(以常见的 TCS34725 一类为例)本质是一组 带滤光片的光电二极管阵列 + 积分器。它的工作分几步:
- 板载一颗白光 LED 补光,把待测物照亮(这一步很关键,后面细说)。
- 物体表面把光反射回来,进入传感器的光电二极管阵列。
- 阵列前分别覆盖了红、绿、蓝三种滤光片(外加一路无滤光的 Clear 通道测总亮度),各通道只让对应颜色的光通过。
- 每个通道在一段积分时间内累积光子转成电荷,得到 R、G、B、C 四个原始计数值。
- 把 R:G:B 的比例(而不是绝对值)算出来,就得到颜色信息。
拿到 RGB 之后怎么判色,有两条路:
- 直接比 RGB 比例:简单,但对亮度变化敏感——同一个红色,光强不同 RGB 绝对值差很多。
- 转成 HSV 再判:把 RGB 转成色相(Hue)、饱和度(Saturation)、明度(Value),用色相 H 判颜色。H 基本只跟"是什么颜色"有关,跟明暗关系小,抗亮度波动能力强很多。展厅判色优先用 HSV 的色相加阈值。
记住一个反直觉的点:颜色传感器给的原始 RGB 是"这块物体在当前光照下反射出来的样子",不是物体的"真实颜色"。同一个物体换个光,读数就变。所以判色永远是相对的、要标定的,别指望上电就有绝对准确的颜色名。
颜色传感器能感知什么
| 感知能力 | 说明 |
|---|---|
| RGB 三原色分量 | 红绿蓝各通道的光强计数,判色的原料 |
| 明度/总亮度(Clear) | 无滤光通道,反映整体反射强度,也可做有无物体判断 |
| 色相(换算 HSV 后) | 由 RGB 换算,判"什么颜色"最稳的量 |
| 颜色分档判定 | 把连续 RGB/HSV 按阈值归到有限几种预设颜色 |
展厅场景基本都是"分档判定":不需要精确色号,只要把放上来的东西稳定归到红/黄/蓝/绿/白等有限几类,触发对应内容即可。所以工程重点不是"测得多准",是"分得多稳"。
优势与局限
优势:
- 能分辨具体颜色,不像普通光电开关只能判有无/明暗。
- 近距离下判色稳定,配好补光和光罩,红黄蓝这种差异大的颜色能分得很干脆。
- 有 I2C 数字接口,读原始 RGB 方便,判色逻辑放中控/采集侧灵活调。
局限(诚实说):
- 受环境光影响极大:这是头号问题,不控光基本没法稳定用。
- 距离敏感:物体离传感器远近变了,反射光强跟着变,判色会飘。要固定检测距离。
- 只能近距离:典型工作距离就是贴近的几毫米到几厘米,别指望隔空、远距离、大视野判色。
- 相近色难分:浅蓝和浅绿、深红和棕,这种色相接近的靠阈值容易串档。设计互动时就该选色差大的道具,别给自己出难题。
- 反光/透明/金属面翻车:镜面反光、透明玻璃、金属,反射特性怪异,判色不可靠。
一条能救命的设计原则:从互动策划阶段就把判色难度压下去——用饱和度高、色相拉开的纯色道具(正红/正蓝/正黄),别用马卡龙色系、别用带反光涂层。传感器再好也架不住"人眼都要凑近分辨"的相近色。
展厅工程级接法
颜色传感器有两种典型落地方式,按需求选。
方案 A:I2C 就近读原始 RGB
待测物(放置区,固定距离 + 补光罩)
│
颜色传感器(I2C:SDA/SCL)
│ I2C 是短距总线,就近接
▼
就近的采集/网关(带 I2C 的边缘网关,或先转 485/网口)
│
▼
中控软件(SoftControl)── 读 RGB → 判色 ──▶ 触发对应内容
方案 B:本地判色 → 做成开关量色标
传感器就近接一个小的判色单元(把 RGB 分档逻辑固化在本地),每种颜色对应一路开关量输出,再把这几路开关量接进工业 DI 采集:
颜色传感器 → 本地判色单元 → 多路开关量(红=DO1 / 蓝=DO2 / 黄=DO3 …)
→ 工业开关量采集(科星)→ 中控读状态位触发
接线要点
- I2C 是短线总线:SDA/SCL 拉线别太长(几十厘米内为宜),长了要降速率或加驱动。就近接采集/网关,别指望 I2C 拉几米过去。
- 固定检测距离和位置:给待测物做一个定位卡槽/托盘,保证每次放的位置和离传感器的距离一致,这是判色稳定的前提之一。
- 必须加补光 + 遮光罩:用传感器自带或额外白光 LED 稳定补光,外面套一个遮光罩把环境光挡住——让传感器看到的光基本只来自可控的补光。这一步做好,现场和实验室的差异就小了。
- 共地、信号远离强电:I2C 和开关量都是弱信号,走弱电、共地。
- 判色逻辑放哪:要现场灵活调阈值,放中控(方案 A);要链路简单、只认几种固定色,做成开关量色标(方案 B)进 DI 更省心。
遮光罩 + 固定距离这两条,比换更贵的传感器管用得多。见过太多人一遇判色不准就想升级硬件,其实是没把光和距离这两个变量控住。
调节 / 标定要点:白平衡是必修课
颜色传感器上线前一定要做白平衡/基准标定,否则读数没法用:
- 取白基准:在实际安装环境、开着补光、盖着光罩的条件下,放一张标准白卡,记下此时的 RGB 读数作为"白"的基准,后续判色以此归一化,抵消补光颜色偏差和环境残光。
- 采样各目标色:把每种要识别的道具依次放上去,各记录多次 RGB/HSV 读数,看它们的色相分布,在相邻两色的分界处划阈值,并留出安全间隔(死区),避免边界抖动串档。
- 调积分时间和增益:光弱、颜色暗就加长积分时间或调高增益(读数更足但更慢/噪声大);反射强就反过来。以型号可调范围和 datasheet 为准。
- 换环境要重标:换了展厅灯光、换了安装位置、补光 LED 老化了,都可能要重标白平衡。把标定做成现场一键流程,省得每次翻手册。
选型对比表
| 维度 | 颜色传感器(I2C RGB) | 普通光电开关 | 工业视觉判色 |
|---|---|---|---|
| 能判具体颜色 | 是(近距、需标定) | 否(只判有无/明暗) | 是(远距、多目标、更强) |
| 工作距离 | 近(毫米~厘米级) | 近~中 | 中~远 |
| 抗环境光 | 弱(必须遮光补光) | 中 | 较强(可控光源+算法) |
| 相近色分辨 | 一般(靠阈值) | 不适用 | 强 |
| 成本 | 低 | 很低 | 高 |
| 接口 | I2C / 转开关量 | 开关量 | 网口/工业协议 |
| 展厅典型场景 | 单件道具识色触发 | 有无物体检测 | 复杂分拣/多色多目标 |
相机视觉判色属于另一条技术路线,复杂多目标场景才考虑,普通"放一件认一色"用颜色传感器即可。具体参数以型号 datasheet 为准。
故障排查表
| 现象 | 最可能原因 | 处理方法 |
|---|---|---|
| 实验室准、现场乱 | 环境光干扰 / 没做现场标定 | 加遮光罩挡环境光;在现场光照下重做白平衡 |
| 同一物体读数忽大忽小 | 检测距离不固定 / 物体没放稳 | 加定位托盘固定距离和位置 |
| 相近两色老是认错 | 色相太接近 / 阈值死区不够 | 换色差更大的道具;阈值间加死区;改用 HSV 色相判 |
| 白色/浅色都判成一样 | 补光太强饱和 / 增益过高 | 缩短积分时间、降增益;重标白基准 |
| 暗色/深色读不出 | 补光不足 / 积分时间太短 | 加长积分时间或增益;加强补光 |
| I2C 读不到 | 地址错 / 线太长 / 上拉缺失 | 核对 I2C 地址;缩短走线;确认 SDA/SCL 上拉电阻 |
| 反光/透明物判色乱 | 镜面反射/透光特性异常 | 这类材质本就不适合,改道具材质或换识别方式 |
进阶 / 应用案例
- 颜色配对游戏:参观者从一堆色块里挑出和屏幕提示同色的放上去,传感器判色对了就加分——判色阈值要设稳,别让"差不多的颜色"误判扫了兴致。
- 识物分拣互动:几种不同颜色代表不同类别的道具,放上对应颜色触发对应的科普内容或动画,比按钮选择更有参与感。
- 道具识别切剧情:给不同角色/关卡配不同颜色的实体令牌,放上去切换整段体验内容——本质是用颜色当低成本的"实体选择器"。
- 多工位色标流水线:用方案 B 把每个工位的颜色判定做成开关量进 DI,中控统一读多工位状态,做团队协作类的拼色互动。
动手挑战
- 拿一颗 TCS34725 一类的模块,用 I2C 读原始 R/G/B/C,把红黄蓝白几个色块分别在开灯/关灯/盖光罩三种光照下各读一遍,亲眼看看环境光把读数改动了多少——这一遍做完你就再也不会忘记加遮光罩。
- 把读到的 RGB 转成 HSV,只用色相 H 给几种色块划阈值,故意拿两个相近色测边界,看看死区留多大才不串档。
本节学到的知识
- 颜色传感器(TCS34725 一类)= 带 RGB 滤光片的光电二极管阵列 + 积分器,加一路无滤光的 Clear 通道测总亮度,输出 R/G/B/C 四个原始计数。
- 板载一颗白光 LED 补光是判色前提;测的是反射光,读到的永远是"当前光照下的样子",不是物体真实颜色,所以判色是相对的、必须标定。
- 判色两条路:直接比 RGB 比例(对亮度敏感)或转 HSV 用色相 H 判;展厅优先 HSV 色相 + 阈值,抗亮度波动强得多。
- 头号敌人是环境光,其次是距离;工作距离就是贴近的毫米到厘米级,别指望隔空、远距离、大视野判色。
- 稳定判色三件套:遮光罩 + 固定检测距离(定位卡槽/托盘)+ 白平衡标定,比升级硬件管用;相近色、反光/透明/金属面它搞不定,要在策划阶段就规避。
- 接口 I2C / 开关量两选一:I2C 是短线总线(SDA/SCL 走线几十厘米内为宜,长了降速率或加驱动、确认上拉电阻),弱信号走弱电、共地、远离强电。
- 两种工程接法:方案 A I2C 就近读原始 RGB 让中控灵活判色;方案 B 本地判色做成多路开关量色标(红=DO1/蓝=DO2…)进工业 DI 采集,链路简单、只认固定几色更省心。
- 白平衡标定:现场开补光、盖光罩下放标准白卡取基准归一化;各目标色多次采样在相邻色分界处划阈值 + 留死区防串档;积分时间/增益按光强调(暗加长/调高,强反之),换灯光或安装位要重标。以型号 datasheet 为准。
小结 · 你掌握了什么
- 颜色传感器用 RGB 滤光片加积分测反射光的三原色配比,读到的是"当前光照下的样子",判色永远是相对的、要标定的。
- 判色优先转 HSV 用色相,抗亮度波动比直接比 RGB 稳得多。
- 头号敌人是环境光,其次是距离——遮光罩 + 固定距离 + 白平衡标定三件套做好,比升级硬件管用。
- 别对它提过分要求:只近距、色差大的道具才稳;相近色、反光透明金属面它搞不定,这些要在策划阶段就规避。
- 工程接法两条路:I2C 就近读原始 RGB 让中控灵活判色,或本地判色做成开关量色标进 DI,按链路复杂度选。
要把"认出的颜色"接进抢答、配对、计分这类互动逻辑,中控答题系统是承接层——了解 Quiz 互动答题系统。
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。