<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生態社區 ? 來源:CW32生態社區 ? 2023-08-28 14:14 ? 次閱讀

一、簡介

1.C-SR04超聲波模塊是一種常用的測距模塊,其通過發射超聲波并接收其反射信號來實現測距功能。因其成本低、精度高、使用簡便等特點,被廣泛應用于以下場景:

(1)避障機器人:HC-SR04超聲波模塊可以用于避障機器人的距離測量,通過檢測障礙物與機器人的距離,實現避障控制。

(2)智能家居:HC-SR04超聲波模塊可用于智能家居中的人體檢測和距離測量。例如,在門口安裝超聲波模塊,可以檢測人的接近并觸發開門動作,或者用于室內的距離測量和觸發自動照明等。

2.本實驗用到了CW32F030C8T6小藍板、0.96寸OLED顯示屏、HC-SR04超聲波模塊及Keil5開發環境。

二、超聲波模塊測距的使用方法

使用流程 連接電源 將VCC引腳連接到+5V,GND引腳連接到GND。

連接觸發引腳

將Trig引腳連接到單片機的數字輸出引腳。

連接回波引腳

將Echo引腳連接到單片機的數字輸入引腳。

發送信號

通過向Trig引腳發送一個至少10微秒的高電平觸發信號來啟動測距過程

接收信號

模塊發送觸發信號后,自動發射超聲波,并等待接收反射信號。當接收到反射信號時,Echo引腳會輸出一個高電平信號,持續時間與超聲波的往返時間成正比。

計算距離

通過測量Echo引腳輸出高電平信號的持續時間,可以計算得到距離,一般使用以下公式計算:

距離= 高電平持續時間 × 聲波在空氣中傳播的速度 / 2。

重復測量

根據需要可定時測量距離,以實現連續的距離監測。

需要注意的是,HC-SR04超聲波模塊的測距精度受到多種因素的影響,如溫度、超聲波傳播介質等。在使用過程中,需要結合具體的應用場景和需求進行參數調整和校準,以獲得準確的距離測量結果。

三、核心代碼

HC_SR04.c:
#include "HC_SR04.h"


extern unsigned int time;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉輸入
  GPIO_InitStruct.Pins=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽輸出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,為輸出脈沖觸發信號做準備
}


unsigned int Measure_Distance(void) //測距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脈沖觸發信號
  Delay_us(10);
  ResetTrig();
  while(ReadEcho()==0); //等待Echo輸出高電平
  time=0;               //開始記錄回波信號脈寬
  while(ReadEcho()==1); //等待Echo輸出低電平     
  distance=time*1.7;//根據聲速和時間計算距離,即distance=time*340/2/100
  /*
      關于分辨力(mm):
          定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms
          計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模塊標準精度3mm,故測距結果十分精準
  */
  return distance; //返回距離,單位mm
}
main.c:
#include "HC_SR04.h"


extern unsigned int time;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉輸入
  GPIO_InitStruct.Pins=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽輸出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,為輸出脈沖觸發信號做準備
}


unsigned int Measure_Distance(void) //測距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脈沖觸發信號
  Delay_us(10);
  ResetTrig();
  while(ReadEcho()==0); //等待Echo輸出高電平
  time=0;               //開始記錄回波信號脈寬
  while(ReadEcho()==1); //等待Echo輸出低電平     
  distance=time*1.7;//根據聲速和時間計算距離,即distance=time*340/2/100
  /*
      關于分辨力(mm):
          定時器每次對time加1是10us,10us=0.01ms,340m/s=340mm/ms
          計算距離時,最小分辨力為:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模塊標準精度3mm,故測距結果十分精準
  */
  return distance; //返回距離,單位mm
}

四、實驗最終現象

fd3123fa-4555-11ee-a2ef-92fbcf53809c.png fd8321aa-4555-11ee-a2ef-92fbcf53809c.png

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

    關注

    6008

    文章

    44087

    瀏覽量

    623078
  • 模塊
    +關注

    關注

    7

    文章

    2520

    瀏覽量

    46710
  • 超聲波
    +關注

    關注

    63

    文章

    2839

    瀏覽量

    136973
  • CW32
    +關注

    關注

    1

    文章

    143

    瀏覽量

    356

原文標題:【CW32】基于CW32的超聲波模塊的應用

文章出處:【微信號:CW32生態社區,微信公眾號:CW32生態社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    超聲波模塊參考

    說明: DYP-ME007超聲波模塊AVRmega16程序 DYP-ME007 超聲波模塊DYP-ME007和89c51的數據資料 超聲波模塊參考
    發表于 08-12 10:27

    msp430f149控制超聲波測距模塊超聲波模塊似乎沒有反應 ?

    哥哥們 小弟在用msp430f149控制超聲波測距模塊超聲波模塊似乎沒有反應求指教
    發表于 05-26 20:24

    超聲波模塊測距問題

    ·新上手一塊HC-SR04超聲波模塊寫了一個數碼管測距顯示,問題來了緩慢移動模塊可以近距離測試顯示,可是超過一米時,時靈時不靈,顯示亂碼,為嘛呢??,求解
    發表于 03-15 11:41

    【NanoPi M2試用體驗】安裝超聲波模塊測距

    本帖最后由 可樂丸子 于 2016-6-9 13:45 編輯 下面介紹在友善NanoPi M2上連接超聲波模塊HY-SRF05測距方法首先需要連接NanoPi M2開發板和超聲波模塊
    發表于 06-09 13:42

    勇敢的芯伴你玩轉Altera FPGA連載73:基于SignalTap II的超聲波測距調試之超聲波測距原理

    測試距離為2cm~400cm,測距精度可以達到2mm。假設超聲波模塊與障礙物間的距離為S(單位:m),ECHO輸出的高脈沖寬度為T(單位:s),聲速在25°C條件下定義為346(單位:m/s)。那么
    發表于 05-28 22:09

    超聲波模塊測距不算精準

    哪位用過超聲波模塊的?淘寶上買回來,調試,發現測距不算精準,只有對著平面還好,對著人的話,數據不穩定,有解決方法嗎?還是制作工藝已經決定了?
    發表于 04-10 20:54

    超聲波測距原理

    到達障礙物后被反射回來,傳感器接收到反射脈沖后立即停止計時,然后根據超聲波的傳播速度和計時時間就能計算出兩端的距離。2.超聲波模塊此次采用的是市面上常用的超聲波模塊HC-SR04;HC-SR04參數...
    發表于 07-21 07:01

    基于STM32的超聲波測距設計

    基于STM32F103的超聲波測距(定時器)使用的硬件設備:stm32f103c8t6,0.96寸OLED,超聲波模塊HC-SR04廢話不多說,上程序就對了(親測有效)超聲波模塊
    發表于 07-22 08:53

    如何使用超聲波模塊實現測距功能?

    超聲波測距原理是什么?如何使用超聲波模塊實現測距功能?
    發表于 10-27 06:35

    超聲波測距的相關資料分享

    超聲波測距超聲波測距原理超聲波模塊說明書代碼解析超聲波測距
    發表于 12-08 08:06

    如何通過HC-SR04超聲波模塊去實現測距功能呢

    HC-SR04超聲波模塊是什么?如何通過HC-SR04超聲波模塊去實現測距功能呢?
    發表于 12-13 06:00

    超聲波模塊測量距離防碰撞分析

    超聲波模塊測量距離防碰撞1.超聲波測距:原理:超聲測距其實就是通過單片機控制超聲波模塊發出一系列
    發表于 01-05 06:02

    超聲波模塊為什么測距不準?

    超聲波模塊為什么測距不準,只有在拿一本書靠近模塊時,測得比較準,但是測到人的距離就不怎么準
    發表于 10-31 07:23

    STM32_超聲波測距

    超聲波測距超聲波測距原理超聲波模塊說明書代碼解析超聲波測距
    發表于 11-25 10:51 ?164次下載
    STM32_<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>

    基于CW32的超聲波模塊的應用

    C-SR04超聲波模塊是一種常用的測距模塊,其通過發射超聲波并接收其反射信號來實現測距功能。
    的頭像 發表于 09-06 09:13 ?659次閱讀
    亚洲欧美日韩精品久久_久久精品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>