TCS3200颜色传感器说明颜色检测色谱检测.docx
- 文档编号:24949467
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:26
- 大小:276.25KB
TCS3200颜色传感器说明颜色检测色谱检测.docx
《TCS3200颜色传感器说明颜色检测色谱检测.docx》由会员分享,可在线阅读,更多相关《TCS3200颜色传感器说明颜色检测色谱检测.docx(26页珍藏版)》请在冰豆网上搜索。
TCS3200颜色传感器说明颜色检测色谱检测
TCS3200颜色传感器测试实验
TCS3200颜色传感器是一款全彩的颜色检测器,包含了一块TAOSTCS3200RGB感觉芯片和4个白光LED灯,TCS3200能在必定的范围内检测和丈量几乎全部的可见光。
它合适于色度计丈量应用领域。
比方彩色打印、医疗诊疗、计算机彩色监督器校准以及油漆、纺织品、化妆品和印刷资料的过程控制。
往常所看到的物体颜色,其实是物体表面汲取了照耀到它上边的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反响。
白色是由各
种频次的可见光混淆在一同构成的,也就是说白光中包含着各样颜色的色光(如
红R、黄Y、绿G、青V、蓝B、紫P)。
依据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各样颜色是由不一样比率的三原色(红、绿、蓝)混淆而成的。
由上边的三原色感觉原理可知,假如知道构成各样颜色的三原色的值,便可以知道所测试物体的颜色。
关于TCS3200D来说,入选定一个颜色滤波器时,它只同意某种特定的原色经过,阻挡其余原色的经过。
比如:
入选择红色滤波器时,入射光中只有红色能够经过,蓝色和绿色都被阻挡,这样便可以获取红色光的光强;同理,选择其余的滤波器,便可以获取蓝色光和绿色光的光强。
经过这三个光强值,便可以剖析出反射到TCS3200D传感器上的光的颜色。
TCS3200D传感器有红绿蓝和消除4种滤光器,能够经过其引脚S2和S3的高低电平来选择滤波器模式,以下列图。
TCS3200D有可编程的彩色光到电信号频次的变换器,当被测物体反射光的红、绿、蓝三色光芒分别透过相应滤波器抵达TAOSTCS3200RGB感觉芯片刻,其内置的振荡器会输出方波,方波频次与所感觉的光强成比率关系,光芒越强,
内置的振荡器方波频次越高。
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控制器数字端口连线的对应关系,我设置为:
#defineS0
6
#defineS1
5
#defineS2
4
#defineS3
3
#defineOUT
2
#defineLED
7
当被测物体为不发光物体时,应当把
TCS3200的LED引脚设置为高电平,
以点亮TCS3200传感器电路板上的四个白光LED灯。
下文展现了一个带有白均衡的测试程序,把这个程序下载到
Arduino控制器
中,同时把一个白色物体搁置在
TCS3200颜色传感器之下,点亮传感器上的4
个白光LED灯,再翻开ArduinoIDE的串口监督器,会出现下列图监督画面,能够在该画面中找到白色物体RGB值255以及RGB比率因子。
(可经过QQ截图来锁定画面,以便察看。
)(双击图片,能够放大看!
)
把白均衡时搁置在TCS3200颜色传感器之下白色物体拿走,放上另一个黄
色物体,在ArduinoIDE串口监督器看到的这个黄色物体RGB值为233、157、56,以下列图所示。
翻开电脑Windows操作系统自带的绘图板,点击菜单栏“颜色”--->“编写颜色”--->“规定自定义颜色”-->右下角输入RGB值,查察对应的颜色与实质测试的颜色能否符合。
实质测试结果是测得的物体颜色与实质颜色有些偏色,但其实不影响划分出被测物体是哪一种颜色的物体。
介绍完TCS3200传感器颜色辨别原理和其与
Arduino控制器的硬件连线,以
及怎样利用串口监督器找到白均衡后的比率因子和被测物体的
RGB值。
下边展
示的是Arduino测试程序。
注意:
下边的#include
《TimerOne.h>
要改为单括号
形式。
Arduino
程序:
#include
《TimerOne.h>//
声明库文件
//
把TCS3200
颜色传感器各控制引脚连到
Arduino数字端口
#defineS0
6
//
物体表面的反射光越强,TCS3002D
内置振荡器产生的方波频次越
高,
#defineS1
5
//S0和S1的组合决定输出信号频次比率因子,比率因子为
2%
//比率因子为TCS3200传感器OUT引脚输出信号频次与其内置振荡器频次之
比
#defineS2
4
//S2和S3
的组合决定让红、绿、蓝,哪一种光芒经过滤波器
#defineS3
3
#defineOUT
2
//TCS3200
颜色传感器输出信号连结到
Arduino
中止0引脚,并引
发脉冲信号中止
//
在中止函数中记录
TCS3200
输出信号的脉冲个数
#defineLED
7
//
控制TCS3200颜色传感器能否点亮
LED灯
floatg_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%
voidTSC_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);
}
//选择滤波器模式,决定让红、绿、蓝,哪一种光芒经过滤波器
voidTSC_FilterColor(intLevel01,intLevel02)
{
if(Level01!
=0)
Level01=HIGH;
if(Level02!
=0)
Level02=HIGH;
digitalWrite(S2,Level01);
digitalWrite(S3,Level02);
}
//中止函数,计算TCS3200输出信号的脉冲数
voidTSC_Count()
{
g_count++;
}
//准时器中止函数,每1s中止后,把该时间内的红、绿、蓝三种光芒经过滤波器时,
//TCS3200输出信号脉冲个数分别储存到数组g_array[3]的相应元素变量中
voidTSC_Callback()
{
switch(g_flag)
{
case0:
Serial.println("->WBStart");
TSC_WB(LOW,LOW);
//
选择让红色光芒经过滤波器的模式
break;
case1:
Serial.print("->FrequencyR=");
Serial.println(g_count);
//
打印1s
内的红光经过滤波器时,
TCS3200
输出的
脉冲个数
g_array[0]=g_count;
//
储存1s
内的红光经过滤波器时,
TCS3200
输出的
脉冲个数
TSC_WB(HIGH,HIGH);
//
选择让绿色光芒经过滤波器的模式
break;
case2:
Serial.print("->FrequencyG=");
Serial.println(g_count);
//
打印1s
内的绿光经过滤波器时,
TCS3200
输出的
脉冲个数
g_array[1]=g_count;
//
储存1s
内的绿光经过滤波器时,
TCS3200
输出的
脉冲个数
TSC_WB(LOW,HIGH);
//
选择让蓝色光芒经过滤波器的模式
break;
case3:
Serial.print("->FrequencyB=");
Serial.println(g_count);
//
打印1s
内的蓝光经过滤波器时,
TCS3200
输出的
脉冲个数
Serial.println("->WBEnd");
g_array[2]=g_count;
//
储存1s
内的蓝光经过滤波器时,
TCS3200
输出的
脉冲个数
TSC_WB(HIGH,LOW);
//
选择无滤波器的模式
break;
default:
g_count=0;//计数值清零
break;
}
}
//设置反射光中红、绿、蓝三色光分别经过滤波器时怎样办理数据的标记
//该函数被TSC_Callback()调用
voidTSC_WB(intLevel0,intLevel1)
{
g_count=0;//计数值清零
g_flag++;//输出信号计数标记
TSC_FilterColor(Level0,Level1);//
滤波器模式
Timer1.setPeriod(1000000);
//设置输出信号脉冲计数时长
1s
}
//初始化
voidsetup()
{
TSC_Init();
Serial.begin(9600);//启动串行通讯
Timer1.initialize();//defaulteis1s
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(inti=0;i<3;i++)
Serial.println(int(g_array[i]*g_SF[i]));
}
//主程序
voidloop()
{
g_flag=0;
//每获取一次被测物体RGB颜色值需时4s
delay(4000);
//打印出被测物体RGB颜色值
for(inti=0;i<3;i++)
Serial.println(int(g_array[i]*g_SF[i]));
}
程序中的头文件TimerOne.h文件请下载:
上边是带有白均衡的测试程序,关于详细项目的应用程序,要在此基础上加以改动。
假如TCS3200传感器与被测物体的检测距离以及四周环境光芒没有发生大的变化,进行一次白均衡校订后,RGB比率因子便可以确立下来了。
于是您必定要把获取的RGB比率因子直接代替掉红色字体表记程序段中的数组g_array[3]各元素变量。
此外绿色字体表记的程序段也能够说明掉。
在详细项目中,您所检测的是某种特定颜色的物体,可能就像文章的第一张
图片展现的5个色块近似,绝不会有连续变化颜色的物体。
于是,应当以上述程序获取的被测物体颜色R、G、B值为中心,设置一个距离中心值±20的范围值,在任何环境光条件下,再次检测被测物体的RGB值,只需RGB值落在范围内,便可以以为被测物体是那种特定颜色的物体。
这样设定颜色值范围的方法,能够有效提升物体颜色的辨别率。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCS3200 颜色 传感器 说明 检测 色谱