TCS3200 颜色传感器可以根据波长检测多种颜色。该传感器特殊适用于颜色识别项目,例如颜色匹配、颜色分类、试纸读取等。
TCS3200 颜色传感器(如下图所示)利用 TAOS TCS3200 RGB 传感器芯片来检测颜色。它还包含四个白色 LED,用于照明。

TCS3200 传感器如何事情?
TCS3200 具有带有 4 个不同滤波器的光电二极管阵列。光电二极管只是一种将光转换为电流的半导体器件。该传感用具有:

通过有选择地选择光电二极管滤光片的读数,您可以检测不同颜色的强度。该传感用具有电流频率转换器,可将光电二极管的读数转换为方波,其频率与所选颜色的光强度成正比。然后,Arduino 读取该频率 – 如下图所示。
引脚排列
引脚名称
输入/输出
描述
GND (4)
电源地
OE (3)
输出
启用输出频率(低电平有效)
OUT (6)
输出
输出频率
S0、S1(1,2)
输入
输出频率缩放选择输入
S2、S3(7,8)
输入
光电二极管类型选择输入
电源电压(5)
供电电压
过滤器选择利用掌握引脚 S2 和 S3选择光电二极管读取的颜,。由于
光电二极管类型
S2
S3
Red
LOW
LOW
Blue
LOW
HIGH
无滤波
HIGH
LOW
Green
HIGH
HIGH
频率缩放引脚 S0 和 S1 用于缩放输出频率。它可以缩放为以下预设值:100%、20% 或 2%。缩放输出频率对付优化各种频率计数器或微掌握器的传感器读数非常有用。
输出频率缩放
S0
S1
Power OFF
L
L
2%
L
H
20%
H
L
100%
H
H
对付 Arduino,常日利用 20% 的频率缩放。因此,将 S0 引脚设置为高电平,将 S1 引脚设置为低电平。
1. 读取输出频率#define S0 4#define S1 5#define S2 6#define S3 7#define sensorOut 8// 存储光电二极管读取的频率int redFrequency = 0;int greenFrequency = 0;int blueFrequency = 0;void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // 将频率缩放设置为20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600);}void loop() { // Setting RED (R) filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency redFrequency = pulseIn(sensorOut, LOW); // Printing the RED (R) value Serial.print("R = "); Serial.print(redFrequency); delay(100); // Setting GREEN (G) filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency greenFrequency = pulseIn(sensorOut, LOW); // Printing the GREEN (G) value Serial.print(" G = "); Serial.print(greenFrequency); delay(100); // Setting BLUE (B) filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency blueFrequency = pulseIn(sensorOut, LOW); // Printing the BLUE (B) value Serial.print(" B = "); Serial.println(blueFrequency); delay(100);}
将蓝色物体放置在传感器前面不同间隔处。保存两个丈量值:当物体阔别传感器时和当物体靠近传感器时。
检讨串行监视器上显示的值。与赤色 (R) 和绿色 (G) 频率读数比较,蓝色频率 (B) 应最低 - 拜会下图。
当我们将蓝色物体放在传感器前面时,蓝色频率 (B) 值在59和223之间振荡(
把稳:不能在代码中利用这些频率值(59 和 223),该当利用自己的颜色传感器丈量特定工具的颜色。然后,保存蓝色的频率上限和下限
对绿色和赤色工具重复此过程,并记下每种颜色的频率上限和下限。
2.区分不同颜色
在上一步中,当蓝色间隔最近时的频率为 59,而当蓝色间隔较远时的频率为 223。
因此,频率 59 对应于 255(RGB),频率 223 对应于 0(RGB)。我们将利用 Loop()函数中,您须要将XX参数更换为您自己的值。
#define S0 4#define S1 5#define S2 6#define S3 7#define sensorOut 8int redFrequency = 0;int greenFrequency = 0;int blueFrequency = 0;// 储存赤色,绿色和蓝色int redColor = 0;int greenColor = 0;int blueColor = 0;void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // S将频率放大20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600);}void loop() { // 读赤色 digitalWrite(S2,LOW); digitalWrite(S3,LOW); // 读频率 redFrequency = pulseIn(sensorOut, LOW); //重映射 RED (R)频率的值从0到255//必须用你己的值更换,如//redColor = map (redChannel,70,120,255,0) ; redColor = map(redFrequency, XX, XX, 255,0); Serial.print("R = "); Serial.print(redColor); delay(100); // 读绿色 digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // 读频率 greenFrequency = pulseIn(sensorOut, LOW); //重映射 Green(G)频率的值从0到255 //必须用你己的值更换,如 // greenColor = map(greenFrequency, 100, 199, 255, 0); greenColor = map(greenFrequency, XX, XX, 255, 0); Serial.print(" G = "); Serial.print(greenColor); delay(100); // 读蓝色 digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // 读频率 blueFrequency = pulseIn(sensorOut, LOW); //重映射 Blue(B)频率的值从0到255//必须用你己的值更换, // blueColor = map(blueFrequency, 38, 84, 255, 0); blueColor = map(blueFrequency, XX, XX, 255, 0); Serial.print(" B = "); Serial.print(blueColor); delay(100); // 判断读取的颜色 // a message in the serial monitor if(redColor > greenColor && redColor > blueColor){ Serial.println(" - RED detected!"); } if(greenColor > redColor && greenColor > blueColor){ Serial.println(" - GREEN detected!"); } if(blueColor > redColor && blueColor > greenColor){ Serial.println(" - BLUE detected!"); }}




