TCS34725颜色感应识别模块

news/2024/5/5 0:06:26/文章来源:https://blog.csdn.net/qq_42250136/article/details/125705450

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保留,无需连接,建议悬空
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; }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15250.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java入门基础知识

Java入门基础知识概念 关键字:具有特殊用途的单词。 保留字:未使用的关键字(goto const)。 直接量:不可用作标识符(ture false null)。 一、JAVA运行机制 Java程序的运行必须经过编写、编译、运行三个步骤。 编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名…

教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity

以前写过一篇&#xff1a;Unity - RenderDoc 抓帧导出 FBX&#xff08;带UV&#xff09; 吐槽 我估计GPA是怕收律师函&#xff0c;因为如果 GPA 将所有资源一键提取&#xff0c;一键导出&#xff0c;那么可能很多开发商会告他 可以看到也好几个帖子问 GPA 官方&#xff0c;都…

【PDN仿真笔记3-电容布局Q3D模型搭建】

PDN仿真笔记3-电容布局Q3D模型搭建 1. 叠层参数及设计要求 2. 变量设置 根据设计要求&#xff0c;将各个参数设置为变量&#xff0c;通过Add添加变量名称及数值&#xff08;下图value应该为1.2mil&#xff09; 部分设置完成的变量 3.搭建平面 引用2节中设置的变量&#xf…

检测网络框架越来越多

搬运工又来了 之前也发过相关 在汇总说一下啊~~ yolo也不在孤单了~~ 出了一大堆了~~ 之前都一一发过 今天在来个大汇总 目标检测是现在最热门的研究课题&#xff0c;也一直是工业界重点研究的对象&#xff0c;最近几年内&#xff0c;也出现了各种各样的检测框架&#xff0c…

PHP第三方易宝支付对接

简言&#xff1a; 最近手头有个数字藏品的项目&#xff0c;需要对接第三方易宝支付&#xff0c;在此整理自己的对接经验&#xff0c;希望对大家有所帮助。 步骤 1&#xff0c;下载sdk PHP第三方支付易宝支付最新sdk包&#xff0c;其中包含回调。-PHP文档类资源-CSDN下载 2&…

树形DP

285. 没有上司的舞会 - AcWing题库 题意是给你每个人的开心值&#xff0c;和每个人的顶头上司&#xff0c;如果每个人与自己的顶头上司不会同时去的前提下&#xff0c;问你最大的开心值是多少 树形dp 注释写在代码下面啦~ #include<iostream> #include<cstring>…

ThinkPHP6.0开启多应用模式的方法

ThinkPHP发展至今已经到了6..0.X版本,整个结构较thinkphp5有了很大的变化,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级(官方给出了升…

3_1 操作系统

3.01 操作系统概述 接口的区分&#xff1a; 人机之间的接口&#xff1a;命令&#xff0c;窗口应用软件与硬件之间的接口&#xff1a;api的接口 进程管理 3.02 进程管理——进程状态转换图 进程的状态&#xff1a;操作系统当中对进程进行管理的时候&#xff0c;为进程指定了几种…

一个项目的整个流程

1.基本配置 基础配置包括 1.Vuex------------作用:存储公共的数据 2.Vue-router---------作用:配置页面的映射关系 3.node_modules--------作用:包的管理工具 npm i 包的名字 4.vue.config.js-----------配置一些信息 例如配置跨域的问题 5.assets 放一些静态的资源…

JAVA毕设项目酒店员工管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目酒店员工管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

DoIP协议:通用DoIP首部否定确认码02和03的区别

通用DoIP首部否定确认消息 当外部测试设备(诊断仪)发送DoIP消息给DoIP实体时,DoIP实体的传输层把DoIP消息(传输层payload,即DoIP header + DoIP payload)上发给DoIP协议层。DoIP协议层取到数据后,不管它是什么类型的DoIP消息,首先都需要被DoIP通用首部处理程序按照规定…

【统计学习|书籍阅读】第六章 logistics回国和最大熵模型 p77-p88

文章目录思路logistic回归模型最大熵模型最大熵模型定义最大熵模型的学习极大似然估计模型学习的最优化算法思路 logistic 回归是统计学习的经典分类方法。最大熵是概率模型学习的一个准则&#xff0c;将其推广到分类问题得到最大熵模型。 logistic回归模型 logistic分布&am…

# 二叉树和线索二叉树相关问题v1

文章目录二叉树和线索二叉树相关问题v1遍历算法遍历顺序分类遍历要点核心递归方式非递归方式线索二叉树二叉树vs线索二叉树(逻辑结构OR存储结构)线索二叉树的空指针剩余问题线索二叉树的遍历二叉树和线索二叉树相关问题v1 遍历算法 pre (NLR)A{B(DHI)(EJK)}{C(FLM)(GNO)}:∠\a…

【云原生 • Kubernetes】配置管理 - Secret ConfigMap

本文导读一、机密配置抽象 Secret1. 认识 Secret2. Secret 的使用(1) 创建 Secret 加密数据(2) 将 Secret 以变量形式挂载到 pod 容器二、配置抽象 ConfigMap1. 认识 ConfigMap2. ConfigMap 的使用(1) 创建配置文件(2) 创建 ConfigMap(3) 将 ConfigMap 以变量形式挂载到 pod 容…

如何保存el-pagination组件的分页状态。

一文细解如何保存组件的分页状态。 文章目录一文细解如何保存组件的分页状态。背景一、实现原理二、代码展示1.分页组件模板背景 使用element-plus的分页组件搭建页面的时候&#xff0c;经常会出现这样一种情况&#xff1a;分页为列表页&#xff0c;当从列表页点击某一项进入详…

HTTP协议4)----对于数据链路层的详细讲解

꧁ 大家好&#xff0c;我是 兔7 &#xff0c;一位努力学习C的博主~ ꧂ ☙ 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步❧ &#x1f680; 如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~&#x1f4ac; &…

Springboot2.x仿B站项目第五章查询Es和内容推荐功能实现笔记及源码

文章目录系统全局模块的开发1.系统全文搜索1.1docker 下安装ES以及kibana1.2 配置Es的相关的yaml和configuration1.3 ES全文检索需求视频投稿搜索查询2.观看记录的统计2.1观看视频的添加信息2.2查询观看记录3.用户视频推荐4.视频弹幕遮罩其他章节系统全局模块的开发 本章主要实…

嵌入式分享合集67

一、CAN的接口保护电路 在一个模块上&#xff0c;由于是中转的CAN&#xff0c;需要从两个不同的连接器上连接出去&#xff08;这种情况是根据客户的需求而定的&#xff09;。 一般的设计如图&#xff1a; 一般的&#xff0c;我们最多使用两个电压斜坡控制电容&#xff08;C2和…

Windows如何生成公钥和私钥

Windows如何生成公钥和私钥 方法一)使用git命令 一. 首先安装git二. 桌面上右键 Git Bash Here三. 命令ssh-keygen -t rsa然后 一直enter 四. 将公钥放到服务器上就可以使用SSH链接了. 方法二)使用openssl生成公钥和私钥 参考链接:https://blog.csdn.net/cduoa/article/deta…

组播路由协议——PIM DM工作机制

目录 扩散、剪枝机制 嫁接机制 状态刷新机制 断言机制 采用“推&#xff08;Push&#xff09;”的方式转发组播报文并生成组播表&#xff0c;建立SPT&#xff08;最短路径树&#xff09;转发组播报文。它假定每条链路都有接收者&#xff0c;在每条链路上都直接推送组播流量…