TCS3200是一种可以通过单片机进行编程的彩色光频转换芯片。该模块可以在Arduino等集成微控制器的帮助下,实现对所有7种白光的检测。
在这篇文章中,我们将看看RGB颜色传感器TCS3200,我们将了解颜色传感器是如何工作的,我们将实际测试TCS3200传感器与Arduino和提取一些有用的数据。
颜色识别的重要性
我们每天看到的世界,充满了丰富的色彩,你有没有想过,除了视觉上的感觉,真正的色彩是什么?颜色是不同波长的电磁波。红、绿、蓝有不同的波长,人类的眼睛可以接收到这些RGB颜色,这是电磁波谱中的一个窄带。
但是,我们看到的不仅仅是红色、蓝色和绿色;这是因为我们的大脑可以混合两种或更多的颜色,并给出一个新的颜色。
看到不同颜色的能力帮助古人类文明逃离威胁生命的危险,如动物,也帮助识别可食用的东西,如水果的正确生长,这将是愉快的消费。
女性比男性更善于识别颜色的不同深浅(对颜色更敏感),而男性则更善于跟踪快速移动的物体并做出相应的反应。
许多研究表明,这是因为在古代;男人去打猎是因为他们的体力比女人强。
女性则被授予风险较小的任务,比如从植物和树上收集水果和其他可食用的物品。
从生长正常的植物中收集可食用的食物(水果的颜色起着很大的作用)对于良好的消化是非常重要的,这可以帮助人类摆脱健康问题。
即使在现代,男性和女性在视觉能力上的差异仍然存在。
好的,为什么上面的解释是针对电子颜色传感器的呢?因为颜色传感器是根据人类眼睛的颜色模型制作的,而不是其他动物的眼睛颜色模型。
例如,智能手机的双摄像头;其中一个相机是专门为识别RGB颜色和其他相机拍摄正常的图像。将这两幅图像/信息与一些仔细的算法混合,将在屏幕上重现只有人类能够感知的真实物体的准确颜色。
注:并非所有双摄像头的工作方式都与上述相同,部分双摄像头用于光学变焦;有的用于产生深度场效应等。
现在让我们看看TCS3200颜色传感器是如何制作的。
TCS3200传感器示意图:
它有4个内置的白色led灯来照亮物体。它有10个大头针;两个Vcc和GND引脚(使用任意两个)。简单解释S0, S1, S2, S3, S4和' out '引脚的功能。
如果仔细观察传感器,我们可以看到如下图所示:
它有8 x 8个颜色传感器阵列,总共是64个。光传感器块有红、蓝、绿传感器。不同的颜色传感器是通过在传感器上应用不同的颜色过滤器而形成的。在64个传感器中,它有16个蓝色、16个绿色、16个红色传感器,还有16个没有任何滤色器的照片传感器。
蓝色滤光片将只允许蓝色的光击中传感器,并拒绝其余的波长(颜色);其他两个颜色传感器也是如此。
如果你用蓝光照射红色或绿色的滤光片,与蓝色滤光片相比,通过绿色或红色滤光片的光强度较低。因此,与其他两个传感器相比,蓝色过滤传感器将接收到更多的光。
因此,我们可以将带有RGB滤光片的颜色传感器放在一个块中,并发出任何颜色的光,相关的颜色传感器将比其他两个接收到更多的光。
通过测量传感器接收到的光的强度,可以显示出光线的颜色。
通过光强与变频器的连接,将信号从传感器传输到单片机。
电路框图
“out”引脚是输出。输出引脚的频率为50%占空比。S2和S3引脚是光传感器的选择线。
你可以通过查看表格来更好地理解:
通过对引脚S2和S3施加低信号,将选择红色传感器,并测量红色波长的强度。
类似地,对于其他颜色,遵循上面的表格。
一般情况下,红、蓝、绿三种颜色的传感器都是在没有滤光片的情况下被测量的。
S0和S1是频率缩放引脚:
S0和S1是频率缩放引脚,用于缩放输出频率。频率缩放用来选择从传感器到单片机的最佳输出频率。在Arduino 20%的情况下,建议使用S0 ' HIGH '和S1 ' LOW '。
如果相关传感器的光强高,输出频率就会变高。为了程序代码的简单,不测量频率,但测量脉冲持续时间,频率越高,脉冲持续时间越短。
因此,串行监视器读数显示最少的那一个必须是放置在传感器前面的颜色。
从颜色传感器中提取数据
现在让我们试着从传感器中提取数据:
程序代码:
//-------------- 项目由R.GIRISH --------------//
Const int s0 = 4;
Const int s1 = 5;
Const int s2 = 6;
Const int s3 = 7;
Const int out = 8;
Int frequency1 = 0;
Int frequency2 = 0;
Int frequency3 = 0;
int state = LOW;
int state1 = LOW;
int state2 = HIGH;
无效的设置()
{
Serial.begin (9600);
pinMode (s0、输出);
pinMode (s1、输出);
pinMode (s2、输出);
pinMode (s3、输出);
pinMode(输入);
/ /——扩展频率20%——/ /
digitalWrite (s0 state2);
digitalWrite (s1, state1);
//-----------------------------//
}
无效循环()
{
/ /——感应红色/ / digitalWrite (s2, state1);
digitalWrite (s3, state1);
frequency1 = pulseIn(out, state);
系列。打印(“红色= ");
并同时frequency1);
系列。打印(“|”);
延迟(100);
/ /——传感绿色——/ /
digitalWrite (s2, state2);
digitalWrite (s3, state2);
frequency2 = pulseIn(out, state);
系列。print("绿色= ");
并同时frequency2);
系列。打印(“|”);
延迟(100);
/ /——传感蓝色——/ /
digitalWrite (s2, state1);
digitalWrite (s3, state2);
frequency3 = pulseIn(out, state);
系列。print(" Blue = ");
以frequency3);
延迟(100);
以 ("---------------------------------------");
延迟(400);
}
//-------------- 项目由R.GIRISH --------------//
连续监测输出:
读数最低的是放置在传感器前面的颜色。您也可以编写代码来识别任何颜色,例如黄色。黄色是绿色和红色混合后的结果,所以如果黄色被放置在传感器前面,你必须考虑红色和绿色传感器的读数,其他颜色也一样。
如果您有任何关于使用Arduino的RGB颜色传感器TCS3200的问题,请在评论部分表达。你可能会收到一个快速的回复。
上述解释的颜色传感器也可用于通过继电器触发外部装置用于执行所需的操作。
现在有可能通过绿灯来关闭继电器吗??
GR先生将很快回答你的问题.....
嗨法,
很快,我将写一篇文章来解释如何通过检测特定的颜色来触发继电器。
问候
试过这个,但它不能识别水果的颜色,例如,它不能说苹果是红色的,叶子是绿色的,它只能识别物体的纯色,而不是水果。
是的,传感器可能不是那么有效,这已经在这篇后续文章的结尾通知:
//www.addme-blog.com/2017/09/relay-trigger-by-color-detection-using-arduino.html