TCS3200是一种可通过单片机编程的彩色光-频率转换芯片。该模块可以通过集成微控制器如Arduino来检测白光的7种颜色。
在这篇文章中,我们将看看RGB颜色传感器TCS3200,我们将了解颜色传感器是如何工作的,我们将用Arduino实际测试TCS3200传感器并提取一些有用的数据。
颜色识别的重要性
我们每天看到的世界,充满了丰富的色彩,你有没有想过,除了视觉上的感觉,颜色到底是什么?颜色是波长不同的电磁波。红色、绿色、蓝色有不同的波长,人类的眼睛会调整来接收这些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滤色器放在一个块中,并发出任何颜色的光,相关的颜色传感器将接收到比其他两个更多的光。
通过测量接收到的光的强度,传感器可以揭示光的颜色。
传感器到单片机的信号通过光强到变频器的接口实现。
电路框图
“输出”引脚是输出。输出引脚的频率为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(" Green = ");
并同时frequency2);
系列。打印(“|”);
延迟(100);
/ /——传感蓝色——/ /
digitalWrite (s2, state1);
digitalWrite (s3, state2);
frequency3 = pulseIn(out, state);
系列。print("蓝色= ");
以frequency3);
延迟(100);
以 ("---------------------------------------");
延迟(400);
}
//-------------- 项目由R.GIRISH --------------//
连续监测输出:
显示最低的读数是放置在传感器前面的颜色。您也可以编写代码来识别任何颜色,例如黄色。黄色是绿色和红色混合的结果,所以如果黄色放在传感器前面,您必须考虑红色和绿色传感器读数,对任何其他颜色也是如此。
如果你对使用Arduino文章的RGB颜色传感器TCS3200有任何问题,请在评论部分表达。你会很快收到回复。
以上说明的颜色传感器也可以用于通过继电器触发外部设备执行所需的操作。
法尔说
现在有可能通过获得绿色的光来断开继电器吗??
赃物说
GR先生将很快回答您的问题.....
GR说
嗨法,
我很快会写一篇文章来解释如何通过检测特定颜色来触发继电器。
问候
艾拉说
试过这个,但它不能识别水果的颜色…Ex它不能说苹果是红色的,叶子是绿色的,它只能检测物体的纯色,而不是水果。
赃物说
是的,传感器可能没有那么高效,这已经在后面的文章中通知:
//www.addme-blog.com/2017/09/relay-trigger-by-color-detection-using-arduino.html