TCS3200颜色传感器__SKU_SEN0101_ - jimaobian/DFRobotWikiCn GitHub Wiki
简 介
Color Sensor是一块静态识别物体颜色,不同颜色输出不同频率,采用TCS3200D,所有IO口均引出。 TCS3200D是TAOS(Texas Advanced Optoelectronic Solutions)公司推出的可编程彩色光到频率的转换器。它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上还集成了红绿蓝(RGB)三种滤光器,是业界第一个有数字兼容接口的RGB彩色传感器。TCS3200D的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其它逻辑电路相连接。由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单。
产品参数
1.输出频率的占空比选择S0~S1。
2.颜色滤镜选择:S2~S3。
3.频率输出端口OUT。
4.频率输出使能引脚OE(低电平有效),模块已经置低,使用时可以悬空。
5.支持LED灯补光控制。
6.工作电压2.7-5.5V。
应 用
- 溶液颜色检测
- 色彩识别仪
引脚说明
TCS3200D的引脚:
引脚名称 | 输入/输出 | 描述 |
GND(4) | 电源接地。所有电压参考GND | |
OE(3) | 输入 | 启用f0(低电平有效) |
OUT | 输出 | 输出频率f0 |
S0,S1(1,2) | 输入 | 输出频率缩放选择输入 |
S2,S3(7,8) | 输入 | 光电二极管类型选择输入 |
VDD(5) | 提供电压 | |
TCS3200D的功能框图:
资料说明
1)TCS3200D识别颜色的原理
TCS3200D光到频率转换器适合于色度计测量应用领域,在开始介绍TCS3200D 的颜色识别前,先来了解一些光与颜色的知识。
a.三原色的感应原理
通常所看到的物体的颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。
b.TCS3200D识别颜色的原理
三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS3200D 来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS3200D 传感器上的光的颜色。
c.白平衡和颜色识别原理
白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于TCS3200D 的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS3200D 的RGB 输出并不相等,因此在测试前必须进行白平衡调整,使得TCS3200D 对所检测的“白色”中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS3200D 上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的三个调整参数。 当用TCS3200D 识别颜色时,就用这三个参数对所测颜色的R 、G 和B 进行调整。这里有两种方法来计算调整参数:①依次选通三种颜色的滤波器,然后对 TCS3200D的输出脉冲依次进行计数。当计数到255 时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS3200D 每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R 、G 和B 的值。②设置定时器为一固定时间(例如10ms ),然后选通三种颜色的滤波器,计算这段时间内 TCS3200D 的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的 R 、G 和B 的值。
使用教程
连线图
接线说明 | |
VCC——5V | GND——GND |
S0——D3 | S1——D4 |
S2——D5 | S3——D6 |
OUT——D2 | |
S0,S1,S2,S3使用说明
TCS3200D有四种滤波类型:红,蓝,绿和清除全部光信息,以最大限度地降低入射光幅射的不均匀性,从而增加精确度和简化光学。当入射光投射到TCS3200D上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器,如下图所示:
S2 | S3 | 滤波器类型 |
L | L | 红色 |
L | H | 蓝色 |
H | L | 无 |
H | H | 绿色 |
TCS3200D输出不同频率的方波(占空比50%),不同的颜色和光强对应不同的频率的方波,输出频率与光强度成线性关系。该转换器典型输出频率范围为2Hz~500kHz,用户可通过两个可编程引脚来选择100%、20%或2%的输出比例因子。如下图所示:
S0 | S1 | 输出频率定标 |
L | L | 关断电源 |
L | H | 2% |
H | L | 20% |
H | H | 100% |
样例代码
样例一
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int flag=0;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(115200);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
flag=0;
digitalWrite(s1,HIGH);
digitalWrite(s0,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
attachInterrupt(0, ISR_INTO, LOW);
timer0_init();
}
void ISR_INTO()
{
counter++;
}
void timer0_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100; //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
countR=counter;
Serial.print("red=");
Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==2)
{
countG=counter;
Serial.print("green=");
Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countB=counter;
Serial.print("blue=");
Serial.println(countB,DEC);
Serial.println("\n");
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
else if(flag==4)
{
flag=0;
}
counter=0;
}
void loop()
{
TCS();
while(1);
}
样例二
int s0=3,s1=4,s2=5,s3=6;
int flag=0;
int counter=0;
int countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(115200);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
digitalWrite(s1,HIGH);
digitalWrite(s0,LOW);
flag=0;
attachInterrupt(0, ISR_INTO, CHANGE);
timer2_init();
}
void ISR_INTO()
{
counter++;
}
void timer2_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100; //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
counter=0;
}
else if(flag==2)
{
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
countR=counter/1.051;
Serial.print("red=");
Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countG=counter/1.0157;
Serial.print("green=");
Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==4)
{
countB=counter/1.114;
Serial.print("blue=");
Serial.println(countB,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
else
{
flag=0;
TIMSK2 = 0x00;
}
counter=0;
delay(2);
}
void loop()
{
delay(10);
TCS();
if((countR>10)||(countG>10)||(countB>10))
{
if((countR>countG)&&(countR>countB))
{
Serial.print("red");
Serial.print("\n");
delay(1000);
}
else if((countG>=countR)&&(countG>countB))
{
Serial.print("green");
Serial.print("\n");
delay(1000);
}
else if((countB>countG)&&(countB>countR))
{
Serial.print("blue");
Serial.print("\n");
delay(1000);
}
}
else
{
delay(1000);
}
}
FAQ
应用中需要注意的问题
a. 颜色识别时要避免外界光线的干扰,否则会影响颜色识别的结果,最好把Color Sensor、光源等放置在一个密闭、无反射的箱子中进行测试。
b.当第一次使用Color Sensor时,或Color Sensor模块重启、更换光源等情况时,都需要进行白平衡调整。
更多
附加资料
各种颜色 RGB值
■RGB(255,192,203) ■★●◆pink(粉红)
■RGB(220,20,60) ■★●◆crimson(腥红)
■RGB(255,240,245) ■★●◆lavenderblush(苍白的紫罗兰红)
■RGB(219,112,147) ■★●◆palevioletred(脸红的淡紫红)
■RGB(255,105,180) ■★●◆hotpink(热情的粉红)
■RGB(199,21,133) ■★●◆mediumvioletred(适中的紫罗兰红)
■RGB(218,112,214) ■★●◆orchid(兰花紫)
■RGB(216,191,216) ■★●◆thistle(苍紫)
■RGB(221,160,221) ■★●◆plum(轻紫)
■RGB(238,130,238) ■★●◆violet(紫罗兰)
■RGB(255,0,255) ■★●◆magenta(洋紫)
■RGB(255,0,255) ■★●◆fuchsia(紫红)
■RGB(139,0,139) ■★●◆darkmagenta(深洋紫)
■RGB(128,0,128) ■★●◆purple(紫)
■RGB(186,85,211) ■★●◆mediumorchid(适中的兰花紫)
■RGB(148,0,211) ■★●◆darkviolet(深紫罗兰)
■RGB(75,0,130) ■★●◆indigo(靓青)
■RGB(138,43,226) ■★●◆blueviolet(蓝紫罗兰)
■RGB(147,112,219) ■★●◆mediumpurple(适中的紫)
■RGB(123,104,238) ■★●◆mediumslateblue(适中的的板岩蓝)
■RGB(106,90,205) ■★●◆slateblue(板岩蓝)
■RGB(72,61,139) ■★●◆darkslateblue(深板岩蓝)
■RGB(230,230,250) ■★●◆lavender(熏衣草花的淡紫)
■RGB(248,248,255) ■★●◆ghostwhite(幽灵白)
■RGB(0,0,255) ■★●◆blue(蓝)
■RGB(0,0,205) ■★●◆mediumblue(适中的蓝)
■RGB(25,25,112) ■★●◆midnightblue(午夜蓝)
■RGB(0,0,139) ■★●◆darkblue(深蓝)
■RGB(0,0,128) ■★●◆navy(海军蓝)
■RGB(65,105,225) ■★●◆royalblue(皇家蓝)
■RGB(100,149,237) ■★●◆cornflowerblue(矢车菊蓝)
■RGB(176,196,222) ■★●◆lightsteelblue(淡钢蓝)
■RGB(119,136,153) ■★●◆lightslategray(浅石板灰)
■RGB(112,128,144) ■★●◆slategray(石板灰)
■RGB(30,144,255) ■★●◆dodgerblue(道奇蓝)
■RGB(240,248,255) ■★●◆aliceblue(爱丽丝蓝)
■RGB(70,130,180) ■★●◆steelblue(钢蓝)
■RGB(135,206,250) ■★●◆lightskyblue(淡天蓝)
■RGB(135,206,235) ■★●◆skyblue(天蓝)
■RGB(0,191,255) ■★●◆deepskyblue(深天蓝)
■RGB(173,216,230) ■★●◆lightblue(淡蓝)
■RGB(176,224,230) ■★●◆powderblue(火药蓝)
■RGB(95,158,160) ■★●◆cadetblue(军校蓝)
■RGB(240,255,255) ■★●◆azure(蔚蓝)
■RGB(224,255,255) ■★●◆lightcyan(淡青)
■RGB(175,238,238) ■★●◆paleturquoise(苍白的宝石绿)
■RGB(0,255,255) ■★●◆cyan(青)
■RGB(0,255,255) ■★●◆aqua(水绿)
■RGB(0,206,209) ■★●◆darkturquoise(深宝石绿)
■RGB(47,79,79) ■★●◆darkslategray(深石板灰)
■RGB(0,139,139) ■★●◆darkcyan(深青色)
■RGB(0,128,128) ■★●◆teal(水鸭色)
■RGB(72,209,204) ■★●◆mediumturquoise(适中的宝石绿)
■RGB(32,178,170) ■★●◆lightseagreen(浅海洋绿)
■RGB(64,224,208) ■★●◆turquoise(宝石绿)
■RGB(127,255,212) ■★●◆aquamarine(碧绿)
■RGB(102,205,170) ■★●◆mediumaquamarine(适中的碧绿)
■RGB(0,250,154) ■★●◆mediumspringgreen(适中的春天绿)
■RGB(245,255,250) ■★●◆mintcream(薄荷奶油)
■RGB(0,255,127) ■★●◆springgreen(春天绿)
■RGB(60,179,113) ■★●◆mediumseagreen(适中的海洋绿)
■RGB(46,139,87) ■★●◆seagreen(海洋绿)
■RGB(240,255,240) ■★●◆honeydew(浅粉红)
■RGB(144,238,144) ■★●◆lightgreen(浅绿)
■RGB(152,251,152) ■★●◆palegreen(苍白绿)
■RGB(143,188,143) ■★●◆darkseagreen(深海洋绿)
■RGB(50,205,50) ■★●◆limegreen(柠檬绿)
■RGB(0,255,0) ■★●◆lime(柠檬)
■RGB(34,139,34) ■★●◆forestgreen(森林绿)
■RGB(127,255,0) ■★●◆chartreuse(查特酒绿)
■RGB(124,252,0) ■★●◆lawngreen(草坪绿)
■RGB(173,255,47) ■★●◆greenyellow(绿黄)
■RGB(85,107,47) ■★●◆darkolivegreen(深橄榄绿)
■RGB(154,205,50) ■★●◆yellowgreen(黄绿)
■RGB(107,142,35) ■★●◆olivedrab(橄榄褐)
■RGB(245,245,220) ■★●◆beige(米色)
■RGB(250,250,210) ■★●◆lightgoldenrodyellow(浅秋黄)
■RGB(255,255,240) ■★●◆ivory(象牙白)
■RGB(255,255,224) ■★●◆lightyellow(浅黄)
■RGB(255,255,0) ■★●◆yellow(黄)
■RGB(128,128,0) ■★●◆olive(橄榄)
■RGB(189,183,107) ■★●◆darkkhaki(深卡其布)
■RGB(255,250,205) ■★●◆lemonchiffon(柠檬沙)
■RGB(238,232,170) ■★●◆palegoldenrod(灰秋)
■RGB(240,230,140) ■★●◆khaki(卡其布)
■RGB(255,215,0) ■★●◆gold(金)
■RGB(255,248,220) ■★●◆cornsilk(玉米)
■RGB(218,165,32) ■★●◆goldenrod(秋)
■RGB(184,134,11) ■★●◆darkgoldenrod(深秋)
■RGB(255,250,240) ■★●◆floralwhite(白花)
■RGB(253,245,230) ■★●◆oldlace(浅米色)
■RGB(245,222,179) ■★●◆wheat(小麦)
■RGB(255,228,181) ■★●◆moccasin(鹿皮)
■RGB(255,165,0) ■★●◆orange(橙)
■RGB(255,239,213) ■★●◆papayawhip(木瓜)
■RGB(255,235,205) ■★●◆blanchedalmond(漂白后的杏仁)
■RGB(255,222,173) ■★●◆navajowhite(耐而节白)
■RGB(250,235,215) ■★●◆antiquewhite(古白)
■RGB(210,180,140) ■★●◆tan(晒)
■RGB(222,184,135) ■★●◆burlywood(树干)
■RGB(255,228,196) ■★●◆bisque(乳脂)
■RGB(255,140,0) ■★●◆darkorange(深橙色)
■RGB(250,240,230) ■★●◆linen(亚麻)
■RGB(205,133,63) ■★●◆peru(秘鲁)
■RGB(244,164,96) ■★●◆sandybrown(沙棕)
■RGB(210,105,30) ■★●◆chocolate(巧克力)
■RGB(192,14,235) ■★●◆chocolatesaddlebrown(马鞍棕)
■RGB(255,245,238) ■★●◆seashell(海贝)
■RGB(160,82,45) ■★●◆sienna(土黄赭)
■RGB(255,160,122) ■★●◆lightsalmon(浅肉)
■RGB(255,127,80) ■★●◆coral(珊瑚)
■RGB(255,69,0) ■★●◆orangered(橙红)
■RGB(255,99,71) ■★●◆tomato(番茄色)
■RGB(255,228,225) ■★●◆mistyrose(雾中玫瑰)
■RGB(250,128,114) ■★●◆salmon(肉)
■RGB(255,250,250) ■★●◆snow(雪)
■RGB(240,128,128) ■★●◆lightcoral(浅珊瑚)
■RGB(188,143,143) ■★●◆rosybrown(玫瑰棕)
■RGB(205,92,92) ■★●◆indianred(浅粉红)
■RGB(255,0,0) ■★●◆red(红)
■RGB(165,42,42) ■★●◆brown(棕)
■RGB(178,34,34) ■★●◆firebrick(火砖)
■RGB(139,0,0) ■★●◆darkred(深红)
■RGB(128,0,0) ■★●◆maroon(粟色)
■RGB(255,255,255) ■★●◆white(白)
■RGB(245,245,245) ■★●◆whitesmoke(烟白)
■RGB(220,220,220) ■★●◆gainsboro(赶死部落)
■RGB(211,211,211) ■★●◆lightgrey(浅灰)
■RGB(192,192,192) ■★●◆silver(银白)
■RGB(169,169,169) ■★●◆darkgray(深灰)
■RGB(105,105,105) ■★●◆dimgray(暗灰)
■RGB(0,0,0) ■★●◆black(黑)