在这个项目中,我们将使用带有Raspberry Pi的TCS3200颜色传感器模块来检测颜色。在这里,我们使用Raspberry Pi的Python代码使用TCS3200传感器检测颜色。为了演示颜色检测,我们使用了RGB LED,该RGB LED将以相同的颜色发光,其中物体位于传感器附近。目前,我们已对Raspberry Pi进行编程,使其仅检测红色,绿色和蓝色。但是您可以对其进行编程,以在获取RGB值后检测任何颜色,因为每种颜色都由这些RGB成分组成。最后查看演示视频。
我们之前已经使用相同的TCS3200和Arduino读取并显示了颜色的RGB值。在继续之前,请先了解一下TCS3200色彩传感器。
TCS3200颜色传感器:
TCS3200是一种颜色传感器,可以通过正确的编程检测任何数量的颜色。 TCS3200包含RGB(红绿蓝)阵列。如微观图所示,可以在传感器上看到眼睛内部的方框。这些方框是RGB矩阵的阵列。这些盒子中的每一个都包含三个传感器,用于感应红色,绿色和蓝色的光强度。
因此,我们在同一层上具有红色,蓝色和绿色阵列。因此,在检测颜色时,我们无法同时检测所有三个元素。这些传感器阵列中的每一个将一个接一个地单独选择以检测颜色。可以对模块进行编程,以感测特定的颜色并留下其他颜色。它包含用于该选择目的的引脚,稍后将对此进行说明。存在第四种模式,它不是过滤器模式。在无滤镜模式下,传感器会检测到白光。
我们将把该传感器连接到Raspberry Pi,并对Raspberry Pi进行编程,以根据颜色提供适当的响应。
所需组件:
在这里,我们使用 带有Raspbian Jessie OS的Raspberry Pi 2 ModelB。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介和Raspberry PI LED闪烁中查找它,以开始使用,而我们还不需要:
- 带有预装操作系统的Raspberry Pi
- TCS3200颜色传感器
- CD4040计数器芯片
- RGB LED
- 1KΩ电阻器(3个)
- 1000uF电容器
电路图和连接:
下表列出了将颜色传感器与Raspberry Pi连接所完成的连接:
传感器引脚 |
树莓派别针 |
Vcc |
+ 3.3v |
地线 |
地面 |
S0 |
+ 3.3v |
S1 |
+ 3.3v |
S2 |
PI的GPIO6 |
S3 |
PI的GPIO5 |
OE |
PI的GPIO22 |
出 |
CD4040的时钟 |
下表列出了CD4040计数器与Raspberry Pi的连接:
CD4040引脚 |
树莓派别针 |
Vcc16 |
+ 3.3v |
Gnd8 |
nd |
Clk10 |
传感器不足 |
重设11 |
PI的GPIO26 |
Q0 |
PI的GPIO21 |
Q1 |
PI的GPIO20 |
Q2 |
PI的GPIO16 |
Q3 |
PI的GPIO12 |
Q4 |
PI的GPIO25 |
Q5 |
PI的GPIO24 |
Q6 |
PI的GPIO23 |
Q7 |
PI的GPIO18 |
Q8 |
没有关联 |
Q9 |
没有关联 |
Q10 |
没有关联 |
Q11 |
没有关联 |
下面是将颜色传感器与Raspberry Pi接口的完整电路图:
工作说明:
每种颜色都由三种颜色组成:红色,绿色和蓝色(RGB)。而且,如果我们知道任何颜色的RGB强度,那么我们就可以检测到该颜色。我们之前已经使用Arduino读取了这些RGB值。
使用TCS3200色彩传感器,我们无法同时检测到红色,绿色和蓝色的光,因此我们需要对它们进行逐一检查。颜色传感器需要检测的颜色由两个引脚S2和S3选择。使用这两个引脚,我们可以告诉传感器要测量的颜色光强度。
假设我们需要感测红色强度,则需要将两个引脚都设置为低电平。在测量红色光之后,我们将S2 LOW和S3 HIGH设置为测量蓝光。根据下表,通过顺序更改S2和S3的逻辑,我们可以测量红色,蓝色和绿色的光强度:
S2 |
S3 |
光电二极管类型 |
低 |
低 |
红 |
低 |
高 |
蓝色 |
高 |
低 |
无过滤器(白色) |
高 |
高 |
绿色 |
传感器检测到RGB分量的强度后,该值将发送到模块内部的控制系统,如下图所示。通过阵列测量的光强度被发送到模块内部的电流至频率转换器。变频器会生成一个方波,其频率与阵列发送的值成正比。电流与频率转换器使用ARRAY中较高的值,会产生较高频率的方波。
颜色传感器模块的输出信号频率可以调整为四个级别。通过使用传感器模块的S0和S1选择这些级别,如下图所示。
S0 |
S1 |
输出频率定标(f0) |
大号 |
大号 |
掉电 |
大号 |
H |
2% |
H |
大号 |
20% |
H |
H |
100% |
当我们将该模块与时钟较低的系统连接时,此功能非常有用。对于Raspberry Pi,我们将选择100%。请记住,在阴影下,颜色传感器模块会生成一个方波输出,每种颜色的最大频率为2500Hz(100%缩放)。
尽管该模块提供的输出方波的频率与落在其表面上的光强度成正比,但没有简便的方法可以通过该模块计算每种颜色的光强度。但是,我们可以判断每种颜色的光强度是增加还是减少。我们还可以计算和比较红色,绿色,蓝色值,以检测光的颜色或模块表面预设的对象的颜色。因此,这更多是颜色传感器模块而不是光强度传感器模块。
现在,我们将把方波输出馈送到Raspberry Pi,但由于Raspberry Pi没有任何内部计数器,因此我们无法直接将其提供给PI 。因此,首先我们将该输出提供给CD4040 Binary Counter,然后对Raspberry Pi进行编程,使其以100毫秒的周期间隔从计数器获取频率值。
因此,对于每种红色,绿色和蓝色,PI读取的最大值为2500/10 = 250 max。我们还对Raspberry Pi进行了编程,以在屏幕上打印这些代表光强度的值,如下所示。从默认值中减去这些值,以达到零。在确定颜色的同时派上用场。
此处的默认值为RGB的值,该值是在没有将任何物体放置在传感器前面的情况下获取的。这取决于周围的光照条件,这些值可能会根据周围环境而有所不同。基本上,我们正在校准传感器的标准读数。因此,首先运行该程序,不要放置任何物体并注意读数。这些值不会接近零,因为无论放置在何处,总会有一些光线照射到传感器上。然后将这些读数减去我们将放置一个对象进行测试后得到的读数。这样我们就可以获得标准读数。
还对Raspberry Pi进行了编程,以比较R,G和B值,以确定放置在传感器附近的物体的颜色。连接到Raspberry Pi的RGB发光LED显示了此结果。
简而言之,
1.模块检测放置在表面附近的物体反射的光。
2.颜色传感器模块为R或G或B提供输出波,由Raspberry Pi通过引脚S2和S3顺序选择。
3. CD4040计数器接收波形并测量频率值。
4. PI每100毫秒从计数器获取每种颜色的频率值。每次取值后,PI都会重置计数器以检测下一个值。
5. Raspberry Pi在屏幕上打印这些值,并比较这些值以检测对象的颜色,最后根据对象的颜色以适当的颜色发光RGB LED。
我们在Python代码中遵循了上述顺序。完整的节目在下面提供了一个演示视频。
在这里,Raspberry Pi被编程为仅检测三种颜色,您可以相应地匹配R,G和B值以检测更多喜欢的颜色。