TCS颜色传感器使用说明Word文档格式.docx

上传人:b****1 文档编号:5600677 上传时间:2023-05-05 格式:DOCX 页数:13 大小:227.26KB
下载 相关 举报
TCS颜色传感器使用说明Word文档格式.docx_第1页
第1页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第2页
第2页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第3页
第3页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第4页
第4页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第5页
第5页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第6页
第6页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第7页
第7页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第8页
第8页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第9页
第9页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第10页
第10页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第11页
第11页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第12页
第12页 / 共13页
TCS颜色传感器使用说明Word文档格式.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TCS颜色传感器使用说明Word文档格式.docx

《TCS颜色传感器使用说明Word文档格式.docx》由会员分享,可在线阅读,更多相关《TCS颜色传感器使用说明Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。

TCS颜色传感器使用说明Word文档格式.docx

这还需进行白平衡校正来得到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 

#defineS1 

#defineS2 

#defineS3 

3

#defineOUT 

#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数字端口

//物体表面的反射光越强,TCS3002D内置振荡器产生的方波频率越高,

//S0和S1的组合决定输出信号频率比例因子,比例因子为2%

//比率因子为TCS3200传感器OUT引脚输出信号频率与其内置振荡器频率之比

//S2和S3的组合决定让红、绿、蓝,哪种光线通过滤波器

//TCS3200颜色传感器输出信号连接到Arduino中断0引脚,并引发脉冲信号中断

//在中断函数中记录TCS3200输出信号的脉冲个数

//控制TCS3200颜色传感器是否点亮LED灯

floatg_SF[3];

//从TCS3200输出信号的脉冲数转换为RGB标准值的RGB比例因子

int 

g_count=0;

//计算与反射光强相对应TCS3200颜色传感器输出信号的脉冲数

//数组用于存储在1s内TCS3200输出信号的脉冲数,它乘以RGB比例因子就是RGB标准值

g_array[3];

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!

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);

//选择让绿色光线通过滤波器的模式

case2:

FrequencyG="

//打印1s内的绿光通过滤波器时,TCS3200输出的脉冲个数

g_array[1]=g_count;

//存储1s内的绿光通过滤波器时,TCS3200输出的脉冲个数

TSC_WB(LOW,HIGH);

//选择让蓝色光线通过滤波器的模式

case3:

FrequencyB="

//打印1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数

Serial.println("

WBEnd"

g_array[2]=g_count;

//存储1s内的蓝光通过滤波器时,TCS3200输出的脉冲个数

TSC_WB(HIGH,LOW);

//选择无滤波器的模式 

default:

//计数值清零

break;

}

//设置反射光中红、绿、蓝三色光分别通过滤波器时如何处理数据的标志

//该函数被TSC_Callback()调用

voidTSC_WB(intLevel0,intLevel1) 

g_flag++;

//输出信号计数标志

TSC_FilterColor(Level0,Level1);

//滤波器模式

Timer1.setPeriod(1000000);

//设置输出信号脉冲计数时长1s

//初始化

voidsetup()

TSC_Init();

Serial.begin(9600);

//启动串行通信

Timer1.initialize();

//defaulteis1s

Timer1.attachInterrupt(TSC_Callback);

//设置定时器1的中断,中断调用函数为TSC_Callback()

//设置TCS3200输出信号的上跳沿触发中断,中断调用函数为TSC_Count()

attachInterrupt(0,TSC_Count,RISING);

digitalWrite(LED,HIGH);

//点亮LED灯

delay(4000);

//延时4s,以等待被测物体红、绿、蓝三色在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()

//每获得一次被测物体RGB颜色值需时4s

//打印出被测物体RGB颜色值

Serial.println(int(g_array[i]*g_SF[i]));

程序中的头文件TimerOne.h文件请下载:

上面是带有白平衡的测试程序,对于具体项目的应用程序,要在此基础上加以变动。

如果TCS3200传感器与被测物体的检测距离以及周围环境光线没有发生大的变化,进行一次白平衡校正后,RGB比例因子就可以确定下来了。

于是您一定要把得到的RGB比例因子直接替代掉红色字体标识程序段中的数组g_array[3]各元素变量。

另外绿色字体标识的程序段也可以注释掉。

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

于是,应该以上述程序获得的被测物体颜色R、G、B值为中心,设置一个距离中心值±

20的范围值,在任何环境光条件下,再次检测被测物体的RGB值,只要RGB值落在范围内,就可以认为被测物体是那种特定颜色的物体。

这样设定颜色值范围的方法,可以有效提高物体颜色的识别率。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2