0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCS34725颜色感应识别模块

jf_88434166 来源:jf_88434166 作者:jf_88434166 2026-01-13 09:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

TCS34725传感器模块,使用IIC或者UART通信,可直接输出RGB值。
能当做单纯的简单TCS34725模块使用,还能用内部MCU读取TCS34725数据,MCU计算后直接输出RGB,内部白平衡程序。


一、模块介绍

TCS34725是一款低成本颜色识别传感器模块。有功耗小,体积小,安装方便的优势。
工作原理是,通过照明LED发光,照射到被测物体后,返回光经过滤镜检测RGB的比例值,根据RGB的比例值识别出颜色。
模块具有两种方式读取数据,即串口UART(TTL电平)或者IIC(2线),串口的波特率有9600bps与115200bps可配置,有连续、询问输出两种方式还能掉电保存设置。
还可以进行简单的7种颜色识别,不需要计算RGB值。能适应不同的工作环境,与单片机电脑连接。
模块另外可以设置单独传感器芯片工作模式,作为简单传感器模块,MCU不参与数据处理工作。

二、产品参数

名称参数
测量范围RGB 0-255
响应频率10HZ
工作电压3~5V(DC
工作电流15mA
工作温度-20~85℃
传感器芯片TCS34725

三、实物图

在这里插入图片描述

四、模块引脚介绍

引脚名称功能作用
VCC电源输入+(3-5V)
CT串口UART_TX / IIC_SCL
DR串口UART_RX / IIC_SDA
GND电源输出(地)
NC保留,无需连接,建议悬空
INTTCS34725颜色芯片中断 S1=0 (接GND时启用)
SDATCS34725颜色芯片数据线 S1=0 (接GND时启用)
SCLTCS34725颜色芯片时钟线 S1=0 (接GND时启用)
S0串口 / MCU_IIC模式选择
S1仅使用传感器芯片(IIC)模式选择

相信很多人没看懂s0和s1这个两个引脚的作用。别急,我们留到使用说明时再详细讲解。

五、使用说明

工作模式的选择

TCS34725模块为串口和IIC输出模块,其默认为串口模式。
模块左边的S0引脚处于断开状态则为 串口模式
模块左边的 S0引脚接GND ,模块进入 IIC模式
将模块右边的 S1引脚接GND ,模块进入仅用 传感器芯片 (IIC)模式。

串口模式下,使用该模块配套的上位机可方便的对模块进行相应的设置,上位机command框对应模块串口的command 寄存器,在相应位置 1,然后点右下角的“发送”按钮,即对模块进行了设置,模块将向外发送相应数据,数据将显示在左侧对应的方框中。
MCU_IIC 通信模式下,通信时钟需在 40Khz~200Khz 之间,通过读取相应寄存器即可,全部数据读取间隔应小于 10hz;
IIC 对模块的配置支持“LED 亮度调节”、“白平衡校准”。
仅用传感器芯片模式下,模块的 MCU 不对颜色芯片进行设置和读取,用户还可通过串口或 IIC 控制模块的 LED 亮度等级。可用INT、SCL、SDA 引脚直接控制颜色芯片

上位机界面说明

在这里插入图片描述

六、实例应用

本次选用IIC通信模式,使用Arduino UNOR3开发板进行测试

实物接线

在这里插入图片描述

所用代码

主程序:

#include < i2cmaster.h >

/////////////////////////////////
/*
GY-33-----pro mini 5v 16m
VCC----VCC
CT----A5
DR----A4
GND--GND
S0---GND
*/
/////////////////////////////////
////////////////////////////////
/*
uart 
send 'b'-----Calibration GY-33
send 'a'-----GY33 send data
*/
//////////////////////////////////
#define uint16_t unsigned int
typedef struct
{
    uint16_t Red;
    uint16_t Green;
    uint16_t Blue;
    uint16_t Clear;
} RGB;
unsigned char Re_buf;
unsigned char sign=0;
RGB rgb;
uint16_t CT=0,Lux=0;
byte color=0,rgb_data[3]={0};

void setup() {
       Serial.begin(115200);
       i2c_init();
        delay(1); 
}
void loop() {
  unsigned char data[9]={0};
 if(!sign)
 {
   iic_read(0x00,data,8);
   rgb.Red=(data[0]< < 8)|data[1];
   rgb.Green=(data[2]< < 8)|data[3];
   rgb.Blue=(data[4]< < 8)|data[5];
   rgb.Clear=(data[6]< < 8)|data[7];
    Serial.print("Red: ");
   Serial.print(rgb.Red);
   Serial.print(",Green: ");
   Serial.print( rgb.Green);
    Serial.print(",Blue");
    Serial.print( rgb.Blue);
     Serial.print(",Clear");
    Serial.println(rgb.Clear);
    iic_read(0x08,data,4);
     Lux=(data[0]< < 8)|data[1];
     CT=(data[2]< < 8)|data[3];
   
    Serial.print("CT:");
    Serial.print(CT);
    Serial.print(",Lux:");
    Serial.println( Lux);
     iic_read(0x0c,data,3);
    rgb_data[0]=data[0];
    rgb_data[1]=data[1];
    rgb_data[2]=data[2];
    Serial.print("r:");
    Serial.print( rgb_data[0]);
    Serial.print(",g:"); 
    Serial.print( rgb_data[1]);
    Serial.print(",b:"); 
    Serial.println( rgb_data[2]);
     iic_read(0x0f,data,1); 
     color=data[0];
     Serial.print(",color:"); 
    Serial.println( color,HEX);
 }
 if(sign==1)
 {
   iic_read(0x10,&data[8],1);
   i2c_start_wait(0xb4);
    i2c_write(0x10);
    i2c_write(0x31);
   // i2c_write((data[8]|0x01));
    i2c_stop();
    sign=3;
 }
   delay(200); 
}
void iic_read(unsigned char add,unsigned char *data,unsigned char len)
{
  i2c_start_wait(0xb4);
   i2c_write(add);
   i2c_start_wait(0xb5);
   while(len-1)
   {
    *data++=i2c_readAck();
    len--;
    }
    *data=i2c_readNak();
    i2c_stop();
}
void serialEvent() {
  while (Serial.available()) {   
    Re_buf=(unsigned char)Serial.read();
   if (Re_buf=='a')
       sign=0;
    if (Re_buf=='b')    
       sign=1; 
      Re_buf=0; 
  }
}
#include < i2cmaster.h >
/////////////////////////////////
/*
GY-33-----pro mini 5v 16m
VCC----VCC
CT----A5
DR----A4
GND--GND
S0---GND
*/
/////////////////////////////////
////////////////////////////////
/*
uart 
send 'b'-----Calibration GY-33
send 'a'-----GY33 send data
*/
//////////////////////////////////
#define uint16_t unsigned int
typedef struct
{
    uint16_t Red;
    uint16_t Green;
    uint16_t Blue;
    uint16_t Clear;
} RGB;
unsigned char Re_buf;
unsigned char sign=0;
RGB rgb;
uint16_t CT=0,Lux=0;
byte color=0,rgb_data[3]={0};

void setup() {
       Serial.begin(115200);
       i2c_init();
        delay(1); 
}
void loop() {
  unsigned char data[9]={0};
 if(!sign)
 {
   iic_read(0x00,data,8);
   rgb.Red=(data[0]< < 8)|data[1];
   rgb.Green=(data[2]< < 8)|data[3];
   rgb.Blue=(data[4]< < 8)|data[5];
   rgb.Clear=(data[6]< < 8)|data[7];
    Serial.print("Red: ");
   Serial.print(rgb.Red);
   Serial.print(",Green: ");
   Serial.print( rgb.Green);
    Serial.print(",Blue");
    Serial.print( rgb.Blue);
     Serial.print(",Clear");
    Serial.println(rgb.Clear);
    iic_read(0x08,data,4);
     Lux=(data[0]< < 8)|data[1];
     CT=(data[2]< < 8)|data[3];
   
    Serial.print("CT:");
    Serial.print(CT);
    Serial.print(",Lux:");
    Serial.println( Lux);
     iic_read(0x0c,data,3);
    rgb_data[0]=data[0];
    rgb_data[1]=data[1];
    rgb_data[2]=data[2];
    Serial.print("r:");
    Serial.print( rgb_data[0]);
    Serial.print(",g:"); 
    Serial.print( rgb_data[1]);
    Serial.print(",b:"); 
    Serial.println( rgb_data[2]);
     iic_read(0x0f,data,1); 
     color=data[0];
     Serial.print(",color:"); 
    Serial.println( color,HEX);
 }
 if(sign==1)
 {
   iic_read(0x10,&data[8],1);
   i2c_start_wait(0xb4);
    i2c_write(0x10);
    i2c_write(0x31);
   // i2c_write((data[8]|0x01));
    i2c_stop();
    sign=3;
 }
   delay(200); 
}
void iic_read(unsigned char add,unsigned char *data,unsigned char len)
{
  i2c_start_wait(0xb4);
   i2c_write(add);
   i2c_start_wait(0xb5);
   while(len-1)
   {
    *data++=i2c_readAck();
    len--;
    }
    *data=i2c_readNak();
    i2c_stop();
}
void serialEvent() {
  while (Serial.available()) {   
    Re_buf=(unsigned char)Serial.read();
   if (Re_buf=='a')
       sign=0;
    if (Re_buf=='b')    
       sign=1; 
      Re_buf=0; 
  }
}

i2cmaster.h

#include < i2cmaster.h >
/////////////////////////////////
/*
GY-33-----pro mini 5v 16m
VCC----VCC
CT----A5
DR----A4
GND--GND
S0---GND
*/
/////////////////////////////////
////////////////////////////////
/*
uart 
send 'b'-----Calibration GY-33
send 'a'-----GY33 send data
*/
//////////////////////////////////
#define uint16_t unsigned int
typedef struct
{
    uint16_t Red;
    uint16_t Green;
    uint16_t Blue;
    uint16_t Clear;
} RGB;
unsigned char Re_buf;
unsigned char sign=0;
RGB rgb;
uint16_t CT=0,Lux=0;
byte color=0,rgb_data[3]={0};

void setup() {
       Serial.begin(115200);
       i2c_init();
        delay(1); 
}
void loop() {
  unsigned char data[9]={0};
 if(!sign)
 {
   iic_read(0x00,data,8);
   rgb.Red=(data[0]< < 8)|data[1];
   rgb.Green=(data[2]< < 8)|data[3];
   rgb.Blue=(data[4]< < 8)|data[5];
   rgb.Clear=(data[6]< < 8)|data[7];
    Serial.print("Red: ");
   Serial.print(rgb.Red);
   Serial.print(",Green: ");
   Serial.print( rgb.Green);
    Serial.print(",Blue");
    Serial.print( rgb.Blue);
     Serial.print(",Clear");
    Serial.println(rgb.Clear);
    iic_read(0x08,data,4);
     Lux=(data[0]< < 8)|data[1];
     CT=(data[2]< < 8)|data[3];
   
    Serial.print("CT:");
    Serial.print(CT);
    Serial.print(",Lux:");
    Serial.println( Lux);
     iic_read(0x0c,data,3);
    rgb_data[0]=data[0];
    rgb_data[1]=data[1];
    rgb_data[2]=data[2];
    Serial.print("r:");
    Serial.print( rgb_data[0]);
    Serial.print(",g:"); 
    Serial.print( rgb_data[1]);
    Serial.print(",b:"); 
    Serial.println( rgb_data[2]);
     iic_read(0x0f,data,1); 
     color=data[0];
     Serial.print(",color:"); 
    Serial.println( color,HEX);
 }
 if(sign==1)
 {
   iic_read(0x10,&data[8],1);
   i2c_start_wait(0xb4);
    i2c_write(0x10);
    i2c_write(0x31);
   // i2c_write((data[8]|0x01));
    i2c_stop();
    sign=3;
 }
   delay(200); 
}
void iic_read(unsigned char add,unsigned char *data,unsigned char len)
{
  i2c_start_wait(0xb4);
   i2c_write(add);
   i2c_start_wait(0xb5);
   while(len-1)
   {
    *data++=i2c_readAck();
    len--;
    }
    *data=i2c_readNak();
    i2c_stop();
}
void serialEvent() {
  while (Serial.available()) {   
    Re_buf=(unsigned char)Serial.read();
   if (Re_buf=='a')
       sign=0;
    if (Re_buf=='b')    
       sign=1; 
      Re_buf=0; 
  }
}
#include < i2cmaster.h >
/////////////////////////////////
/*
GY-33-----pro mini 5v 16m
VCC----VCC
CT----A5
DR----A4
GND--GND
S0---GND
*/
/////////////////////////////////
////////////////////////////////
/*
uart 
send 'b'-----Calibration GY-33
send 'a'-----GY33 send data
*/
//////////////////////////////////
#define uint16_t unsigned int
typedef struct
{
    uint16_t Red;
    uint16_t Green;
    uint16_t Blue;
    uint16_t Clear;
} RGB;
unsigned char Re_buf;
unsigned char sign=0;
RGB rgb;
uint16_t CT=0,Lux=0;
byte color=0,rgb_data[3]={0};

void setup() {
       Serial.begin(115200);
       i2c_init();
        delay(1); 
}
void loop() {
  unsigned char data[9]={0};
 if(!sign)
 {
   iic_read(0x00,data,8);
   rgb.Red=(data[0]< < 8)|data[1];
   rgb.Green=(data[2]< < 8)|data[3];
   rgb.Blue=(data[4]< < 8)|data[5];
   rgb.Clear=(data[6]< < 8)|data[7];
    Serial.print("Red: ");
   Serial.print(rgb.Red);
   Serial.print(",Green: ");
   Serial.print( rgb.Green);
    Serial.print(",Blue");
    Serial.print( rgb.Blue);
     Serial.print(",Clear");
    Serial.println(rgb.Clear);
    iic_read(0x08,data,4);
     Lux=(data[0]< < 8)|data[1];
     CT=(data[2]< < 8)|data[3];
   
    Serial.print("CT:");
    Serial.print(CT);
    Serial.print(",Lux:");
    Serial.println( Lux);
     iic_read(0x0c,data,3);
    rgb_data[0]=data[0];
    rgb_data[1]=data[1];
    rgb_data[2]=data[2];
    Serial.print("r:");
    Serial.print( rgb_data[0]);
    Serial.print(",g:"); 
    Serial.print( rgb_data[1]);
    Serial.print(",b:"); 
    Serial.println( rgb_data[2]);
     iic_read(0x0f,data,1); 
     color=data[0];
     Serial.print(",color:"); 
    Serial.println( color,HEX);
 }
 if(sign==1)
 {
   iic_read(0x10,&data[8],1);
   i2c_start_wait(0xb4);
    i2c_write(0x10);
    i2c_write(0x31);
   // i2c_write((data[8]|0x01));
    i2c_stop();
    sign=3;
 }
   delay(200); 
}
void iic_read(unsigned char add,unsigned char *data,unsigned char len)
{
  i2c_start_wait(0xb4);
   i2c_write(add);
   i2c_start_wait(0xb5);
   while(len-1)
   {
    *data++=i2c_readAck();
    len--;
    }
    *data=i2c_readNak();
    i2c_stop();
}
void serialEvent() {
  while (Serial.available()) {   
    Re_buf=(unsigned char)Serial.read();
   if (Re_buf=='a')
       sign=0;
    if (Re_buf=='b')    
       sign=1; 
      Re_buf=0; 
  }
}
#include < i2cmaster.h >
/////////////////////////////////
/*
GY-33-----pro mini 5v 16m
VCC----VCC
CT----A5
DR----A4
GND--GND
S0---GND
*/
/////////////////////////////////
////////////////////////////////
/*
uart 
send 'b'-----Calibration GY-33
send 'a'-----GY33 send data
*/
//////////////////////////////////
#define uint16_t unsigned int
typedef struct
{
    uint16_t Red;
    uint16_t Green;
    uint16_t Blue;
    uint16_t Clear;
} RGB;
unsigned char Re_buf;
unsigned char sign=0;
RGB rgb;
uint16_t CT=0,Lux=0;
byte color=0,rgb_data[3]={0};

void setup() {
       Serial.begin(115200);
       i2c_init();
        delay(1); 
}
void loop() {
  unsigned char data[9]={0};
 if(!sign)
 {
   iic_read(0x00,data,8);
   rgb.Red=(data[0]< < 8)|data[1];
   rgb.Green=(data[2]< < 8)|data[3];
   rgb.Blue=(data[4]< < 8)|data[5];
   rgb.Clear=(data[6]< < 8)|data[7];
    Serial.print("Red: ");
   Serial.print(rgb.Red);
   Serial.print(",Green: ");
   Serial.print( rgb.Green);
    Serial.print(",Blue");
    Serial.print( rgb.Blue);
     Serial.print(",Clear");
    Serial.println(rgb.Clear);
    iic_read(0x08,data,4);
     Lux=(data[0]< < 8)|data[1];
     CT=(data[2]< < 8)|data[3];
   
    Serial.print("CT:");
    Serial.print(CT);
    Serial.print(",Lux:");
    Serial.println( Lux);
     iic_read(0x0c,data,3);
    rgb_data[0]=data[0];
    rgb_data[1]=data[1];
    rgb_data[2]=data[2];
    Serial.print("r:");
    Serial.print( rgb_data[0]);
    Serial.print(",g:"); 
    Serial.print( rgb_data[1]);
    Serial.print(",b:"); 
    Serial.println( rgb_data[2]);
     iic_read(0x0f,data,1); 
     color=data[0];
     Serial.print(",color:"); 
    Serial.println( color,HEX);
 }
 if(sign==1)
 {
   iic_read(0x10,&data[8],1);
   i2c_start_wait(0xb4);
    i2c_write(0x10);
    i2c_write(0x31);
   // i2c_write((data[8]|0x01));
    i2c_stop();
    sign=3;
 }
   delay(200); 
}
void iic_read(unsigned char add,unsigned char *data,unsigned char len)
{
  i2c_start_wait(0xb4);
   i2c_write(add);
   i2c_start_wait(0xb5);
   while(len-1)
   {
    *data++=i2c_readAck();
    len--;
    }
    *data=i2c_readNak();
    i2c_stop();
}
void serialEvent() {
  while (Serial.available()) {   
    Re_buf=(unsigned char)Serial.read();
   if (Re_buf=='a')
       sign=0;
    if (Re_buf=='b')    
       sign=1; 
      Re_buf=0; 
  }
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2578

    文章

    55756

    浏览量

    795039
  • 单片机
    +关注

    关注

    6078

    文章

    45618

    浏览量

    674992
  • Arduino
    +关注

    关注

    191

    文章

    6533

    浏览量

    197612
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问颜色传感器GY-33 TCS34725TCS3200有什么区别?

    请教颜色传感器GY-33 TCS34725TCS3200的具体区别?哪种用于检测透明瓶中液体颜色更好?有没有做过相关实验的朋友,希望大家给出点建议,非常感谢。
    发表于 03-26 07:17

    单片机读取tcs34725三原色的值用数码管显示但读出的数都上千?

    大神们您好,我现在正在研究用单片机读取tcs34725三原色的值用数码管显示,也不知道是通讯的问题还是什么,读出的数都上千,读三原色的值需要什么处理吗,不是直接从寄存器里读出来就行吗,到底它是什么工作模式
    发表于 03-06 00:13

    怎样去设计一种基于TCS3472XFN的通信颜色识别传感器模块

    基于TCS3472XFN的通信颜色识别传感器模块有何优点?怎样去设计一种基于TCS3472XFN的通信
    发表于 09-23 08:59

    介绍单片机如何使用TCS3200颜色识别传感器

    文章目录1 简介2 TCS34725特征2.1 红色、绿色、蓝色 (RGB)2.2 可屏蔽中断2.3 电源管理2.4 2C 快速模式兼容接口2.5 寄存器组和引脚兼容3 TCS3472工作原理常用
    发表于 01-07 08:23

    颜色识别传感器TCS34725概述

    关注、星标嵌入式云IOT技术圈,精彩及时送达我买来做颜色识别传感器的模块TCS34725,如下图所示(相关资料和本文demo请滑到文末通过clone我的码云仓库链接获取):我买的是如
    发表于 01-17 06:34

    TCS34725 RGB颜色识别传感器基础知识详解

    1、TCS34725 RGB颜色识别传感器详解rt-thread是什么?  RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,组件完整丰富、高度可伸缩
    发表于 08-23 17:14

    如何使用ESP8266和TAOS TCS23的颜色识别板?

    我设法使用 ESP8266 和 TAOS TCS230 颜色识别模块实现了颜色识别板。我必须采取
    发表于 05-24 08:46

    微雪电子TCS34725颜色传感器简介

    TCS34725颜色传感器模块 I2C接口 内置ADC 高灵敏度 输出RGB 型号 TCS34725 Color Sensor
    的头像 发表于 01-06 08:59 2.5w次阅读
    微雪电子<b class='flag-5'>TCS34725</b><b class='flag-5'>颜色</b>传感器简介

    微雪电子颜色传感器简介

    TCS3200 颜色传感器 颜色感应 色彩识别模块 静态识别物体
    的头像 发表于 01-06 09:28 1938次阅读
    微雪电子<b class='flag-5'>颜色</b>传感器简介

    STM32CubeMX | | 使用小熊派玩转颜色识别传感器(纯手工打造E53传感器模块)

    关注、星标嵌入式云IOT技术圈,精彩及时送达我买来做颜色识别传感器的模块TCS34725,如下图所示(相关资料和本文demo请滑到文末通过clone我的码云仓库链接获取):我买的是如
    发表于 01-17 11:44 7次下载
    STM32CubeMX | | 使用小熊派玩转<b class='flag-5'>颜色</b><b class='flag-5'>识别</b>传感器(纯手工打造E53传感器<b class='flag-5'>模块</b>)

    颜色感应器能判别物体的有无吗?

    虽然颜色感应器可以精确地识别和测量物体的颜色,但对于判断物体是否存在仍存在一定的挑战。本文将解释颜色感应器的原理和工作方式,并探讨其在判断物体存在与否方面的限制。
    的头像 发表于 06-05 16:15 1671次阅读
    <b class='flag-5'>颜色感应</b>器能判别物体的有无吗?

    颜色感应器能判别物体的有无吗?

    虽然颜色感应器可以精确地识别和测量物体的颜色,但对于判断物体是否存在仍存在一定的挑战。本文将解释颜色感应器的原理和工作方式,并探讨其在判断物体存在与否方面的限制。
    的头像 发表于 06-26 12:01 1427次阅读
    <b class='flag-5'>颜色感应</b>器能判别物体的有无吗?

    基于CW32系列MCU的GY-33颜色识别模块设计

    GY-33是一种基于TCS34725颜色传感器的颜色识别模块TCS34725是一种高精度光学传
    的头像 发表于 09-27 13:51 3737次阅读
    基于CW32系列MCU的GY-33<b class='flag-5'>颜色</b><b class='flag-5'>识别</b><b class='flag-5'>模块</b>设计

    使用TCS3200模块进行颜色识别

    该项目用于检测颜色并使用TCS3200颜色传感器模块和Arduino板在LCD上显示颜色名称。传感器使用彩色光电二极管输出红色,绿色和蓝色的
    的头像 发表于 10-15 16:11 4492次阅读
    使用<b class='flag-5'>TCS</b>3200<b class='flag-5'>模块</b>进行<b class='flag-5'>颜色</b><b class='flag-5'>识别</b>

    【CW32模块使用】TCS34725颜色识别传感器

    模块是基于AMS的TCS3472XFN彩色光数字转换器为核心的颜色传感器,传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出。集成红外阻挡滤光片可最大限度地减少入射光的红外
    的头像 发表于 12-30 11:28 1567次阅读
    【CW32<b class='flag-5'>模块</b>使用】<b class='flag-5'>TCS34725</b><b class='flag-5'>颜色</b><b class='flag-5'>识别</b>传感器