【CW32】基于CW32的GY-33颜色识别模块的应用
GY-33是一种基于TCS34725颜色传感器的颜色识别模块。TCS34725是一种高精度光学传感器,能够检测红、绿、蓝三个基本色的光谱信息,从而实现对物体颜色的准确识别,该模块的具体应用场景包括以下几个方面:
(1)电子设备颜色校准:在电子设备制造过程中,颜色一致性非常重要。使用GY-33模块可以帮助制造商检测和校准电子设备的颜色,确保不同设备之间的颜色表现一致。
(2)色彩分析和精确匹配:GY-33模块在颜色分析和匹配方面有广泛应用。例如,在印刷行业中,可以使用该模块来检测和匹配颜色样本,从而确保印刷品的准确颜色表现。
(3)机器人视觉系统:GY-33模块可以用于机器人视觉系统,帮助机器人在环境中对不同颜色的物体进行识别和分类。这在物流、仓储和自动导航系统中非常有用,机器人可以根据物体的颜色属性执行相应的任务。
例程资料链接如下:
BD网盘链接:
https://pan.baidu.com/s/1B1Fa4GhmScSGR6VQNDsE3w
提取码:855c
二、所需物料
本实验使用到了CW32F030C8小蓝板、GY-33颜色识别模块、0.96寸OLED显示屏,RGB全彩LED模块、轻触开关模块及Keil5开发环境。
【GY-33与单片机连线】:
VCC<-->+3.3V
GND<-->GND
DR<-->PA5
CT<-->PA4
【LED与单片机连线】:
V<-->+3.3V
R<-->PA0
G<-->PA1
B<-->PA2
【轻触开关与单片机连线】:
VCC<-->+3.3V
GND<-->GND
OUT<-->PB9
此模块有两种方式读取数据,即串口UART或者 MCU_IIC,本次实验采用MCU_IIC的方式。
有简单的7种颜色识别,单片机不参与数据处理工作,不需要计算RGB值,直接读取吧 数据即可。需要特别注意的是:
三、核心代码
main.c:
#include "main.h"
#include "RGB.h"
#include "GTIM.h"#include "Delay.h"
#include "GY_33.h"
#include "OLED.h"
#include "Key.h"
#include "BTIM.h"
#define LENGTH 3 //读取数据的长度
uint8_t press_flag=0; //按键按下标识
uint8_t data[LENGTH]={0}; //存放读取到的RGB数据
uint8_t color[1]={0}; //存放模块识别到的颜色数据
char *str[]={"blue","dblue","green","black","white","pink","yellow","red"};//模块可以识别到的颜色
int main()
{
uint8_t i;
OLED_Init(); //OLED显示
RGB_GPIO_Init(); //RGB灯GPIO初始化
GTIM2_Init(); //GTIM2初始化配置为PWM输出模式
I2C_GPIO_Init(); //GY-33模块GPIO初始化
Key_GPIO_Init(); //按键GPIO初始化
BTIM_Init(); //BTIM定时器初始化,定时控制按键扫描周期
// WriteData(GY33_ADDR,Config,0x51); //启动白平衡,等级亮度为5
while(1)
{
if(press_flag==1) //若按键标识已打开,代表有按键按下,执行按键功能
{
OLED_Clear(); //清屏
if(ReadData(GY33_ADDR,R,data,LENGTH)) //读取模块检测颜色并进行处理后返回的RGB值
{
OLED_ShowString(1,1,"RGB:");
OLED_ShowNum(1,5,data[0],3); //R值
OLED_ShowNum(2,5,data[1],3); //G值
OLED_ShowNum(3,5,data[2],3); //B值
}
RGB_Running(data); //RGB全彩LED灯根据读取到的RGB进行显示
Delay_ms(100); //数据读取间隔应不小于100ms
if(ReadData(GY33_ADDR,Color,color,1))//读取模块检测颜色并进行处理后的颜色信息返回值
{
for(i=0;i<8;i++) //8-bits数据,逐位判断
{
if((color[0]>>i)==1) //判断哪一位为1
{
OLED_ShowString(4,1,"Color:");
OLED_ShowString(4,7,str[7-i]); //显示对应颜色
break;
}
}
}
press_flag=0; //执行完关闭按键标识
}
}
}
void BTIM1_IRQHandler(void) //BTIM1中断服务函数
{
static unsigned int cnt = 0;
if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV))
{
if(++cnt>=20) //20ms定时,执行一次按键扫描
{
cnt = 0;
if(Key_Scan()==1) //返回值不为0时
press_flag=1; //打开按键标识
}
BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); //清除标志位 }}
GY-33.c:
#include "main.h"
#include "Delay.h"
#include "GY_33.h"
void I2C_GPIO_Init(void) //GY-33颜色识别模块GPIO初始化
{
__RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.IT=GPIO_IT_NONE;
GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_OD; //开漏输出
GPIO_InitStruct.Pins=GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOA, &GPIO_InitStruct); SCL(1); SDA(1);
}
void I2C_Delay() //I2C延时函数{ Delay_us(time);}
uint8_t I2C_Start(void) //发送起始信号
{
SDA(1);
SCL(1);
I2C_Delay();
if(ReadSDA==0)
return 0;
SDA(0);
I2C_Delay();
if(ReadSDA==1)
return 0; SCL(0);
I2C_Delay();
return 1;
}
void I2C_Stop(void) //发送停止信号
{
SDA(0);
SCL(0);
I2C_Delay();
SCL(1);
I2C_Delay();
SDA(1);}
void I2C_SendACK(uint8_t ackbit) //发送应答
{
SDA(ackbit);
SCL(1);
I2C_Delay();
SCL(0);
I2C_Delay();
}
void I2C_SendByte(uint8_t Byte) //发送1字节(8-bit)的数据
{
uint8_t i;
SCL(0);
for (i = 0; i < 8; i++)
{
if(Byte&0x80) SDA(1);
else
SDA(0);
SCL(1);
I2C_Delay();
SCL(0);
Byte<<=1;
I2C_Delay();
}
}
uint8_t I2C_ReceiveByte(void) //接收1字节(8-bit)的数据
{
uint8_t data,i;
SDA(1);
Delay_us(1);
for(i=0;i<8;i++)
{
SCL(1);
data<<=1;
if(ReadSDA==1)
data|=0x01;
I2C_Delay();
SCL(0);
I2C_Delay();
}
return data;
}
uint8_t I2C_WaitAck(void) //等待应答
{
uint16_t i;
SDA(1);
SCL(1);
while(ReadSDA==1)
{
if(++i==500)
break;
}
if(ReadSDA==1)
{
SCL(0);
return 0;
}
I2C_Delay();
SCL(0);
I2C_Delay();
return 1;
}
uint8_t WriteData(uint8_t Slave_Addr,uint8_t REG_Addr,uint8_t data) //写操作
{
if(I2C_Start()==0)
RETURN I2C_SendByte(Slave_Addr);
if(I2C_WaitAck()==0) RETURN I2C_SendByte(REG_Addr);
if(I2C_WaitAck()==0) RETURN I2C_SendByte(data);
if(I2C_WaitAck()==0) RETURN I2C_Stop(); //发送停止信号 return 1;}
uint8_t ReadData(uint8_t Slave_Addr,uint8_t REG_Addr,uint8_t *data,uint8_t length) //读操作
{
if(I2C_Start()==0) RETURN
I2C_SendByte(Slave_Addr);
if(I2C_WaitAck()==0) RETURN
I2C_SendByte(REG_Addr);
if(I2C_WaitAck()==0) RETURN if(I2C_Start()==0) RETURN I2C_SendByte(Slave_Addr+1);
if(I2C_WaitAck()==0) RETURN
while(--length){ *data++=I2C_ReceiveByte();
I2C_SendACK(0);
Delay_ms(110);
}
*data=I2C_ReceiveByte();
I2C_SendACK(1);
I2C_Stop(); //发送停止信号
return 1;
}
四、实物展示+效果演示
- |
- +1 赞 0
- 收藏
- 评论 0
本文由咪猫转载自CW32生态社区公众号,原文标题为:【CW32】基于CW32的GY-33颜色识别模块的应用,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
M0+产品行业新标杆诞生,武汉芯源CW32L010安全低功耗MCU集合多项技术性能优势
2024年9月26日,武汉芯源半导体带着最新产品CW32L010安全低功耗MCU作客电巢直播间,举行了一场璀璨的XR技术新品发布会,此次直播,武汉芯源半导体技术总监 张亚凡、北中国区销售总监 孙秀艳与大家分享了武汉芯源半导体的发展历程和重要时刻,全面介绍和讲解了新品CW32L010实现的技术优势。
原厂动态 发布时间 : 2024-11-05
持续奋进,快速完善自有32位超低功耗MCU产品阵容
7月25日,2024全球MCU生态发展大会在深圳隆重召开,武汉芯源半导体在现场为电子行业参观者展示了多款MCU典型应用方案。,武汉芯源半导体技术总监张亚凡发表了主题演讲《持续奋进,快速完善自有32位超低功耗MCU产品阵容》,在宏观方面展示现有产品布局和未来产品计划,在微观方面展示产品外设细节功能的改进。
原厂动态 发布时间 : 2024-08-16
CW32携手生态伙伴举行乐清线下交流会,解读MCU更多信息,诠释CW32超强特性及生态资源
低功耗、高性能以及高可靠性正在成为嵌入式MCU的核心竞争力。2024年,武汉芯源半导体不断突破产品性能及应用边界,持续为用户提供负责任的好产品,并积极为客户高效赋能。8月15日,CW32携手生态伙伴将会在乐清与大家深入交流。武汉芯源半导体部门领导、市场大咖、资深技术专家将空降现场,为大家解读MCU更多信息,诠释CW32超强特性及生态资源等,并结合方案Demo,解析CW32的应用优势。
原厂动态 发布时间 : 2024-08-14
基于CW32的MPU6050姿态传感器的应用开发配置教程
MPU6050是一种常用的六轴姿态传感器模块,结合了三轴陀螺仪和三轴加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。MPU6050 对陀螺仪和加速度计分别用了三个16 位的ADC(0~65535),将其测量的模拟量转化为可输出的数字量。
设计经验 发布时间 : 2023-11-01
【经验】武汉芯源CW32系列MCU PWM输出功能指南
脉冲宽度调制(PWM),是在数字电路中达到模拟输出效果的一种手段,常见应用电机调速,照明灯调光等。在MCU中,主要通过定时器单元来时实现PWM输出,以CW32L083VxTx为例,LPTIM,GTIM,ATIM都可以输出PWM信号。
设计经验 发布时间 : 2023-02-23
CW32F030C8T6 MCU Supports an Ultra Wide Temperature Range of -40~105 ℃, Ensures Safe and Stable Operation of Portable Charging Gun
Wuhan Core Source Semiconductor‘s CW32F030C8T6 serves as the core control chip of the portable charging gun of Sihao New Energy Vehicle, indicating that CW32F030C8T6 microcontroller has been recognized by frontline host manufacturers.
应用方案 发布时间 : 2024-11-07
武汉芯源半导体安全低功耗MCU CW32L010 | 新品使用初体验
CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片
设计经验 发布时间 : 2024-10-18
【应用】基于CW32L系列MCU的指夹式血氧仪,实现更高精度测量
主控芯片建议使用CW32F003(20pin)资源足够,还便宜。CW32抗干扰性能可轻松通过ESD 8KV认证,加之优秀的ADC性能,是血氧仪类产品的不二之选
应用方案 发布时间 : 2023-09-07
基于CW32的MAX4466放大器模块的应用实验
MAX4466是一款低噪声、高增益的放大器模块。该模块采用了集成放大器芯片,能够在低电压下提供高增益。它的输入阻抗较高,能够与多种信号源(例如麦克风、传感器)实现良好的匹配。同时,MAX4466还具备很低的噪声水平,能够有效地提取和放大微弱的信号,提高系统的灵敏度。
设计经验 发布时间 : 2023-10-29
【经验】基于CW32的超声波模块的应用
C-SR04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射信号来实现测距功能。具有成本低、精度高、使用简便等特点。本实验用到了CW32F030C8T6小蓝板、0.96寸OLED显示屏、HC-SR04超声波模块及Keil5开发环境。
设计经验 发布时间 : 2023-09-26
Application of CW32L083 Series MCU in Air Purifiers, Supported by Built in Independent Calibration RTC
The air purifier introduced in this article adopts the CW32L083 series microcontroller as the control core of the air purifier, and combines important components such as sensors, displays, drivers, and wireless transceivers to complete the required functions of the controller system.
应用方案 发布时间 : 2024-11-05
【经验】芯源CW32系列MCU电容式触摸按键设计指南
芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。
设计经验 发布时间 : 2023-07-27
【技术】武汉芯源CW32定时器输入捕获的操作讲解
CW32系列MCU的GTIM、ATIM的每个定时器都带有至少4路独立的捕获/比较通道,输入捕获功能可以测量输入信号的脉冲宽度或者频率。本文进行武汉芯源CW32定时器输入捕获的操作讲解。
技术探讨 发布时间 : 2023-02-16
The Application of CW32F030 Series MCU in Electric Welding Machines
Applying a microcontroller in an electric welding machine can achieve automated control, improve welding quality and efficiency by writing specific programs. This article introduces the application of Wuhan Core Source Semiconductor CW32F030 series microcontroller in arc welding machines.
应用方案 发布时间 : 2024-11-05
【技术】一文介绍使用CW32系列MCU实现电池备份(VBAT)功能
本文档介绍了如何基于CW32系列MCU,通过增加简单的外部电路配合软件实现VBAT功能,在系统电源掉电后仍能保持RTC时钟正常计时,以及如何降低系统功耗,从而延长后备电池的使用寿命。
技术探讨 发布时间 : 2023-09-14
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论