这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » TCS3472S传感器及其色彩检测

共1条 1/1 1 跳转至

TCS3472S传感器及其色彩检测

菜鸟
2026-05-02 15:03:58     打赏

TCS34725是一款低成本颜色识别传感器模块,它具有功耗小、体积小、安装方便的特点,可提供红色、绿色、蓝色及光感应值的数字输出

该模块的工作原理是:通过传感器两侧的LED来照亮检测物体 ,当光线照射到检测物体后,通过反射被传感器所接收。在传感器内部,光线经过滤镜检测RGB的比例值,根据RGB的比例值即可识别出颜色。

image.png

1 色彩传感器模块

该感器模块是以I2C接口来传递数据,为此在检测过程中需要有微控器的参与才能完成检测任务。

对于I2C接口来说,它需要2条信号线来工作,即一条数据线和一条时钟线。

I2C总线在传送数据过程中,共有3种类型信号,即:开始信号、结束信号和应信号。

1)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

2)结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结传送数据。

3)应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据12C写时序。

image.png

2 信号类型

4I2C写时序:

首先主机会发送一个开始信号,然后将其I2C7位地址与写操作位组合成8位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信号,此次I2C写数据操作结束。

image.png

3 写时序

 5I2C 读时序:

首先主机会发送一个开始信号,然后将其I2C7位地址与写操作位组合成8位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机重新发送一个开始信号,并目将其7位地址和读操作位组合成8位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束。

image.png

4 读时序 

I2C 地址:I2C 设备地址为0X29注意:0X29这个设备地址是7位的,8位设备地址需要向高位移一位变成0X52 

为减轻设计的难度和原理,可选取Arduino IDE作为开发工具,因为它有丰富的函数库支持。

接下来的问题就是选取匹配的开发板,因为尽管有函数库的支持,但却并非对如何开发板都有效,为此这里选取的是Arduino UNO开发板。

image.png

5  UNO开发板 

色彩传感器与开发板的连接关系,见图6所示。

image.png

6 连接关系 

有了以上的准备工作,接下来就是下载相应的函数库作为支持,见图7所示。

image.png

image.png

7  相关内容 

解压后,需将其放置到安装Arduino目录下的libraries文件夹中。

实现色彩检测的程序为:

#include <Wire.h>
#include "Adafruit_TCS34725.h"

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);

void printColor() {
  // 传感器返回 R、G、B 值和 clear 值
  uint16_t clearcol, red, green, blue;
  float average, r, g, b;
  delay(100); // 颜色测量需要100ms
  tcs.getRawData(&red, &green, &blue, &clearcol);
  // 求RGB的平均值
  average = (red + green + blue) / 3;
  // 平均颜色值
  // 所有值现在都在 1 左右
  r = red / average;
  g = green / average;
  b = blue / average;
  // 尝试使用 r、g、b 值确定颜色。
  String rgbValue = "r " + String(r) + " g " + String(g) + " b " + String(b);
  Serial.print("rgbValue:\t");
  Serial.println(rgbValue);   
  Serial.print("Value:\t");
  Serial.println(average);
  Serial.print("R:\t"); 
  Serial.println(int(r*100)); 
  Serial.print("G:\t"); 
  Serial.println(int(g*100)); 
  Serial.print("B:\t"); 
  Serial.println(int(b*100)); 
  delay(10);
}

void setup(void) {
  Serial.begin(9600);
  if (tcs.begin()) {
       Serial.println("Found sensor");
  } 
  else 
  {
       Serial.println("No TCS34725 found ... check your connections");
       while (1);
  }
}

void loop(void) {
      printColor();
}

在完成器件连接的情况下,经程序上传其测试结果见图8至图15所示。

image.png

image.png

8 检测白纸色彩

image.png

image.png

9 检测红色卡纸

image.png

image.png

10 检测绿色卡纸

image.png

image.png

11 检测蓝色卡纸

image.png

image.png

12 检测橙色卡纸

image.png

image.png

13 检测浅褐色卡纸

image.png

image.png

14 检测浅蓝色卡纸

image.png

image.png

15 检测浅绿色卡纸

通过对数据的观察和分析,采集结果还是符合色彩变化的,只是红色的基准比较低一些。





关键词: TCS3472S传感器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]