TCS34725 Color Sensing and Recognition Module

TCS34725颜色感应识别模块

  • 前言
  • 一、模块介绍
  • 二、产品参数
  • 三、实物图
  • 四、模块引脚介绍
  • 五、使用说明
  • 工作模式的选择
  • 上位机界面说明
  • 六、实例应用
  • 实物接线
  • 所用代码
  • 前言

    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 保留,无需连接,建议悬空
    INT TCS34725颜色芯片中断 S1=0 (接GND时启用)
    SDA TCS34725颜色芯片数据线 S1=0 (接GND时启用)
    SCL TCS34725颜色芯片时钟线 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; 
      }
    }
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » TCS34725 Color Sensing and Recognition Module

    发表回复