一板网电子技术论坛

风筝
发表于: 2020-10-15 21:04:27 | 显示全部楼层

大家好,欢迎来到今天的教程。在本篇文章中,我们将研究如何将TCS230颜色传感器与Arduino开发板一起使用。为了演示颜色传感器的功能,我们将制作一个颜色检测器系统,该系统能够检测传感器前面的颜色并将该颜色显示在TFT显示屏上。对于该项目,我们将使用TCS230颜色传感器,并将颜色显示在ST7735 1.8英寸TFT显示屏上。


TCS230是可编程的彩色光转频率器,它将可配置的硅光电二极管和电流频率转换器集合在单个单片CMOS集成电路上。

sensor.jpg


颜色传感器模块由颜色传感器本身和四个红外LED灯组成,这些LED用于照亮放置在传感器前面的任何物体,以确保读数准确并且不受周围照明的影响。传感器由光电二极管阵列组成,顶部装有红色、蓝色、绿色和彩色滤光片的彩色滤光片。检测到颜色后,传感器读取8×8光电二极管阵列,其中包括16个带蓝色滤光片的光电二极管,16个带有绿色滤镜的光电二极管,16个带有红色滤镜的光电二极管和16个没有滤镜的光电二极管。光电二极管的四种类型(颜色)相互交叉,以最小化入射照度不均匀的影响。所有16个相同颜色的光电二极管都并联连接,并且器件可在引脚上选择运行期间使用的光电二极管类型。


TCS230颜色传感器的输出为占空比为50%的方波,其频率与光的强度成正比。

output.jpg


所需的组件

构建此项目需要以下组件;

●    Arduino Uno开发板

●    颜色传感器

●    彩色TFT显示屏

●    面包板

●    跳线


原理图

如下图所示,将TCS230和TFT显示屏连接到Arduino开发板。

1.8tft_bb.png


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


可以通过每个库附带的链接下载库。安装库之后,我们可以继续编写项目代码。首先要做的是包含将要使用的库。

  1. //////////////////////////////////////////////
  2.   //       Arduino Color Sensor Tutorial      //
  3. //          with ST7735 TFT LCD             //
  4. //           http://www.educ8s.tv           //
  5. /////////////////////////////////////////////

  6. #include <MD_TCS230.h>
  7. #include <FreqCount.h>
  8. #include <Adafruit_ST7735.h>
  9. #include <Adafruit_GFX.h>
复制代码

接下来,我们声明与显示屏的CS、DC和RST引脚连接的Arduino引脚。

  1. #define cs   10  
  2. #define dc   9   
  3. #define rst  8
复制代码

接下来,我们以指定其十六进制值声明颜色,并声明颜色传感器引脚连接到的Arduino的GPIO引脚。

  1. // Color definitions
  2. #define BLACK    0x0000
  3. #define BLUE     0x001F
  4. #define RED      0xF800
  5. #define GREEN    0x07E0
  6. #define CYAN     0x07FF
  7. #define MAGENTA  0xF81F
  8. #define YELLOW   0xFFE0
  9. #define WHITE    0xFFFF
  10. #define GREY     0xC618

  11. // Pin definitions
  12. #define  S2_OUT  2
  13. #define  S3_OUT  3
  14. #define  OE_OUT   4    // LOW = ENABLED
复制代码

接下来,我们创建三个变量来表示red(R)、green(G)和blue(B)。这些变量将捕获颜色传感器接收到的数据的颜色内容。

  1. int R = 0;
  2. int G = 0;
  3. int B = 0;
复制代码

接下来,我们通过指定所需的引脚,创建一个颜色传感器库实例和一个ST7735显示屏的库的实例。

  1. MD_TCS230 CS(S2_OUT, S3_OUT, OE_OUT);
  2.   
  3. int state = 0;

  4. Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
复制代码

完成所有初步工作后,我们转到void setup()函数,在此函数初始化显示并显示欢迎文本。然后,我们开始与颜色传感器进行通信。

  1. void setup() {

  2.   Serial.begin(57600);
  3.   
  4.   tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  5.   drawBlackScreen();
  6.   
  7.   tft.setCursor(20,30);
  8.   tft.setTextColor(RED);
  9.   tft.setTextSize(2);
  10.   tft.print("Color");

  11.   tft.setCursor(20,60);
  12.   tft.setTextColor(GREEN);
  13.   tft.setTextSize(2);
  14.   tft.print("Sensor");

  15.   tft.setCursor(20,90);
  16.   tft.setTextColor(BLUE);
  17.   tft.setTextSize(2);
  18.   tft.print("Tutorial");

  19.   delay(3000);
  20.   
  21.   drawBlackScreen();

  22.    tft.setCursor(10,30);
  23.    tft.setTextColor(WHITE);
  24.    tft.setTextSize(2);
  25.    tft.print("SET BLACK");
  26.    delay(5000);
  27.    
  28.    CS.begin();
  29.    CS.read();
  30. }
复制代码

接下来是void loop()函数。在该函数中,我们要做的第一件事是通过向其提供黑白颜色来校准颜色传感器,一旦我们的项目识别出这些颜色,便会对其进行校准,并能够识别介于两者之间的任何其他颜色。

  1. void loop() {

  2. if(state ==0)
  3. {
  4.   if (CS.available()) {
  5.    sensorData  sd;
  6.    CS.getRaw(&sd);
  7.    CS.setDarkCal(&sd);
  8.    Serial.println("Black Calibration Set");
  9.    state++;
  10.    drawBlackScreen();

  11.    tft.setCursor(10,30);
  12.    tft.setTextColor(WHITE);
  13.    tft.setTextSize(2);
  14.    tft.print("SET WHITE");

  15.    delay(5000);
  16.    CS.read();
  17.   }
  18. }
复制代码

校准完成后,变量state大于零,程序开始运行。从这一点开始,模块可以读取输入给它的任何颜色。

  1. void loop() {

  2. if(state ==0)
  3. {
  4.   if (CS.available()) {
  5.    sensorData  sd;
  6.    CS.getRaw(&sd);
  7.    CS.setDarkCal(&sd);
  8.    Serial.println("Black Calibration Set");
  9.    state++;
  10.    drawBlackScreen();

  11.    tft.setCursor(10,30);
  12.    tft.setTextColor(WHITE);
  13.    tft.setTextSize(2);
  14.    tft.print("SET WHITE");

  15.    delay(5000);
  16.    CS.read();
  17.   }
  18. }
复制代码

以下是该项目的完整代码: ColorSensor.zip (1.25 KB, 下载次数: 26)


效果演示

请再次检查您的连接,确保一切正确,然后将代码上传到Arduino,并将彩色纸或任何彩色材料放在颜色传感器的前面。 不要忘了先用黑白纸校准传感器,然后再提供其他颜色。 下图显示了项目识别黄色的效果。

colour-detector-1.jpg


很酷吗?以上就是本文的全部内容。如果您对本文有任何疑问,请随时在本帖下面进行回复。


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 685 | 回复: 1421



手机版|

GMT+8, 2023-2-6 10:59 , Processed in 0.026579 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.4

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表