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

共1条 1/1 1 跳转至页

TCS3472S传感器及其色彩检测 19

菜鸟
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 信号类型

4)I2C写时序:

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

image.png

图3 写时序

 5)I2C 读时序:

首先主机会发送一个开始信号,然后将其I2C的7位地址与写操作位组合成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 跳转至页

回复

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