91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【CW32模塊使用】紅外測距傳感器

CW32生態(tài)社區(qū) ? 來源:CW32生態(tài)社區(qū) ? 2024-09-23 09:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

01模塊來源

模塊實物展示:


wKgaombqT8GADzobAAAaRIJlTis60.webp




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

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

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

03移植過程

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

3.1查看資料

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

wKgZombqT8KAOruuAAA6-Ez4NWg87.webp

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

wKgaombqT8KAaSqvAAAnsAWBIzI58.webp

可以避免免探測誤差的安裝

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

wKgZombqT8KAcqqcAABEDMvsgUQ22.webp

3.2引腳選擇

想要使用ADC,需要確定使用的引腳是否有ADC外設(shè)功能??梢酝ㄟ^手冊進行查看。在用戶手冊439頁。

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

wKgaombqT8OAIVh-AAA2PNezPFs50.webp

有ADC功能的引腳

wKgaombqT8WAa7tXAABoRh79j7I59.webp

接線表

3.3移植至工程

移植步驟中的導(dǎo)入.c和.h文件與【DHT11溫濕度傳感器】相同,只是將.c和.h文件更改為bsp_IRdistance.c與bsp_IRdistance.h。這里不再過多講述,移植完成后面修改相關(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ù):無
 * 函 數(shù) 返 回:無
 * 作       者:LC
 * 備       注:LP
**********************************************************/
void IRdistance_GPIO_Init(void)
{
    RCC_IRDISTANCE_GPIO_ENABLE();     // 使能GPIO時鐘
    RCC_IRDISTANCE_ADC_ENABLE();      // 使能ADC時鐘

    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;         // 時鐘頻率 = PCLK / 4 = 64MHz / 4 = 16MHz
    ADC_InitStructure.ADC_SampleTime = ADC_SampTime5Clk; //5個ADC時鐘周期
    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é)果右對齊
    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);    //啟動ADC轉(zhuǎn)換
}
/**********************************************************
 * 函 數(shù) 名 稱:ADC_GET
 * 函 數(shù) 功 能:讀取一次ADC值
 * 傳 入 參 數(shù):無
 * 函 數(shù) 返 回:測量到的值
 * 作       者:LCKFB
 * 備       注:
**********************************************************/
uint32_t ADC_GET(void)
{
        ADC_SoftwareStartConvCmd(ENABLE);    //啟動ADC轉(zhuǎn)換

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

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

        // 因為采集 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ù) 說 明:計算紅外測距的測量距離
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:返回測量距離
 * 作       者:LC
 * 備       注:無
******************************************************************/
double Get_IRdistance_Distance(void)
{
    double adc_new = 0;
    double Distance = 0;
    adc_new = Get_Adc_Value(10);

//    根據(jù)官方代碼庫鏈接: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移植驗證

在自己工程中的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();        // 開發(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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2576

    文章

    55042

    瀏覽量

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

    關(guān)注

    7

    文章

    2837

    瀏覽量

    53295
  • 紅外測距
    +關(guān)注

    關(guān)注

    4

    文章

    21

    瀏覽量

    14686
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    299

    瀏覽量

    1850
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

    CW32模塊使用】微波多普勒無線雷達傳感器

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

    CW32溫度傳感器的應(yīng)用

    CW32F030 內(nèi)置溫度傳感器模塊傳感器的輸出電壓隨溫度變化,設(shè)置 ADC 模塊的采樣通道為內(nèi)部溫度
    發(fā)表于 12-15 08:18

    請教大神關(guān)于紅外測距傳感器

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

    測距傳感器原理

    的光信號。記錄并處理從光脈沖發(fā)出到返回被接收所經(jīng)歷的時間,即可測定目標(biāo)距離。激光傳感器必須極其精確地測定傳輸時間,因為光速太快。  紅外測距傳感器工作原理  
    發(fā)表于 11-12 16:16

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

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

    紅外傳感器測距工作原理

    紅外測距傳感器利用紅外信號遇到障礙物距離的不同反射的強度也不同的原理,進行障礙物遠近的檢測。紅外測距
    發(fā)表于 11-02 17:58 ?8.8w次閱讀

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

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

    紅外傳感器測距仿真Proteus的仿真圖

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

    紅外測距傳感器:改變未來的測量方式

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

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

    基于CW32的RC522刷卡模塊的應(yīng)用
    的頭像 發(fā)表于 11-02 14:53 ?2581次閱讀
    基于<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 ?1975次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用

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

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

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

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

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

    人體紅外感應(yīng)模塊使用的是熱釋電紅外傳感器,它是利用溫度變化的特征來探測紅外線的輻射,利用雙靈敏元互補的方法抑制溫度變化產(chǎn)生的干擾,提高了傳感器
    的頭像 發(fā)表于 12-05 15:09 ?1268次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 人體<b class='flag-5'>紅外傳感器</b>