目录
材料:
Arduino uno 或者 mini pro
颜色传感器模块TCS 3200
液晶显示屏LCD1602
面包板
原理结构图
TCS 3200传感器
TCS3200是一款可编程彩色光 – 频转换器,它将可配置的硅光电二极管和电流 – 频率转换器组合在一个单片CMOS集成电路上。
输出是方波(50%占空比),其频率与光强度(辐照度)成正比。满量程输出频率可通过两个控制输入引脚(S0和S1)按三个预设值之一进行调整。数字输入和数字输出允许直接连接到微控制器或其他逻辑电路。
输出使能(OE)将输出置于高阻态,以便多单元共享微控制器输入线。在TCS3200中,光频转换器读取8 x 8光电二极管阵列。
- 十六个光电二极管具有蓝色滤光片
- 16个光电二极管有绿色滤光片
- 16个光电二极管有红色滤光片
- 16个光电二极管清晰,没有滤光片。
引脚S2和S3用于选择哪组光电二极管(红色,绿色,蓝色,透明)有效。光电二极管的尺寸为110μm×110μm,中心为134μm。
OE(使能)应连接到GND(低电平)。
传感器是封装的,应在2.7和5.5 VDC之间供电。我们将使用5V Arduino输出为传感器供电。为了正确使用传感器,我们将安装一个小橡胶圈,将传感器与侧光隔离。
连接硬件
如下所示连接TSC3200传感器:
- S0 ==>Nano pin D4
- S1 ==> Nano pin D5
- S2 ==> Nano pin D6
- S3 ==> Nano pin D7
- OUT ==> Nano Pin D8
- EN ==> GND
- VCC ==> + 5V
- GND ==> GND
连接I2C LCD 2/16串行显示器:
- SDA ==> Nano Pin A4
- SCL ==> Nano Pin A5
安装Arduino Nano。给nano开发板供电。
Arduino代码
首先要定义的是上面表格中定义的频率缩放。引脚S0和S1用于此。缩放输出频率对于优化各种频率计数器或微控制器的传感器读数非常有用。我们将设置S0和S1,均为HIGH(100%):
digitalWrite(s0,HIGH); digitalWrite(s1,HIGH);
接下来要做的是选择光电二极管(红色,绿色或蓝色)读取的颜色,我们使用控制引脚S2和S3。由于光电二极管并联连接,将S2和S3设置为低电平和高电平不同的组合允许您选择不同的光电二极管,如上表所示。
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
red = pulseIn(outPin, LOW); // Reading RED component of color
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
grn = pulseIn(outPin, LOW); // Reading GREEN component of color
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
blu = pulseIn(outPin, LOW); // Reading BLUE component of color
在最终代码中,我们将读取每个RGB组件的几次并取平均值,因此如果其中一个读数不好,我们可以减少错误。
一旦我们有3个组件(RGB),我们必须定义它是什么颜色。以前做校准项目的方法。您可以使用已知的彩色测试纸或对象,并阅读生成的3个组件。
您可以从我的开始,更改您的光照水平的参数:
void getColor()
{
readRGB();
if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16) color = "WHITE";
else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125) color = "BLACK";
else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70) color = "RED";
else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85) color = "GREEN";
else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38) color = "YELLOW";
else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65) color = "BLUE";
else color = "NO_COLOR";
}
如您所见,我预先定义了6种颜色:白色,黑色,红色,绿色,黄色和蓝色。随着环境光线的下降,参数往往会更高。
在循环()内,我每隔1秒在LCD上定义显示读数。
楼主可以的 正好这几天在做这样的项目 下载下来看看,感觉很不错
问一下这个#include “stationDefines.h”找不到这个文件是什么问题啊
去库里找找库文件