吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【CW32模塊使用】紅外測(cè)距傳感器

CW32生態(tài)社區(qū) ? 來(lái)源:CW32生態(tài)社區(qū) ? 2024-09-23 09:53 ? 次閱讀

GP2Y0A02YKOF是夏普的一款距離測(cè)量傳感器模塊。它由PSD(position sensitive detector)和IRED(infrared emitting diode)以及信號(hào)處理電路三部分組成。由于采用了三角測(cè)量方法,被測(cè)物體的材質(zhì)、環(huán)境溫度以及測(cè)量時(shí)間都不會(huì)影響傳感器的測(cè)量精度。傳感器輸出電壓值對(duì)應(yīng)探測(cè)的距離。通過(guò)測(cè)量電壓值就可以得出所探測(cè)物體的距離,所以這款傳感器可以用于距離測(cè)量、避障等場(chǎng)合。

01模塊來(lái)源

模塊實(shí)物展示:


wKgaombqT8GADzobAAAaRIJlTis60.webp




資料下載鏈接:https://pan.baidu.com/s/11dDQHyYJfi0nNyC28vkpoA
資料提取碼:qvpm

02 規(guī)格參數(shù)

工作電壓:3.3-5V 工作電流:33MA 模塊尺寸:37 x 21.6mm 輸出方式: 模擬量輸出 讀取方式:ADC 管腳數(shù)量:3 Pin 以上信息見(jiàn)廠家資料文件

03移植過(guò)程

我們的目標(biāo)是將例程移植至立創(chuàng)·CW32F030C8T6開(kāi)發(fā)板上【能夠判斷前方障礙物的功能】。首先要獲取資料,查看數(shù)據(jù)手冊(cè)應(yīng)如何實(shí)現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。

3.1查看資料

紅外測(cè)距傳感器的輸出是非線性的。每個(gè)型號(hào)的輸出曲線都不同。所以,在實(shí)際使用前,最好能對(duì)所使用的傳感器進(jìn)行一下校正。對(duì)每個(gè)型號(hào)的傳感器創(chuàng)建一張曲線圖,以便在實(shí)際使用中獲得真實(shí)有效的測(cè)量數(shù)據(jù)。下圖是測(cè)距距離為20-150CM型號(hào)的輸出曲線圖。

wKgZombqT8KAOruuAAA6-Ez4NWg87.webp

從上圖中,可以看到,當(dāng)被探測(cè)物體的距離小于大約 15cm 的時(shí)候,輸出電壓急劇下降,也就是說(shuō)從電壓讀數(shù)來(lái)看,物體的距離應(yīng)該是越來(lái)越遠(yuǎn)了。但是實(shí)際上并不是這樣的,想象一下,你的機(jī)器人本來(lái)正在慢慢的 靠近障礙物,突然發(fā)現(xiàn)障礙物消失了,一般來(lái)說(shuō),你的控制程序會(huì)讓你的機(jī)器人以全速移動(dòng),結(jié)果是,"砰"的一聲。當(dāng)然了,解決這個(gè)方法也不是沒(méi)有,這里有個(gè)小技巧。只需要改變一下傳感器的安裝位置,使它到機(jī)器人的外圍的距離大于最小探測(cè)距離就可以了。

wKgaombqT8KAaSqvAAAnsAWBIzI58.webp

可以避免免探測(cè)誤差的安裝

紅外測(cè)距傳感器的輸出數(shù)據(jù)線是通過(guò)電壓的變化來(lái)確定距離,我們可以使用ADC功能獲取傳感器的電壓變化,將其轉(zhuǎn)換為實(shí)際距離即可。電壓距離轉(zhuǎn)換公式見(jiàn)官方代碼庫(kù)鏈接:https://github.com/zoubworldArduino/ZSharpIR找到我們20-150CM型號(hào)的傳感器,在下方有換算公式。

wKgZombqT8KAcqqcAABEDMvsgUQ22.webp

3.2引腳選擇

想要使用ADC,需要確定使用的引腳是否有ADC外設(shè)功能。可以通過(guò)手冊(cè)進(jìn)行查看。在用戶手冊(cè)439頁(yè)。

這里選擇使用PA5的附加ADC功能。

wKgaombqT8OAIVh-AAA2PNezPFs50.webp

有ADC功能的引腳

wKgaombqT8WAa7tXAABoRh79j7I59.webp

接線表

3.3移植至工程

移植步驟中的導(dǎo)入.c和.h文件與【DHT11溫濕度傳感器】相同,只是將.c和.h文件更改為bsp_IRdistance.c與bsp_IRdistance.h。這里不再過(guò)多講述,移植完成后面修改相關(guān)代碼。

在文件bsp_IRdistance.c中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#include "bsp_IRdistance.h"
#include "stdio.h"
#include "math.h"


/**********************************************************
 * 函 數(shù) 名 稱:IRdistance_GPIO_Init
 * 函 數(shù) 功 能:初始化ADC
 * 傳 入 參 數(shù):無(wú)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:LP
**********************************************************/
void IRdistance_GPIO_Init(void)
{
    RCC_IRDISTANCE_GPIO_ENABLE();     // 使能GPIO時(shí)鐘
    RCC_IRDISTANCE_ADC_ENABLE();      // 使能ADC時(shí)鐘

    GPIO_ANALOG_ENABLE();             // PA05設(shè)定為模擬輸入

    /* ADC配置 */

    ADC_InitTypeDef ADC_InitStructure;                   // ADC初始化結(jié)構(gòu)體
    ADC_WdtTypeDef ADC_WdtStructure;                     // ADC看門狗結(jié)構(gòu)體
    ADC_SingleChTypeDef ADC_SingleChStructure;           // ADC單通道轉(zhuǎn)換結(jié)構(gòu)體

    // 配置ADC初始化結(jié)構(gòu)體
    ADC_InitStructure.ADC_OpMode = ADC_SingleChOneMode;  //單通道單次轉(zhuǎn)換模式
    ADC_InitStructure.ADC_ClkDiv = ADC_Clk_Div4;         // 時(shí)鐘頻率 = PCLK / 4 = 64MHz / 4 = 16MHz
    ADC_InitStructure.ADC_SampleTime = ADC_SampTime5Clk; //5個(gè)ADC時(shí)鐘周期
    ADC_InitStructure.ADC_VrefSel = ADC_Vref_VDDA;       //VDDA參考電壓
    ADC_InitStructure.ADC_InBufEn = ADC_BufDisable;      //關(guān)閉跟隨器
    ADC_InitStructure.ADC_TsEn = ADC_TsDisable;          //關(guān)閉內(nèi)置溫度傳感器
    ADC_InitStructure.ADC_DMAEn = ADC_DmaDisable;        //不觸發(fā)DMA
    ADC_InitStructure.ADC_Align = ADC_AlignRight;        //ADC轉(zhuǎn)換結(jié)果右對(duì)齊
    ADC_InitStructure.ADC_AccEn = ADC_AccDisable;        //轉(zhuǎn)換結(jié)果累加不使能

    //ADC模擬看門狗通道初始化
    ADC_WdtInit(&ADC_WdtStructure);

    //配置單通道轉(zhuǎn)換模式
    ADC_SingleChStructure.ADC_DiscardEn = ADC_DiscardNull;      // 單通道ADC轉(zhuǎn)換結(jié)果溢出保存
    ADC_SingleChStructure.ADC_Chmux = IRDISTANCE_ADC_CHANNEL;   // 選擇ADC轉(zhuǎn)換通道
    ADC_SingleChStructure.ADC_InitStruct = ADC_InitStructure;   // ADC初始化結(jié)構(gòu)體
    ADC_SingleChStructure.ADC_WdtStruct = ADC_WdtStructure;     // ADC看門狗結(jié)構(gòu)體

    ADC_SingleChOneModeCfg(&ADC_SingleChStructure);             // 初始化配置

    ADC_Enable(); //ADC使能

    ADC_SoftwareStartConvCmd(ENABLE);    //啟動(dòng)ADC轉(zhuǎn)換
}
/**********************************************************
 * 函 數(shù) 名 稱:ADC_GET
 * 函 數(shù) 功 能:讀取一次ADC值
 * 傳 入 參 數(shù):無(wú)
 * 函 數(shù) 返 回:測(cè)量到的值
 * 作       者:LCKFB
 * 備       注:
**********************************************************/
uint32_t ADC_GET(void)
{
        ADC_SoftwareStartConvCmd(ENABLE);    //啟動(dòng)ADC轉(zhuǎn)換

        uint32_t adcValue = ADC_GetConversionValue(); // 獲取數(shù)據(jù)

        return adcValue;
}
/**********************************************************
 * 函 數(shù) 名 稱:Get_Adc_Value
 * 函 數(shù) 功 能:獲得某個(gè)通道的值
 * 傳 入 參 數(shù):Count:采集次數(shù)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:LP
**********************************************************/
float Get_Adc_Value(uint8_t Count)
{
        uint32_t adcValue = 0;
        double ret = 0;

        // 因?yàn)椴杉?SAMPLES 次,故循環(huán) SAMPLES 次
        for(int i = 0; i < Count; i++)
        {
                adcValue += ADC_GET();

        }

        // 求平均值
        ret = (double)adcValue / Count;

        ret = (((double)ret / 4095) * 3.5);

        return ret;
}

/******************************************************************
 * 函 數(shù) 名 稱:Get_illume_Percentage_value
 * 函 數(shù) 說(shuō) 明:計(jì)算紅外測(cè)距的測(cè)量距離
 * 函 數(shù) 形 參:無(wú)
 * 函 數(shù) 返 回:返回測(cè)量距離
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
double Get_IRdistance_Distance(void)
{
    double adc_new = 0;
    double Distance = 0;
    adc_new = Get_Adc_Value(10);

//    根據(jù)官方代碼庫(kù)鏈接:https://github.com/zoubworldArduino/ZSharpIR
//    得到距離換算公式:
//    【GP2Y0A02YK0F:Using MS Excel, we can calculate function (For distance > 15cm) :
//    Distance = 60.374 X POW(Volt , -1.16)】
    Distance = 60.374 * pow(adc_new,-1.16);

    return Distance;
}

在文件bsp_encoder.h中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#ifndef _BSP_IRDISTANCE_H_
#define _BSP_IRDISTANCE_H_

#include "board.h"

#define RCC_IRDISTANCE_GPIO_ENABLE()    __RCC_GPIOA_CLK_ENABLE()
#define RCC_IRDISTANCE_ADC_ENABLE()     __RCC_ADC_CLK_ENABLE()

#define GPIO_ANALOG_ENABLE()            PA05_ANALOG_ENABLE()    // PA05設(shè)定為模擬輸入

#define IRDISTANCE_ADC_CHANNEL          ADC_ExInputCH5

#define PORT_IRDISTANCE                 CW_GPIOA

#define GPIO_IRDISTANCE_AO              GPIO_PIN_5

void IRdistance_GPIO_Init(void);
float Get_Adc_Value(uint8_t Count)  ;
double Get_IRdistance_Distance(void);

#endif

04移植驗(yàn)證

在自己工程中的main主函數(shù)中,編寫如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_IRdistance.h"

int32_t main(void)
{
    board_init();        // 開(kāi)發(fā)板初始化

    uart1_init(115200);        // 串口1波特率115200

    IRdistance_GPIO_Init();
    printf("ADC demo startrn");
    while(1)
    {
        printf("Distance = %.2frn", Get_IRdistance_Distance() );

        delay_ms(1000);
    }
}

上電現(xiàn)象(障礙物距離20CM):

wKgZombqT8WACTnsAACYQGwwVs433.webp

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/10x8SiTd8z0HFHmGnWpZ3Vw?pwd=LCKF

提取碼:LCKF

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2553

    文章

    51390

    瀏覽量

    756569
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2733

    瀏覽量

    47747
  • 紅外測(cè)距
    +關(guān)注

    關(guān)注

    4

    文章

    20

    瀏覽量

    14506
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    218

    瀏覽量

    734
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CW32移植Free-RTOS】CW32開(kāi)發(fā)者扶持計(jì)劃

    CW32配置Free-RTOS全過(guò)程,CW32開(kāi)發(fā)者扶持計(jì)劃
    的頭像 發(fā)表于 04-18 09:38 ?6229次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開(kāi)發(fā)者扶持計(jì)劃

    CW32模塊使用】微波多普勒無(wú)線雷達(dá)傳感器

    微波運(yùn)動(dòng)傳感器是利用多普勒雷達(dá)原理設(shè)計(jì)的微波移動(dòng)物體探測(cè)。不同于一般的紅外探測(cè),微波傳感器通過(guò)通過(guò)檢測(cè)物體反射的微波來(lái)探測(cè)物體的運(yùn)動(dòng)狀況
    的頭像 發(fā)表于 11-28 17:24 ?958次閱讀
    【<b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用】微波多普勒無(wú)線雷達(dá)<b class='flag-5'>傳感器</b>

    請(qǐng)教大神關(guān)于紅外測(cè)距傳感器

    我想要用2個(gè)紅外距離傳感器來(lái)檢測(cè)一個(gè)在旋轉(zhuǎn)的箱子到紅外測(cè)距傳感器的距離相同,二個(gè)紅外
    發(fā)表于 03-25 14:21

    測(cè)距傳感器原理

    的光信號(hào)。記錄并處理從光脈沖發(fā)出到返回被接收所經(jīng)歷的時(shí)間,即可測(cè)定目標(biāo)距離。激光傳感器必須極其精確地測(cè)定傳輸時(shí)間,因?yàn)楣馑偬臁! ?b class='flag-5'>紅外線測(cè)距傳感器工作原理  
    發(fā)表于 11-12 16:16

    怎樣去設(shè)計(jì)一種基于紅外測(cè)距傳感器模塊的智能小車?

    怎樣去設(shè)計(jì)一種基于紅外測(cè)距傳感器模塊的智能小車?如何對(duì)基于紅外測(cè)距
    發(fā)表于 07-22 06:38

    紅外傳感器測(cè)距工作原理

    紅外測(cè)距傳感器利用紅外信號(hào)遇到障礙物距離的不同反射的強(qiáng)度也不同的原理,進(jìn)行障礙物遠(yuǎn)近的檢測(cè)。紅外測(cè)距
    發(fā)表于 11-02 17:58 ?8.4w次閱讀

    紅外測(cè)距傳感器的原理及應(yīng)用

    本文首先介紹了紅外測(cè)距傳感器原理,其次闡述了紅外測(cè)距傳感器特點(diǎn),最后介紹了
    發(fā)表于 09-10 09:49 ?2.3w次閱讀

    dfrobot紅外測(cè)距模塊介紹

    GP2Y0A710K是夏普紅外距離傳感器家族成員之一,此型號(hào)可提供最遠(yuǎn)5.5米的探測(cè)距離,屬于紅外測(cè)距中的高端產(chǎn)品,某種程度可代替昂貴的激光
    的頭像 發(fā)表于 12-04 14:41 ?2916次閱讀
    dfrobot<b class='flag-5'>紅外</b><b class='flag-5'>測(cè)距</b><b class='flag-5'>模塊</b>介紹

    紅外傳感器測(cè)距仿真Proteus的仿真圖

    這是紅外傳感器測(cè)距仿真Proteus的仿真圖,附帶hex文件哦。
    發(fā)表于 12-06 09:43 ?38次下載

    紅外測(cè)距傳感器:改變未來(lái)的測(cè)量方式

    紅外測(cè)距傳感器:改變未來(lái)的測(cè)量方式在我們的日常生活中,距離的測(cè)量可能看起來(lái)是一個(gè)相當(dāng)簡(jiǎn)單的任務(wù),但對(duì)于許多行業(yè)和領(lǐng)域來(lái)說(shuō),精確、快速且可靠的距離測(cè)量是至關(guān)重要的。傳統(tǒng)的測(cè)量方法可能會(huì)消耗大量時(shí)間
    的頭像 發(fā)表于 09-12 08:30 ?1629次閱讀
    <b class='flag-5'>紅外</b><b class='flag-5'>測(cè)距</b><b class='flag-5'>傳感器</b>:改變未來(lái)的測(cè)量方式

    基于CW32的RC522刷卡模塊的應(yīng)用

    基于CW32的RC522刷卡模塊的應(yīng)用
    的頭像 發(fā)表于 11-02 14:53 ?1221次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡<b class='flag-5'>模塊</b>的應(yīng)用

    基于CW32的物聯(lián)網(wǎng)應(yīng)用

    CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 11-02 15:55 ?868次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。圖:CW32的智能馬桶控制板CW32單片機(jī)在智能馬桶的應(yīng)用介紹1.溫度感應(yīng)與控制智能馬桶內(nèi)設(shè)有溫度傳感器,通
    的頭像 發(fā)表于 12-20 10:09 ?682次閱讀
    <b class='flag-5'>CW32</b>單片機(jī)在智能馬桶的應(yīng)用介紹

    CW32模塊使用 紅外循跡傳感器

    紅外循跡傳感器采用TCRT5000紅外反射傳感器,一種集發(fā)射與接收于一體的光電傳感器,它由一個(gè)紅外
    的頭像 發(fā)表于 09-18 14:31 ?454次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 <b class='flag-5'>紅外</b>循跡<b class='flag-5'>傳感器</b>

    CW32模塊使用 人體紅外傳感器

    人體紅外感應(yīng)模塊使用的是熱釋電紅外傳感器,它是利用溫度變化的特征來(lái)探測(cè)紅外線的輻射,利用雙靈敏元互補(bǔ)的方法抑制溫度變化產(chǎn)生的干擾,提高了傳感器
    的頭像 發(fā)表于 12-05 15:09 ?254次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 人體<b class='flag-5'>紅外傳感器</b>
    大发888游戏加速器| 百家乐专打单跳投注法| 阳新县| 立即博百家乐的玩法技巧和规则| 海尔百家乐官网的玩法技巧和规则| 黄石市| 大发888注册58| 百家乐投注心得和技巧| 3U百家乐官网的玩法技巧和规则| 玩百家乐官网游戏经验| bet365官网bet365gwylc| 反赌百家乐的玩法技巧和规则| 百家乐赢钱秘密| 大世界百家乐官网娱乐场| 应用必备| bet365官网| 20人百家乐桌| 澳门百家乐怎么| 马牌百家乐官网的玩法技巧和规则 | 百家乐投住系统| 24山64卦分金| 百家乐官网园鼎丰娱乐城| 百家乐官网论坛百科| bet365网站| 微信百家乐群规则大全| 百家乐桌小| 真人百家乐打法| 宁南县| 网上棋牌室| 威尼斯人娱乐城博彩网站| 皇冠百家乐赢钱皇冠| 24山方位 子孙 文昌| 百家乐官网路子分| 威尼斯人娱乐城 196| 澳门百家乐职业| 百家乐官网光纤冼牌机| 大世界百家乐官网娱乐平台| 百家乐官网投注技巧| 百家乐官网投注办法| 巴登娱乐城| 大发888易付168 充值|