<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于CW32系列MCU的GY-33顏色識別模塊設計

武漢芯源半導體 ? 來源:武漢芯源半導體 ? 2023-09-27 13:51 ? 次閱讀

一、簡介

1.GY-33是一種基于TCS34725顏色傳感器的顏色識別模塊。TCS34725是一種高精度光學傳感器,能夠檢測紅、綠、藍三個基本色的光譜信息,從而實現對物體顏色的準確識別,該模塊的具體應用場景包括以下幾個方面:

(1)電子設備顏色校準:在電子設備制造過程中,顏色一致性非常重要。使用GY-33模塊可以幫助制造商檢測和校準電子設備的顏色,確保不同設備之間的顏色表現一致。

(2)色彩分析和精確匹配:GY-33模塊在顏色分析和匹配方面有廣泛應用。例如,在印刷行業中,可以使用該模塊來檢測和匹配顏色樣本,從而確保印刷品的準確顏色表現。

(3)機器人視覺系統:GY-33模塊可以用于機器人視覺系統,幫助機器人在環境中對不同顏色的物體進行識別和分類。這在物流、倉儲和自動導航系統中非常有用,機器人可以根據物體的顏色屬性執行相應的任務。

二、所需物料

本實驗使用到了CW32F030C8小藍板、GY-33顏色識別模塊、0.96寸OLED顯示屏,RGB全彩LED模塊、輕觸開關模塊及Keil5開發環境。

0f9e45be-5cf7-11ee-939d-92fbcf53809c.png

CW32F030C8小藍板

0fbb42ae-5cf7-11ee-939d-92fbcf53809c.png
GY-33顏色識別模塊
0fc88cca-5cf7-11ee-939d-92fbcf53809c.png
RGB全彩LED模塊

0fe5ae5e-5cf7-11ee-939d-92fbcf53809c.png

實物展示

【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的方式。

0ff81134-5cf7-11ee-939d-92fbcf53809c.png

100e91e8-5cf7-11ee-939d-92fbcf53809c.png

101da1b0-5cf7-11ee-939d-92fbcf53809c.png

有簡單的7種顏色識別,單片機不參與數據處理工作,不需要計算RGB值,直接讀取吧 數據即可。需要特別注意的是:

103e020c-5cf7-11ee-939d-92fbcf53809c.png

1052d2ea-5cf7-11ee-939d-92fbcf53809c.png

三、核心代碼

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;              
}

四、實物展示+效果演示

10672204-5cf7-11ee-939d-92fbcf53809c.png

107cf944-5cf7-11ee-939d-92fbcf53809c.png

1097ceae-5cf7-11ee-939d-92fbcf53809c.png

10b52832-5cf7-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16143

    瀏覽量

    345112
  • 模塊
    +關注

    關注

    7

    文章

    2529

    瀏覽量

    46730
  • 機器人
    +關注

    關注

    207

    文章

    27315

    瀏覽量

    202146
  • keil5
    +關注

    關注

    6

    文章

    39

    瀏覽量

    20528
  • CW32
    +關注

    關注

    1

    文章

    144

    瀏覽量

    378

原文標題:【CW32】基于CW32的GY-33顏色識別模塊的應用

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于CW32的MP3播放器設計

    使用武漢芯源半導體CW32系列MCU作為主控一款小巧的MP3。采用CW32L系列低功耗芯片。
    的頭像 發表于 09-06 16:45 ?1459次閱讀
    基于<b class='flag-5'>CW32</b>的MP3播放器設計

    請問顏色傳感器GY-33 TCS34725和TCS3200有什么區別?

    請教顏色傳感器GY-33 TCS34725和TCS3200的具體區別?哪種用于檢測透明瓶中液體顏色更好?有沒有做過相關實驗的朋友,希望大家給出點建議,非常感謝。
    發表于 03-26 07:17

    請問是否有人使用過CJMCU-115或者GY-33顏色傳感器?

    請問CJMCU-115或者GY-33傳感器的效果如何,是否沒有色差?采集到的16位AD值怎么轉換成RGB值?全部積分奉上,謝謝大家
    發表于 04-30 08:45

    如何使用串口通信連接GY-33顏色傳感器完成對顏色識別?

    如何使用串口通信連接GY-33顏色傳感器完成對顏色識別?
    發表于 01-25 06:08

    CW32 MCU開發資料匯總(手冊、工具、固件庫)

    32L083_StdPeriph_Lib.zip4、CW32 MCU開發工具:*附件:CW-DAPLINK調試器驅動.zip*附件:CW-DAPLINK使用手冊.pdf*附件:
    發表于 07-27 14:47

    CW Programmer CW32系列芯片燒錄工具配套軟件

    CW Programmer CW32系列芯片的燒錄工具配套軟件
    發表于 09-15 07:44

    如何基于CW32系列MCU實現VBAT功能

    檔介紹了如何基于 CW32 系列 MCU,通過增加簡單的外部電路配合軟件實現 VBAT 功能,在系統電源掉電后仍能保持 RTC 時鐘正常計時,以及如何降低系統功耗,從而延長后備電池的使用壽命。
    發表于 09-15 07:24

    CJMCU-115或者GY-33傳感器的效果如何,是否沒有色差?

    CJMCU-115或者GY-33傳感器的效果如何,是否沒有色差?
    發表于 10-17 06:01

    stm32單片機使用串口通信連接GY-33顏色傳感器完成對顏色識別并且打印出其顏色和對應的RGB值

    ,GY_33配套軟件,串口助手,USB轉TTL1.GY-33介紹及其接線GY-33是一款低成本顏色識別傳感器
    發表于 11-30 09:51 ?9次下載
    stm32單片機使用串口通信連接<b class='flag-5'>GY-33</b><b class='flag-5'>顏色</b>傳感器完成對<b class='flag-5'>顏色</b>的<b class='flag-5'>識別</b>并且打印出其<b class='flag-5'>顏色</b>和對應的RGB值

    顏色識別傳感器模塊概述、特性及使用方法

    GY-33 是一款顏色識別傳感器模塊。工作電壓 3-5V,功耗小,體積小,安裝方便,其工作原理是照明 LED 發光,照射到被測物體后,返回光經過濾鏡檢測 RGB 的比例值,根據 RGB
    發表于 05-24 09:36 ?2085次閱讀

    利用單片機的顏色識別系統設計

    整個系統可以通過單片機控制顏色傳感器完成對5種顏色識別,并且在LCD1602顯示屏上進行顯示,當按下按鍵的時候,將當下的顏色播報出來。系統內的顏色
    的頭像 發表于 09-02 09:25 ?2724次閱讀

    快樂解說MCUCW32的工作電壓特性

    快樂解說MCUCW32的工作電壓特性
    的頭像 發表于 09-18 10:56 ?338次閱讀

    SM07-GY-33顏色檢測模塊說明書

    適用于SM07-GY-33顏色檢測模塊
    發表于 08-08 16:55 ?0次下載

    基于CW32的RC522刷卡模塊的應用

    基于CW32的RC522刷卡模塊的應用
    的頭像 發表于 11-02 14:53 ?688次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡<b class='flag-5'>模塊</b>的應用

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?415次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>