大家好,欢迎来到今天的教程。在本篇文章中,我们将研究如何将TCS230颜色传感器与Arduino开发板一起使用。为了演示颜色传感器的功能,我们将制作一个颜色检测器系统,该系统能够检测传感器前面的颜色并将该颜色显示在TFT显示屏上。对于该项目,我们将使用TCS230颜色传感器,并将颜色显示在ST7735 1.8英寸TFT显示屏上。
TCS230是可编程的彩色光转频率器,它将可配置的硅光电二极管和电流频率转换器集合在单个单片CMOS集成电路上。
颜色传感器模块由颜色传感器本身和四个红外LED灯组成,这些LED用于照亮放置在传感器前面的任何物体,以确保读数准确并且不受周围照明的影响。传感器由光电二极管阵列组成,顶部装有红色、蓝色、绿色和彩色滤光片的彩色滤光片。检测到颜色后,传感器读取8×8光电二极管阵列,其中包括16个带蓝色滤光片的光电二极管,16个带有绿色滤镜的光电二极管,16个带有红色滤镜的光电二极管和16个没有滤镜的光电二极管。光电二极管的四种类型(颜色)相互交叉,以最小化入射照度不均匀的影响。所有16个相同颜色的光电二极管都并联连接,并且器件可在引脚上选择运行期间使用的光电二极管类型。
TCS230颜色传感器的输出为占空比为50%的方波,其频率与光的强度成正比。
所需的组件 构建此项目需要以下组件; ● Arduino Uno开发板 ● 颜色传感器 ● 彩色TFT显示屏 ● 面包板 ● 跳线
原理图 如下图所示,将TCS230和TFT显示屏连接到Arduino开发板。
Arduino与TFT显示屏之间的引脚连接描述如下: ST7735显示屏引脚 | Arduino引脚 | LED | 3.3V | SCK | D13 | SDA | D11 | DC | D9 | CS | D10 | Reset | D8 | GND | GND | VCC | 5V |
Arduino与TCS230颜色传感器之间的引脚连接描述如下: TCS230颜色传感器引脚 | Arduino引脚 | VCC | 5V | GND | GND | Out | D5 | S2 | D2 | S3 | D3 | OE | D4 |
一些TCS230模块包括一个LED引脚,如果您使用的是这种型号,则应将LED引脚连接到Arduino的5V引脚。再次确认原理图以确保一切均已正确连接,然后再继续进行下一部分。
代码 为了轻松编写该项目的代码,我们需要四个库,其中两个库使我们能够与颜色传感器连接并提取读数,而另外两个库使我们能够使用TFT显示屏。所需的库是: 1. Color Sensor Library 2. Frequency Count 3. Adafruit ST7735 4. Adafruit GFX
可以通过每个库附带的链接下载库。安装库之后,我们可以继续编写项目代码。首先要做的是包含将要使用的库。 - //////////////////////////////////////////////
- // Arduino Color Sensor Tutorial //
- // with ST7735 TFT LCD //
- // http://www.educ8s.tv //
- /////////////////////////////////////////////
- #include <MD_TCS230.h>
- #include <FreqCount.h>
- #include <Adafruit_ST7735.h>
- #include <Adafruit_GFX.h>
复制代码接下来,我们声明与显示屏的CS、DC和RST引脚连接的Arduino引脚。 - #define cs 10
- #define dc 9
- #define rst 8
复制代码接下来,我们以指定其十六进制值声明颜色,并声明颜色传感器引脚连接到的Arduino的GPIO引脚。 - // Color definitions
- #define BLACK 0x0000
- #define BLUE 0x001F
- #define RED 0xF800
- #define GREEN 0x07E0
- #define CYAN 0x07FF
- #define MAGENTA 0xF81F
- #define YELLOW 0xFFE0
- #define WHITE 0xFFFF
- #define GREY 0xC618
- // Pin definitions
- #define S2_OUT 2
- #define S3_OUT 3
- #define OE_OUT 4 // LOW = ENABLED
复制代码接下来,我们创建三个变量来表示red(R)、green(G)和blue(B)。这些变量将捕获颜色传感器接收到的数据的颜色内容。 - int R = 0;
- int G = 0;
- int B = 0;
复制代码接下来,我们通过指定所需的引脚,创建一个颜色传感器库实例和一个ST7735显示屏的库的实例。 - MD_TCS230 CS(S2_OUT, S3_OUT, OE_OUT);
-
- int state = 0;
- Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
复制代码
完成所有初步工作后,我们转到void setup()函数,在此函数初始化显示并显示欢迎文本。然后,我们开始与颜色传感器进行通信。 - void setup() {
- Serial.begin(57600);
-
- tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
- drawBlackScreen();
-
- tft.setCursor(20,30);
- tft.setTextColor(RED);
- tft.setTextSize(2);
- tft.print("Color");
- tft.setCursor(20,60);
- tft.setTextColor(GREEN);
- tft.setTextSize(2);
- tft.print("Sensor");
- tft.setCursor(20,90);
- tft.setTextColor(BLUE);
- tft.setTextSize(2);
- tft.print("Tutorial");
- delay(3000);
-
- drawBlackScreen();
- tft.setCursor(10,30);
- tft.setTextColor(WHITE);
- tft.setTextSize(2);
- tft.print("SET BLACK");
- delay(5000);
-
- CS.begin();
- CS.read();
- }
复制代码
接下来是void loop()函数。在该函数中,我们要做的第一件事是通过向其提供黑白颜色来校准颜色传感器,一旦我们的项目识别出这些颜色,便会对其进行校准,并能够识别介于两者之间的任何其他颜色。 - void loop() {
- if(state ==0)
- {
- if (CS.available()) {
- sensorData sd;
- CS.getRaw(&sd);
- CS.setDarkCal(&sd);
- Serial.println("Black Calibration Set");
- state++;
- drawBlackScreen();
- tft.setCursor(10,30);
- tft.setTextColor(WHITE);
- tft.setTextSize(2);
- tft.print("SET WHITE");
- delay(5000);
- CS.read();
- }
- }
复制代码
校准完成后,变量state大于零,程序开始运行。从这一点开始,模块可以读取输入给它的任何颜色。 - void loop() {
- if(state ==0)
- {
- if (CS.available()) {
- sensorData sd;
- CS.getRaw(&sd);
- CS.setDarkCal(&sd);
- Serial.println("Black Calibration Set");
- state++;
- drawBlackScreen();
- tft.setCursor(10,30);
- tft.setTextColor(WHITE);
- tft.setTextSize(2);
- tft.print("SET WHITE");
- delay(5000);
- CS.read();
- }
- }
复制代码
以下是该项目的完整代码:
ColorSensor.zip
(1.25 KB, 下载次数: 26)
效果演示 请再次检查您的连接,确保一切正确,然后将代码上传到Arduino,并将彩色纸或任何彩色材料放在颜色传感器的前面。 不要忘了先用黑白纸校准传感器,然后再提供其他颜色。 下图显示了项目识别黄色的效果。
很酷吗?以上就是本文的全部内容。如果您对本文有任何疑问,请随时在本帖下面进行回复。
|