龙空技术网

一文读懂TCS3200颜色传感器的工作原理

自由坦荡的湖泊AI 47

前言:

如今小伙伴们对“tcs3200颜色传感器算法”都比较关怀,各位老铁们都需要剖析一些“tcs3200颜色传感器算法”的相关文章。那么小编也在网摘上收集了一些有关“tcs3200颜色传感器算法””的相关知识,希望大家能喜欢,各位老铁们一起来学习一下吧!

TCS3200 颜色传感器可以根据波长检测多种颜色。该传感器特别适用于颜色识别项目,例如颜色匹配、颜色分类、试纸读取等。

TCS3200 颜色传感器(如下图所示)使用 TAOS TCS3200 RGB 传感器芯片来检测颜色。它还包含四个白色 LED,用于照明。

TCS3200 传感器如何工作?

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

16 个带红色滤光片的光电二极管 – 对红色波长敏感16 个带绿色滤光片的光电二极管 – 对绿色波长敏感16 个带蓝色滤光片的光电二极管 – 对蓝色波长敏感16 个光电二极管,无滤波器

通过有选择地选择光电二极管滤光片的读数,您可以检测不同颜色的强度。该传感器具有电流频率转换器,可将光电二极管的读数转换为方波,其频率与所选颜色的光强度成正比。然后,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) 值在59223之间振荡(

注意:不能在代码中使用这些频率值(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!");  }}

标签: #tcs3200颜色传感器算法