一、产品简介
TCS34725是一款低成本,高性价比的RGB全彩颜色识别传感器,传感器通过光学感应来识别物体的表面颜色。支持红、绿、蓝(RGB)三基色和明光感应,可以输出RGB三色的数值以还原周围颜色。
本文介绍的颜色传感器外如下图所示:
其管脚定义如下表所示:
管脚名称 | 管脚功能 | 说明 |
LED | LED开关 | 高电平或悬空LED灯亮、低电平LED灯灭 |
INT | 中断输出 | 低电平有效 |
VCC | 电源正极 | 3.3V-5V |
GND | 电源地 | - |
SCL | I2C接口时钟线 | - |
SDA | I2C接口数据线 | - |
二、颜色传感器技术参数
- 工作电压:3.3-5V
- 检测距离:3mm-10mm
- 工作温度:-30°C~+70°C
- 通信接口:I2C,最高频率:400k
- 工作电流:65uA
三、软件接口
TCS34725(i2cObj) - 创建颜色传感器驱动对象
- 函数原型:
colorDev = TCS34725(i2cObj)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
i2cObj | I2C | 是 | 传入I2C对象 |
- 返回值:
执行成功,返回颜色传感器对象;创建失败,抛出Exception - 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
- 输出:
colorSensor init done
getRGB - 获取环境颜色的RGB值
- 函数原型:
TCS34725.getRGB()
- 参数说明:
无 - 返回值:
(R,G,B)分别代表红色(R)、绿色(G)和蓝色(B)三个通道上面的亮度
此API获取到的返回结果经过了3个算法处理,如果想获取颜色传感器的直接测量结果,请参考getRawData的说明。
- 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
r, g, b = colorSensor.getRGB()
print('r:0x%x, g:0x%x, b:0x%x' % (r, g, b))
- 输出:
分别是对实际颜色的测量结果
colorSensor init done
r:<R>, g:<G>, b:<B>
getRawData - 获取颜色传感器原始测量结果
- 函数原型:
TCS34725.getRawData()
- 参数说明:
无 - 返回值:
(r, g, b, c)分别代表红色(r)、绿色(g)、蓝色(b)和归一参考值© - 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
r, g, b, c = colorSensor.getRawData()
print('r:0x%x, g:0x%x, b:0x%x, c:0x%x' % (r, g, b, c))
- 输出:
** 分别是颜色传感器实际测量结果**
colorSensor init done
r:<R>, g:<G>, b:<B>, c:<C>
calculateLux - 计算亮度值
- 函数原型:
TCS34725.calculateLux(r, g, b)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
r | int | 是 | 颜色传感器测量结果原始值中的红色分量, 通过getRawData获取 |
g | int | 是 | 颜色传感器测量结果原始值中的绿色分量, 通过getRawData获取 |
b | int | 是 | 颜色传感器测量结果原始值中的绿色分量, 通过getRawData获取 |
- 返回值:
亮度值,单位:流明 - 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
r, g, b, c = colorSensor.getRawData()
lux = colorSensor.calculateLux(r, g, b)
print('luminosity:', lux)
- 输出:
{L}代表计算后的亮度值
colorSensor init done
luminosity:{L}
calculateCT - 计算色温
- 函数原型:
TCS34725.calculateCT(r, g, b)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
r | int | 是 | 颜色传感器测量结果原始值中的红色分量, 通过getRawData获取 |
g | int | 是 | 颜色传感器测量结果原始值中的绿色分量, 通过getRawData获取 |
b | int | 是 | 颜色传感器测量结果原始值中的绿色分量, 通过getRawData获取 |
- 返回值:
色温值 - 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
r, g, b, c = colorSensor.getRawData()
colorTemperature = colorSensor.calculateCT(r, g, b)
print('color temperature:', colorTemperature)
- 输出:
{CT}代表转换后的色温值
colorSensor init done
color temperature:{CT}
四、接口案例
- 示例代码:
from machine import I2C,Pin # 导入machine驱动库
import tcs34725
import utime
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
colorSensor = tcs34725.TCS34725(i2cObj)
print('colorSensor init done')
while True:
r, g, b = colorSensor.getRGB() # 读取RGB测量结果
print('r:0x%x, g:0x%x, b:0x%x' % (r, g, b))
r, g, b, c = colorSensor.getRawData() # 读取颜色传感器测量的原始数据
lux = colorSensor.calculateLux(r, g, b) # 将原始数据转化成亮度值
print('luminosity:', lux)
CT = colorSensor.calculateCT(r, g, b) # 将原始数据转化成色温值
print('color temperature:', CT)
utime.sleep_ms(200)
- 输出:
其中:
- {CT}代表转换后的色温值
- {L}代表计算后的亮度值
colorSensor init done
luminosity:{L}
color temperature:{CT}
五、工作原理
TCS34725传感器属于光电传感器,光线进入该传感器后会由光电二极管阵列将入射光转换为R、G、B的光电流,再经过放大转换成模拟电压,模拟电压经过模数转换元件转换成代表电压的数字信号,再对该数字信号进行处理来得到R、G、B测量值。该传感器功能外观图如下图所示:
TCS34725传感器的工作过程也是典型的颜色传感器,主要经过光到光电流 -> 电流放大并转化成模拟电压 -> 模拟电压信号转换成数字电压信号几个步骤:
- 光到光电流的转换动作是由搭配色彩滤波器的光电二极管阵列完成;
- 电流放大并转换成电压则有一个阻抗放大器来完成;
- 模拟电压信号转换为数字信号则是由模拟数字转换器来完成。
颜色信息转化为数字信息之后,便会存储在芯片内部的寄存器中,主控芯片可以通过传感器对外的接口(TCS34725是通过I2C接口)对颜色信息进行读取。
参考文献及购买链接
[1] TCS34725数据手册 [2] 颜色传感器工作原理 [3] [TCS34725颜色传感器购买链接