TCS34725是一款低成本颜色识别传感器模块,它具有功耗小、体积小、安装方便的特点,可提供红色、绿色、蓝色及光感应值的数字输出。
该模块的工作原理是:通过传感器两侧的LED来照亮检测物体 ,当光线照射到检测物体后,通过反射被传感器所接收。在传感器内部,光线经过滤镜检测RGB的比例值,根据RGB的比例值即可识别出颜色。

图1 色彩传感器模块
该感器模块是以I2C接口来传递数据,为此在检测过程中需要有微控器的参与才能完成检测任务。
对于I2C接口来说,它需要2条信号线来工作,即一条数据线和一条时钟线。
I2C总线在传送数据过程中,共有3种类型信号,即:开始信号、结束信号和应信号。
1)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
2)结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结传送数据。
3)应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据12C写时序。

图2 信号类型
4)I2C写时序:
首先主机会发送一个开始信号,然后将其I2C的7位地址与写操作位组合成8位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信号,此次I2C写数据操作结束。

图3 写时序
5)I2C 读时序:
首先主机会发送一个开始信号,然后将其I2C的7位地址与写操作位组合成8位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机重新发送一个开始信号,并目将其7位地址和读操作位组合成8位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束。

图4 读时序
I2C 地址:I2C 设备地址为0X29注意:0X29这个设备地址是7位的,8位设备地址需要向高位移一位变成0X52。
为减轻设计的难度和原理,可选取Arduino IDE作为开发工具,因为它有丰富的函数库支持。
接下来的问题就是选取匹配的开发板,因为尽管有函数库的支持,但却并非对如何开发板都有效,为此这里选取的是Arduino UNO开发板。

图5 UNO开发板
色彩传感器与开发板的连接关系,见图6所示。

图6 连接关系
有了以上的准备工作,接下来就是下载相应的函数库作为支持,见图7所示。


图7 相关内容
解压后,需将其放置到安装Arduino目录下的libraries文件夹中。
实现色彩检测的程序为:
#include <Wire.h>
#include "Adafruit_TCS34725.h"
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);
void printColor() {
// 传感器返回 R、G、B 值和 clear 值
uint16_t clearcol, red, green, blue;
float average, r, g, b;
delay(100); // 颜色测量需要100ms
tcs.getRawData(&red, &green, &blue, &clearcol);
// 求RGB的平均值
average = (red + green + blue) / 3;
// 平均颜色值
// 所有值现在都在 1 左右
r = red / average;
g = green / average;
b = blue / average;
// 尝试使用 r、g、b 值确定颜色。
String rgbValue = "r " + String(r) + " g " + String(g) + " b " + String(b);
Serial.print("rgbValue:\t");
Serial.println(rgbValue);
Serial.print("Value:\t");
Serial.println(average);
Serial.print("R:\t");
Serial.println(int(r*100));
Serial.print("G:\t");
Serial.println(int(g*100));
Serial.print("B:\t");
Serial.println(int(b*100));
delay(10);
}
void setup(void) {
Serial.begin(9600);
if (tcs.begin()) {
Serial.println("Found sensor");
}
else
{
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
}
void loop(void) {
printColor();
}在完成器件连接的情况下,经程序上传其测试结果见图8至图15所示。


图8 检测白纸色彩


图9 检测红色卡纸


图10 检测绿色卡纸


图11 检测蓝色卡纸


图12 检测橙色卡纸


图13 检测浅褐色卡纸


图14 检测浅蓝色卡纸


图15 检测浅绿色卡纸
通过对数据的观察和分析,采集结果还是符合色彩变化的,只是红色的基准比较低一些。
我要赚赏金
