色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

CW32生態社區 ? 來源:CW32生態社區 ? 2024-09-23 09:53 ? 次閱讀

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

01模塊來源

模塊實物展示:


wKgaombqT8GADzobAAAaRIJlTis60.webp




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

02 規格參數

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

03移植過程

我們的目標是將例程移植至立創·CW32F030C8T6開發板上【能夠判斷前方障礙物的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。

3.1查看資料

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

wKgZombqT8KAOruuAAA6-Ez4NWg87.webp

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

wKgaombqT8KAaSqvAAAnsAWBIzI58.webp

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

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

wKgZombqT8KAcqqcAABEDMvsgUQ22.webp

3.2引腳選擇

想要使用ADC,需要確定使用的引腳是否有ADC外設功能。可以通過手冊進行查看。在用戶手冊439頁。

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

wKgaombqT8OAIVh-AAA2PNezPFs50.webp

有ADC功能的引腳

wKgaombqT8WAa7tXAABoRh79j7I59.webp

接線表

3.3移植至工程

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

在文件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"


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

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

    /* ADC配置 */

    ADC_InitTypeDef ADC_InitStructure;                   // ADC初始化結構體
    ADC_WdtTypeDef ADC_WdtStructure;                     // ADC看門狗結構體
    ADC_SingleChTypeDef ADC_SingleChStructure;           // ADC單通道轉換結構體

    // 配置ADC初始化結構體
    ADC_InitStructure.ADC_OpMode = ADC_SingleChOneMode;  //單通道單次轉換模式
    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;      //關閉跟隨器
    ADC_InitStructure.ADC_TsEn = ADC_TsDisable;          //關閉內置溫度傳感器
    ADC_InitStructure.ADC_DMAEn = ADC_DmaDisable;        //不觸發DMA
    ADC_InitStructure.ADC_Align = ADC_AlignRight;        //ADC轉換結果右對齊
    ADC_InitStructure.ADC_AccEn = ADC_AccDisable;        //轉換結果累加不使能

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

    //配置單通道轉換模式
    ADC_SingleChStructure.ADC_DiscardEn = ADC_DiscardNull;      // 單通道ADC轉換結果溢出保存
    ADC_SingleChStructure.ADC_Chmux = IRDISTANCE_ADC_CHANNEL;   // 選擇ADC轉換通道
    ADC_SingleChStructure.ADC_InitStruct = ADC_InitStructure;   // ADC初始化結構體
    ADC_SingleChStructure.ADC_WdtStruct = ADC_WdtStructure;     // ADC看門狗結構體

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

    ADC_Enable(); //ADC使能

    ADC_SoftwareStartConvCmd(ENABLE);    //啟動ADC轉換
}
/**********************************************************
 * 函 數 名 稱:ADC_GET
 * 函 數 功 能:讀取一次ADC值
 * 傳 入 參 數:無
 * 函 數 返 回:測量到的值
 * 作       者:LCKFB
 * 備       注:
**********************************************************/
uint32_t ADC_GET(void)
{
        ADC_SoftwareStartConvCmd(ENABLE);    //啟動ADC轉換

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

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

        // 因為采集 SAMPLES 次,故循環 SAMPLES 次
        for(int i = 0; i < Count; i++)
        {
                adcValue += ADC_GET();

        }

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

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

        return ret;
}

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

//    根據官方代碼庫鏈接: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設定為模擬輸入

#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主函數中,編寫如下。

/*
 * 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();        // 開發板初始化

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

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

        delay_ms(1000);
    }
}

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

wKgZombqT8WACTnsAACYQGwwVs433.webp

模塊移植成功案例代碼:

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

提取碼:LCKF

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

    關注

    2550

    文章

    51035

    瀏覽量

    753063
  • 模塊
    +關注

    關注

    7

    文章

    2695

    瀏覽量

    47431
  • 紅外測距
    +關注

    關注

    4

    文章

    20

    瀏覽量

    14477
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    626
收藏 人收藏

    評論

    相關推薦

    CW32移植Free-RTOS】CW32開發者扶持計劃

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

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

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

    請教大神關于紅外測距傳感器

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

    測距傳感器原理

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

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

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

    紅外傳感器測距工作原理

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

    紅外測距傳感器的原理及應用

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

    dfrobot紅外測距模塊介紹

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

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

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

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

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

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

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

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?783次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用

    CW32單片機在智能馬桶的應用介紹

    和調節。本文將介紹CW32單片機在智能馬桶的詳細應用。圖:CW32的智能馬桶控制板CW32單片機在智能馬桶的應用介紹1.溫度感應與控制智能馬桶內設有溫度傳感器,通
    的頭像 發表于 12-20 10:09 ?606次閱讀
    <b class='flag-5'>CW32</b>單片機在智能馬桶的應用介紹

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

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

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

    人體紅外感應模塊使用的是熱釋電紅外傳感器,它是利用溫度變化的特征來探測紅外線的輻射,利用雙靈敏元互補的方法抑制溫度變化產生的干擾,提高了傳感器
    的頭像 發表于 12-05 15:09 ?148次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 人體<b class='flag-5'>紅外傳感器</b>
    主站蜘蛛池模板: 亚洲成人免费在线观看| 麻豆产精品一二三产区区| 俄罗斯1819y0u| 99在线观看视频| 97精品一区二区视频在线观看| 亚洲欲色欲色XXXXX在线AV| 亚洲成人精品久久| 性做久久久久久久久浪潮| 无码AV动漫精品一区二区免费| 日日摸夜夜添无码AVA片| 日韩AV无码一区二区三区不卡毛片 | 凌馨baby| 美女被打开了屁股进去的视频 | 久久超碰色中文字幕| 精品一二三区久久AAA片| 精品国产美女AV久久久久| 近亲乱中文字幕| 久久99r66热这里有精品| 久久成人永久免费播放| 老师在讲桌下边h边讲课| 捆绑白丝粉色JK震动捧喷白浆| 蜜桃视频一区二区| 欧美亚洲日韩国产在线在线| 《乳色吐息》无删减版在线观看 | 久久精品中文字幕| 伦理片qvod| 欧美做真爱欧免费看| 日本一卡二卡三卡四卡无卡免费播放| 日本湿姝在线观看| 网友自拍区视频精品| 亚洲人成77777在线视频| 有码 亚洲 制服 国产 在线| 2021乱码精品公司| ppypp午夜限制不卡影院私人| 灌饱娇嫩H将军公主最新章节| 国产欧美一本道无码| 经典三级四虎在线观看| 麻豆国产人妻欲求不满| 人妖干美女| 亚洲精品永久免费| 97超碰射射射|