Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】108种传感器系列实验(64)---TCS3200D颜色识别传感器

[复制链接]
 楼主| 发表于 2022-4-19 06:03 | 显示全部楼层
TCS3200 颜色传感器的工作原理:
TCS3200 是一个 8×8 光电二极管阵列。TCS3200 颜色传感器检测颜色并将色光转换为频率。传感器的输出与物体表面反射的光强度成正比。TCS3200 模块具有 RGB 和透明传感器以及嵌入到板上的 4 个 LED。相关图片

光电二极管具有三种不同的滤色器,红色、蓝色、绿色和透明各 16 个。它基本上由感知彩色光的光电二极管组成,然后电流频率转换器将它们转换为频率与光强度成正比的方波。

34.jpg

 楼主| 发表于 2022-4-19 06:04 | 显示全部楼层
TCS3200 是一款采用 SOC 封装的 8 引脚 IC。每个引脚都有特定的用途。引脚 1 和 2(SO 和 S1)用于缩放输出频率。引脚 3 是输出使能引脚,引脚 4 是 GND。引脚 5 为 VDD,最大电源电压为 5.5 V。引脚 6 是用于方波输出的输出引脚。引脚 7 和 8(S2 和 S3)用于选择光电二极管。主要引脚为 S0、S1 和 S3、S4。这些将用于根据所使用的微控制器来缩放输出方波的频率。不同的微控制器具有不同的定时器配置。频率缩放功能基本上允许传感器的输出针对各种微控制器进行优化。

35.jpg
 楼主| 发表于 2022-4-19 06:27 | 显示全部楼层
这个项目将使用一个简单的 Arduino 颜色传感器。如前所述,使用的 TCS3200 具有不同的滤色器。每种颜色的强度都有不同的频率。此处使用的 Arduino 通过对颜色传感器的 S0 和 S1 引脚施加 HIGH,将输出频率固定为 100%。颜色传感器的 S2 和 S3 引脚将选择颜色二极管的类型。选择特定光电二极管时,激活Arduino上的脉冲功能。

这与有助于计算输出信号的颜色传感器的输出相连。对于其他光电二极管,红色、绿色和蓝色也是如此。在每种情况下,使用 PULSEIN 功能测量频率并显示在串行终端上。因此检测到的颜色被使用并显示在点亮 LED(发光二极管)的 LCD 上。

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序八:检测到的颜色被使用并显示在点亮 LED(发光二极管)的 LCD 上
  4. */

  5. #include <Wire.h>
  6. #include <LiquidCrystal_I2C.h>

  7. LiquidCrystal_I2C lcd(0x27, 16, 2);

  8. int red = 0;
  9. int green = 0;
  10. int blue = 0;

  11. void setup(){
  12.   Serial.begin(9600);
  13.   pinMode(8, OUTPUT);
  14.   pinMode(9, OUTPUT);
  15.   pinMode(12, OUTPUT);
  16.   pinMode(11, OUTPUT);
  17.   pinMode(10, INPUT);

  18.   digitalWrite(8, HIGH);
  19.   digitalWrite(9, HIGH);

  20.   lcd.init();
  21.   lcd.backlight();
  22. }

  23. void loop(){
  24.   digitalWrite(12, LOW);
  25.   digitalWrite(11, LOW);
  26.   red = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);
  27.   digitalWrite(11, HIGH);
  28.   blue = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);
  29.   digitalWrite(12, HIGH);
  30.   green = pulseIn(10, digitalRead(10) == HIGH ? LOW : HIGH);

  31.   lcd.clear();
  32.   if (red < blue && red < green && red < 20)
  33.   {
  34.     Serial.println(" Red Color");
  35.     lcd.print("Red Color");
  36.   }

  37.   else if (blue < red && blue < green)
  38.   {
  39.     Serial.println(" Blue Color");
  40.     lcd.print("Blue Color");
  41.   }

  42.   else if (green < red && green < blue)
  43.   {
  44.     Serial.println(" Green Color");
  45.     lcd.print("Green Color");
  46.   }
  47.   delay(500);
  48. }
复制代码


 楼主| 发表于 2022-4-19 06:28 | 显示全部楼层
实验串口返回情况

36.jpg
 楼主| 发表于 2022-4-19 06:29 | 显示全部楼层
实验场景图

37.jpg
 楼主| 发表于 2022-4-19 07:58 | 显示全部楼层
程序九:将颜色数值打印到带有 i2c接口的LCD
1Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序九:将颜色数值打印到带有 i2c接口的LCD上
  4. */

  5. #include <Wire.h>//IIC驱动库
  6. #include <LiquidCrystal_I2C.h>//1602屏驱动库
  7. //TCS3200 引脚连接到 Arduino
  8. #define S1 9
  9. #define S0 8
  10. #define S3 12
  11. #define S2 11
  12. #define sensorOut 10
  13. // 将 LCD 地址设置为 0x27 或 0x3f 以实现 16 个字符和 2 行显示
  14. LiquidCrystal_I2C lcd(0x27, 16, 2);
  15. // 存储光电二极管读取的频率
  16. int redFrequency = 0;
  17. int greenFrequency = 0;
  18. int blueFrequency = 0;

  19. void setup() {
  20.   lcd.init();
  21.   lcd.backlight();
  22.   // 设置输出
  23.   pinMode(S0, OUTPUT);
  24.   pinMode(S1, OUTPUT);
  25.   pinMode(S2, OUTPUT);
  26.   pinMode(S3, OUTPUT);
  27.   //将sensorOut设置为输入
  28.   pinMode(sensorOut, INPUT)
  29.   // 将频率缩放设置为 20%
  30.   digitalWrite(S0, HIGH);
  31.   digitalWrite(S1, LOW);
  32.   // 开始串行通信
  33.   Serial.begin(9600);

  34. }
  35. void loop() {
  36.   // 设置要读取的 红色 (R) 过滤光电二极管
  37.   digitalWrite(S2, LOW);
  38.   digitalWrite(S3, LOW);

  39.   lcd.clear();
  40.   lcd.setCursor(0, 0);
  41.   lcd.print("R      G      B");

  42.   // 读取输出频率
  43.   redFrequency = pulseIn(sensorOut, LOW);

  44.   // 打印 红色 (R) 值
  45.   Serial.print("R = ");
  46.   Serial.print(redFrequency);
  47.   lcd.setCursor(0, 1);
  48.   lcd.print(redFrequency);
  49.   delay(100);

  50.   // 设置要读取的绿色 (G) 滤波光电二极管
  51.   digitalWrite(S2, HIGH);
  52.   digitalWrite(S3, HIGH);

  53.   // 读取输出频率
  54.   greenFrequency = pulseIn(sensorOut, LOW);

  55.   //打印绿色(G)值
  56.   Serial.print(" G = ");
  57.   Serial.print(greenFrequency);
  58.   lcd.setCursor(6, 1);
  59.   lcd.print(greenFrequency);
  60.   delay(100);

  61.   // 设置要读取的蓝色 (B) 过滤光电二极管
  62.   digitalWrite(S2, LOW);
  63.   digitalWrite(S3, HIGH);

  64.   // 读取输出频率
  65.   blueFrequency = pulseIn(sensorOut, LOW);

  66.   // 打印蓝色 (B) 值
  67.   Serial.print(" B = ");
  68.   Serial.println(blueFrequency);
  69.   lcd.setCursor(13, 1);
  70.   lcd.print(blueFrequency);
  71.   delay(100);
  72. }
复制代码


 楼主| 发表于 2022-4-19 07:59 | 显示全部楼层
(2)实验串口返回情况

5.14-47.jpg

 楼主| 发表于 2022-4-19 08:01 | 显示全部楼层
3)打开Arduino IDE——工具——串口绘图器,查看实验波形
实验串口绘图器返回情况

5.14-48.jpg

 楼主| 发表于 2022-4-19 08:02 | 显示全部楼层
4)实验场景图
5.14-49.jpg

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-11-29 23:54 , Processed in 0.071960 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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