首页 » 通讯 » 一文读懂TCS3200颜色传感器的工作事理_频率_传感器

一文读懂TCS3200颜色传感器的工作事理_频率_传感器

萌界大人物 2024-10-03 14:48:50 0

扫一扫用手机浏览

文章目录 [+]

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

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

一文读懂TCS3200颜色传感器的工作事理_频率_传感器 一文读懂TCS3200颜色传感器的工作事理_频率_传感器 通讯

TCS3200 传感器如何事情?

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

一文读懂TCS3200颜色传感器的工作事理_频率_传感器 一文读懂TCS3200颜色传感器的工作事理_频率_传感器 通讯
(图片来自网络侵删)
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) 值在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!"); }}

相关文章

搬家协议,筑梦新居的坚实基石

搬家,是人生中的一大重要事件,它承载着我们对新生活的期待与憧憬。而一份完善的搬家协议,便是筑梦新居的坚实基石。本文将从搬家协议的版...

通讯 2025-01-07 阅读0 评论0