资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块 TAOS TCS3200RGB 感应芯片和4个白光LED灯,TCS3200能在一定的范围内检测和测量几乎所有的 可见光。它适合于色度计测量应用领域。比如彩色打印、医疗诊断、计算机彩色监 视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制。通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种 频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄丫、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三 原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够 知道所测试物体的颜色。对于 TCS3200D来说,当选定一个颜色滤波器时,它只 允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入 射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强; 同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个光强 值,就可以分析出反射到TCS3200D传感器上的光的颜色。TCS3200D传感器有红绿蓝和清除4种滤光器,可以通过其引脚 S2和S3的高低 电平来选择滤波器模式,如下图。S2S3PHOTODIODE TYPELLRedLHBlueHLClear (no filter)HHGreenTCS3200D有可编程的彩色光到电信号频率的转换器,当被测物体反射光的 红、绿、蓝三色光线分别透过相应滤波器到达 TAOS TCS3200RGB感应芯片时, 其内置的振荡器会输出方波,方波频率与所感应的光强成比例关系,光线越强,内 置的振荡器方波频率越高。TCS3200传感器有一个OUT引脚,它输出信号的频率 与内置振荡器的频率也成比例关系,它们的比率因子可以靠其引脚S0和S1的高低电平来选择,如下图。SOS1OUTPUT FREQUENCY SCALI MG (fLLPower downLH2%HL20%HH100%这个测试实验,我把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传感器和其连线图。cbot划 rxcrrAL峥 dFrahol 编辑颜色”- -规定自定义颜色”- 右下角输入RGB值,查看对应的颜色与实际测试的颜色是 否相符。实际测试结果是测得的物体颜色与实际颜色有些偏色,但并不影响区分出 被测物体是哪种颜色的物体。介绍完TCS3200传感器颜色识别原理和其与Arduino控制器的硬件连线,以及 如何利用串口监视器找到白平衡后的比例因子和被测物体的RGB值。下面展示的是Arduino测试程序。注意:下面的#inelude TimerOne.h 要改为单括号形式。Ardu ino 程序:#i nclude TimerO ne.h /申明库文件/把TCS3200颜色传感器各控制引脚连到Arduino 数字端口#defi ne S0 6 /物体表面的反射光越强,TCS3002D 内置振荡器产生的方波频率越高,#define S1 5 S0和S1的组合决定输出信号频率比例因子,比例因子为2%/ 比率因子为TCS3200传感器OUT引脚输出信号频率与其内置振荡器频率之比#define S2 4 S2和S3的组合决定让红、绿、蓝,哪种光线通过滤波器#defi ne S3 3#define OUT 2 /TCS3200颜色传感器输出信号连接到Arduino 中断0引脚,并引发脉冲信号中断/在中断函数中记录 TCS3200 输出信号的脉冲个数#define LED 7 / 控制TCS3200 颜色传感器是否点亮 LED灯float g_SF3; / 从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子int g_cou nt = 0; /计算与反射光强相对应TCS3200 颜色传感器输出信号的脉冲数/数组用于存储在1s内TCS3200输出信号的脉冲数,它乘以 RGB比例因子就是 RGB标 准值int g_array3;滤波器模式选择顺序标志int g_flag = 0; / /初始化TSC3200各控制引脚的输入输出模式/设置TCS3002D 的内置振荡器方波频率与其输出信号频率的比例因子为2%void TSC_I nit()pi nM ode(S0, OUTPUT);pi nM ode(S1, OUTPUT);pinM ode(S2, OUTPUT);pi nM ode(S3, OUTPUT);pi nM ode(OUT, INPUT);pi nM ode(LED, OUTPUT);digitalWrite(S0, LOW);digitalWrite(S1, HIGH); /选择滤波器模式,决定让红、绿、蓝,哪种光线通过滤波器void TSC_FilterColor(i nt Level01, i nt Level02)if(LevelO1 != 0)LevelOl = HIGH;if(LevelO2 != 0)Level02 = HIGH;digitalWrite(S2, LevelOl);digitalWrite(S3, Level02); /中断函数,计算 TCS3200输出信号的脉冲数void TSC_Co un t()g_co unt + ;/定时器中断函数,每1s中断后,把该时间内的红、绿、蓝三种光线通过滤波器时,/TCS3200输出信号脉冲个数分别存储到数组g_array3的相应元素变量中void TSC_Callback()switch(g_flag)Serial.pri ntl n( -WB Start);TSC_WB(LOW, LOW); /break;选择让红色光线通过滤波器的模式case 1:Serial.pri nt(_Freque ncy R=);Serial.pri ntl n( g_co un t); / 个数打印1s内的红光通过滤波器时,TCS3200g_array0 = g_co unt; /个数存储1s内的红光通过滤波器时,TCS3200TSC_WB(HIGH, HIGH); / break;case 2:Serial.pri nt(_Freque ncy G=);选择让绿色光线通过滤波器的模式Serial.pri ntl n( g_co un t); / 个数打印1s内的绿光通过滤波器时,TCS3200case 0:输出的脉冲输出的脉冲输出的脉冲g_array1 = g_co unt; /个数存储1s内的绿光通过滤波器时,TCS3200输出的脉冲TSC_WB(LOW, HIGH); /选择让蓝色光线通过滤波器的模式break;case 3:Serial.pri nt(-Freque ncy B=);Serial.pri ntl n( g_co un t); / 个数打印1s内的蓝光通过滤波器时,TCS3200输出的脉冲Serial.pri ntln (-WB En d); g_array2 = g_co unt; / 个数存储1s内的蓝光通过滤波器时,TCS3200输出的脉冲TSC_WB(HIGH, LOW); /选择无滤波器的模式break;default:g_co unt = 0;/计数值清零break;/设置反射光中红、绿、蓝三色光分别通过滤波器时如何处理数据的标志 该函数被 TSC_Callback()调用void TSC_WB(i nt Level0, i nt Level1)g_cou nt = 0; /计数值清零g_flag +; /输出信号计数标志TSC_FilterColor(Level0, Level1); / Timer1.setPeriod(1000000); /滤波器模式设置输出信号脉冲计数时长1s/初始化void setup()TSC_I nit();Serial.begi n(9600); /启动串行通信Timer1.i nitialize(); / defaulte is 1sTimer1.attachl nterrupt(T
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号