TCS3200颜色传感器说明颜色检测色谱检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCS3200 颜色传感器测试实验
TCS3200 颜色传感器是一款全彩的颜色检测器,包含了一块 TAOS
TCS3200RGB 感觉芯片和 4 个白光 LED 灯, TCS3200 能在必定的范围内检测和丈量几乎全部的可见光。

它合适于色度计丈量应用领域。

比方彩色打印、医疗诊疗、计算机彩色监督器校准以及油漆、纺织品、化妆品和印刷资料的过程控制。

往常所看到的物体颜色,其实是物体表面汲取了照耀到它上边的白光 (日光 ) 中的一部分有色成分,而反射出的另一部分有色光在人眼中的反响。

白色是由各
种频次的可见光混淆在一同构成的,也就是说白光中包含着各样颜色的色光(如红 R、黄 Y、绿 G、青 V、蓝 B、紫 P)。

依据德国物理学家赫姆霍兹 (Helinholtz) 的三原色理论可知,各样颜色是由不一样比率的三原色 (红、绿、蓝 )混淆而成的。

由上边的三原色感觉原理可知,假如知道构成各样颜色的三原色的值,便可以知道所测试物体的颜色。

关于 TCS3200D 来说,入选定一个颜色滤波器时,它只同意某种特定的原色经过,阻挡其余原色的经过。

比如:入选择红色滤波器时,入射光中只有红色能够经过,蓝色和绿色都被阻挡,这样便可以获取红色光的光强;同理,选择其余的滤波器,便可以获取蓝色光和绿色光的光强。

经过这三个光强值,便可以剖析出反射到 TCS3200D 传感器上的光的颜色。

TCS3200D 传感器有红绿蓝和消除 4 种滤光器,能够经过其引脚 S2 和 S3 的高低电平来选择滤波器模式,以下列图。

TCS3200D 有可编程的彩色光到电信号频次的变换器,当被测物体反射光的红、绿、蓝三色光芒分别透过相应滤波器抵达 TAOS TCS3200RGB感觉芯片刻,其内置的振荡器会输出方波,方波频次与所感觉的光强成比率关系,光芒越强,
内置的振荡器方波频次越高。

TCS3200 传感器有一个 OUT 引脚,它输出信号的频次与内置振荡器的频次也成比率关系,它们的比率因子能够靠其引脚 S0 和 S1 的高低电平来选择,以下列图。

这个测试实验,我把TCS3200 传感器OUT 引脚输出信号频次与其内置振荡器频次比率因子设为2% ,有了输出频次比率因子,可是怎样经过OUT 引脚输出信号频次来换算出被测物体由三原色光强构成的RGB 颜色值呢?这还需进行白均衡校订来获取 RGB 比率因子才行!
白均衡校订方法是:把一个白色物体搁置在 TCS3200 颜色传感器之下,二者
相距 10mm 左右,点亮传感器上的 4 个白光 LED 灯,用 Arduino 控制器的准时器设置一固准时间 1s,而后选通三原色的滤波器,让被测物体反射光中红、绿、蓝三色光分别经过滤波器,计算 1s 时间内三色光对应的 TCS3200 传感器 OUT 输出信号脉冲数(单位时间的脉冲数包含了输出信号的频次信息),再通
过正比算式获取白色物体 RGB 值 255 与三色光脉冲数的比率因子。

有了白均衡校订获取的 RGB 比率因子,则其余颜色物体反射光中红、绿、蓝三色光对应的
TCS3200 输出信号 1s 内脉冲数乘以 R、G、B 比率因子,便可换算出了被测物体的 RGB 标准值了。

此刻说说,怎样进行 TCS3200 各控制引脚与 Arduino 控制器的硬件连线问
题,下列图分别是 TCS3200 传感器和其连线图。

上图中 TCS3200 传感器各控制引脚与 Arduino 控制器数字端口连线的对应关系,我设置为:
#define S0 6
#define S1 5
#define S2 4
#define S3 3
#define OUT 2
#define LED 7
当被测物体为不发光物体时,应当把TCS3200 的 LED 引脚设置为高电平,以点亮 TCS3200 传感器电路板上的四个白光 LED 灯。

下文展现了一个带有白均衡的测试程序,把这个程序下载到Arduino 控制器中,同时把一个白色物体搁置在TCS3200 颜色传感器之下,点亮传感器上的 4 个白光 LED 灯,再翻开 Arduino IDE 的串口监督器,会出现下列图监督画面,能够在该画面中找到白色物体 RGB 值 255 以及 RGB 比率因子。

(可经过 QQ 截图来锁定画面,以便察看。

)(双击图片,能够放大看!)
把白均衡时搁置在TCS3200 颜色传感器之下白色物体拿走,放上另一个黄
色物体,在 Arduino IDE 串口监督器看到的这个黄色物体 RGB值为 233 、 157 、56,以下列图所示。

翻开电脑 Windows 操作系统自带的绘图板,点击菜单栏“颜色”--- >“编写颜色”--- >“规定自定义颜色”--> 右下角输入 RGB值,查察对应的颜色与实质测试的颜色能否符合。

实质测试结果是测得的物体颜色与实质颜色有些偏色,但其实不影响划分出被测物体是哪一种颜色的物体。

介绍完 TCS3200 传感器颜色辨别原理和其与Arduino 控制器的硬件连线,以及怎样利用串口监督器找到白均衡后的比率因子和被测物体的RGB 值。

下边展示的是 Arduino 测试程序。

注意:下边的#include 《 TimerOne.h> 要改为单括号形式。

Arduino 程序:
#include 《TimerOne.h> // 声明库文件
// 把 TCS3200 颜色传感器各控制引脚连到Arduino 数字端口
#define S0 6 // 物体表面的反射光越强, TCS3002D 内置振荡器产生的方波频次越高,
#define S1 5 //S0 和 S1 的组合决定输出信号频次比率因子,比率因子为2%
// 比率因子为 TCS3200 传感器 OUT 引脚输出信号频次与其内置振荡器频次之

#define S2 4 //S2 和 S3 的组合决定让红、绿、蓝,哪一种光芒经过滤波器
#define S3 3
#define OUT 2 //TCS3200 颜色传感器输出信号连结到Arduino 中止 0 引脚,并引发脉冲信号中止
// 在中止函数中记录TCS3200 输出信号的脉冲个数
#define LED 7 // 控制 TCS3200 颜色传感器能否点亮LED 灯
float g_SF[3]; // 从 TCS3200 输出信号的脉冲数变换为RGB 标准值的 RGB 比率因子
int g_count = 0; // 计算与反射光强相对应 TCS3200 颜色传感器输出信号的脉冲数
// 数组用于储存在1s 内 TCS3200 输出信号的脉冲数,它乘以RGB 比率因子就是 RGB 标准值
int g_array[3];
int g_flag = 0; // 滤波器模式选择次序标记
//初始化 TSC3200 各控制引脚的输入输出模式
//设置TCS3002D的内置振荡器方波频次与其输出信号频次的比率因子为2% void TSC_Init()
{
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(OUT, INPUT);
pinMode(LED, OUTPUT);
digitalWrite(S0, LOW);
digitalWrite(S1, HIGH);
}
//选择滤波器模式,决定让红、绿、蓝,哪一种光芒经过滤波器
void TSC_FilterColor(int Level01, int Level02)
{
if(Level01 != 0)
Level01 = HIGH;
if(Level02 != 0)
Level02 = HIGH;
digitalWrite(S2, Level01);
digitalWrite(S3, Level02);
}
//中止函数,计算 TCS3200 输出信号的脉冲数
void TSC_Count()
{
g_count ++ ;
}
//准时器中止函数,每 1s 中止后,把该时间内的红、绿、蓝三种光芒经过滤波器时,//TCS3200输出信号脉冲个数分别储存到数组g_array[3]的相应元素变量中void TSC_Callback()
{
switch(g_flag)
{
case 0:
Serial.println("->WB Start");
TSC_WB(LOW, LOW); // 选择让红色光芒经过滤波器的模式
break;
case 1:
Serial.print("->Frequency R=");
Serial.println(g_count); // 打印 1s 内的红光经过滤波器时,TCS3200 输出的脉冲个数
g_array[0] = g_count; // 储存 1s 内的红光经过滤波器时,TCS3200 输出的脉冲个数
TSC_WB(HIGH, HIGH); // 选择让绿色光芒经过滤波器的模式
break;
case 2:
Serial.print("->Frequency G=");
Serial.println(g_count); // 打印 1s 内的绿光经过滤波器时,TCS3200 输出的脉冲个数
g_array[1] = g_count; // 储存 1s 内的绿光经过滤波器时,TCS3200 输出的脉冲个数
TSC_WB(LOW, HIGH); // 选择让蓝色光芒经过滤波器的模式
break;
case 3:
Serial.print("->Frequency B=");
Serial.println(g_count); // 打印 1s 内的蓝光经过滤波器时,TCS3200 输出的脉冲个数
Serial.println("->WB End");
g_array[2] = g_count; // 储存 1s 内的蓝光经过滤波器时,TCS3200 输出的脉冲个数
TSC_WB(HIGH, LOW); // 选择无滤波器的模式
break;
default:
g_count = 0;// 计数值清零
break;
}
}
//设置反射光中红、绿、蓝三色光分别经过滤波器时怎样办理数据的标记
//该函数被 TSC_Callback( ) 调用
void TSC_WB(int Level0, int Level1)
{
g_count = 0;// 计数值清零
g_flag ++;//输出信号计数标记
TSC_FilterColor(Level0, Level1); // 滤波器模式
Timer1.setPeriod(1000000); // 设置输出信号脉冲计数时长1s }
//初始化
void setup()
{
TSC_Init();
Serial.begin(9600); //启动串行通讯
Timer1.initialize();// defaulte is 1s
Timer1.attachInterrupt(TSC_Callback); //设置准时器TSC_Callback()
//设置TCS3200输出信号的上跳沿触发中止,中止调用函数为attachInterrupt(0, TSC_Count, RISING);
digitalWrite(LED, HIGH);//点亮LED灯
delay(4000); //延时4s,以等候被测物体红、绿、蓝三色在1 的中止,中止调用函数为
TSC_Count()
1s 内的 TCS3200输出信
号脉冲计数
//经过白均衡测试,计算获取白色物体RGB 值 255 与 1s 内三色光脉冲数的 RGB 比率因子
g_SF[0] = 255.0/ g_array[0]; g_SF[1] = 255.0/ g_array[1] ; g_SF[2] = 255.0/ g_array[2] ; // 红色光比率因子//绿色光比率因子//蓝色光比率因子
//打印白均衡后的红、绿、蓝三色的RGB 比率因子
Serial.println(g_SF[0],5);
Serial.println(g_SF[1],5);
Serial.println(g_SF[2],5);
//红、绿、蓝三色光分别对应的1s 内 TCS3200 输出脉冲数乘以相应的比率因子就是RGB 标准值
//打印被测物体的 RGB 值
for(int i=0; i<3; i++)
Serial.println(int(g_array[i] * g_SF[i]));
}
//主程序
void loop()
{
g_flag = 0;
//每获取一次被测物体 RGB 颜色值需时 4s
delay(4000);
//打印出被测物体 RGB 颜色值
for(int i=0; i<3; i++)
Serial.println(int(g_array[i] * g_SF[i]));
}
程序中的头文件TimerOne.h 文件请下载:
/QnKIsvphPb4Mv
上边是带有白均衡的测试程序,关于详细项目的应用程序,要在此基础上加
以改动。

假如 TCS3200 传感器与被测物体的检测距离以及四周环境光芒没有发生大的变
化,进行一次白均衡校订后, RGB 比率因子便可以确立下来了。

于是您必定要把
获取的 RGB 比率因子直接代替掉红色字体表记程序段中的数组 g_array[3] 各元素
变量。

此外绿色字体表记的程序段也能够说明掉。

在详细项目中,您所检测的是某种特定颜色的物体,可能就像文章的第一张
图片展现的5 个色块近似,绝不会有连续变化颜色的物体。

于是,应当以上述程序获取的被测物体颜色R、G、B 值为中心,设置一个距离中心值±20 的范围值,在任何环境光条件下,再次检测被测物体的RGB 值,只需RGB 值落在范围内,便可以以为被测物体是那种特定颜色的物体。

这样设定颜色值范围的方法,能够有效提升物体颜色的辨别率。

相关文档
最新文档