1、 连线与代码(硬件与软件)

1.1 连线图

颜色识别模块TCS230、TCS3200代码(arduino)

1.2 代码

define S0 2
define S1 3
define S2 4
define S3 5
define sensorOut 6
int R;
int G;
int B;

void setup() {
pinMode(S0,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(S2,OUTPUT);
pinMode(S3,OUTPUT);
//输出频率out引脚
pinMode(sensorOut1,INPUT);
//S0和S1设置频率比2%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
}

void loop() {
//检测红色计数
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
R = pulseIn(sensorOut1,LOW);
delay(100);
//检测绿色计数
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
G = pulseIn(sensorOut2,LOW);
delay(100);
//检测蓝色计数
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
B = pulseIn(sensorOut3,LOW);
delay(100);
//输出三原色的技术
Serial.print("Red=“R,” Green=“G,” Blue="B);
}

2、 功能和引脚图

颜色识别模块TCS230、TCS3200代码(arduino)

3、可用组合

颜色识别模块TCS230、TCS3200代码(arduino)

4、原理

4.1 三原色的原理

通常看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光中一部分有色成分,而反射出另一部分有色光,从而被人眼吸收。白色光是由各种频率的可见光混合而成的,根据德国物理学家赫姆霍兹的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。

4.2 颜色识别原理

对于TCS3200来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其他原色。例如:当选择红色滤波器时,入射光只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其他的滤波器,就可以得到蓝色和绿色光的光强、通过这三个值,就可以分析投射到TCS3200传感器上的光的颜色。

4.3 白平衡原理

白平衡设置是为了告诉系统什么是白色。从理论上,白色是由等量的红色、绿色和蓝色组成的。但实际上,白色中的三原色并不完全相等,并且,TCS3200对不同色光的敏感性不同,使得TCS3200对R\G\B输出的值并不相等,因此对白色的“定义”不同,所以在测试钱必须进行白平衡挑战(只针对需要较精准地识别出各种各样不同的颜色,如果只需要区分出几种颜色,可以直接对R\G\B值划分阈值来区分)
白平衡挑战的步骤:
将白色物体放置在TCS3200下方,依次通过红色、绿色和蓝色滤波器,分别测试出红色、绿色和蓝色的值,然后计算出需要调整的3个比例因子,即将值转化为0~255之间。

5、比较

这是目前网上常见的arduino的颜色识别代码:
https://www.eefocus.com/zhang700309/blog/13-08/296390_6c438.html
这是目前网上常见的C51的颜色识别代码:
http://www.51hei.com/bbs/dpj-36234-1.html
这是比较全面的TCS3200的文档:
https://wenku.baidu.com/view/7961e4ec71fe910ef12df87d.html
这两个代码都是通过定时器中断,软件计数的方法来得到各个颜色的方波个数。其实TCS3200自带有OUT引脚,可以直接输出方波个数,因此使用OUT引脚可以大大简化程序。而且直接通过内部硬件计数,更加稳定可靠。最初使用过上面两个代码,数据变动大,效果较差,因此不建议使用。

6、问题

  • 颜色识别传感器价格便宜,检测效果不好。只适合静物检测,动态的话更加不稳定。
  • 太多连线,很容易出错,而且很敏感,不稳定

相关文章: