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

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

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

第15章-超聲波避障功能 HC-SR04超聲波測距模塊詳解STM32超聲波測距

dfhjgfg ? 來源:dfhjgfg ? 作者:dfhjgfg ? 2024-08-21 15:41 ? 次閱讀

功能介紹放開頭, 使用便捷無需愁

這是全網(wǎng)最詳細、性價比最高的STM32實戰(zhàn)項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節(jié)代碼手把手教會你如何開發(fā)和調(diào)試。讓你更快掌握嵌入式系統(tǒng)開發(fā)。

**V3.3.0-STM32智能小車 **

**視頻: **[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]

V3:HAL庫開發(fā)、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。

15.1-超聲波測距

完成超聲波測距功能、測量數(shù)據(jù)顯示在OLED屏幕上

硬件介紹

**使用:HC-SR04 超聲波測距模塊 **

注意: 繪制PCB注意四個引腳順序 Vcc Trig Echo Gnd

** 供電3.3V-5V(最好5V)**
在這里插入圖片描述

測距原理
在這里插入圖片描述
不同模式
在這里插入圖片描述
GPIO模式
在這里插入圖片描述
查看原理圖

通過超聲波的硬件介紹我們知道

** MCU給Trig腳一個大于10us的高電平脈沖;然后讀取Echo腳的高電平信號時間,通過公式:距離 = T* 聲速/2 就可以算出來距離。**

Trig(PB5)我們配置為GPIO輸出

Echo(PA6)我們配置GPIO輸入功能

注:這里大家可能會問,為什么不使用定時器捕獲功能?

原因:

  1. 留一個定時器 方便以后擴展FreeRTOS使用
  2. 或者擴展其他舵機、電機

在這里插入圖片描述
在這里插入圖片描述
軟件初始化

設置PB5輸出模式然后起別名
在這里插入圖片描述
設置PA6輸入模式、
在這里插入圖片描述
然后生成代碼

自己新建HC_SR04.c和HC_SR04.h 然后加入工程,指定路徑

防止溢出 把之前使用的數(shù)組調(diào)整大一些

在這里插入圖片描述
因為我們不適用定時器所以我們需要自己寫一個us級延時函數(shù)
在這里插入圖片描述

/*******************
*  @brief  us級延時
*  @param  usdelay:要延時的us時間
*  @return  
*
*******************/
void HC_SR04_Delayus(uint32_t usdelay)
{
  __IO uint32_t Delay = usdelay * (SystemCoreClock / 8U / 1000U/1000);//SystemCoreClock:系統(tǒng)頻率
  do
  {
    __NOP();
  }
  while (Delay --);
}

在這里插入圖片描述

/*******************
*  @brief  HC_SR04讀取超聲波距離
*  @param  無
*  @return 障礙物距離單位:cm (靜止表面平整精度更高) 
*注意:兩個HC_SR04_Read()函數(shù)調(diào)用的時間間隔要2ms及以上,測量范圍更大 精度更高 
*******************/
float HC_SR04_Read(void)
{
uint32_t i = 0;
float Distance;
HAL_GPIO_WritePin(HC_SR04_Trig_GPIO_Port,HC_SR04_Trig_Pin,GPIO_PIN_SET);//輸出15us高電平
HC_SR04_Delayus(15);
HAL_GPIO_WritePin(HC_SR04_Trig_GPIO_Port,HC_SR04_Trig_Pin,GPIO_PIN_RESET);//高電平輸出結(jié)束,設置為低電平

while(HAL_GPIO_ReadPin(HC_SR04_Echo_GPIO_Port,HC_SR04_Echo_Pin) == GPIO_PIN_RESET)//等待回響高電平
{
i++;
HC_SR04_Delayus(1);
if(i >100000) return -1;//超時退出循環(huán)、防止程序卡死這里
}
i = 0;
while(HAL_GPIO_ReadPin(HC_SR04_Echo_GPIO_Port,HC_SR04_Echo_Pin) == GPIO_PIN_SET)//下面的循環(huán)是2us
{
i = i+1;
HC_SR04_Delayus(1);//1us 延時,但是整個循環(huán)大概2us左右
if(i >100000) return -2;//超時退出循環(huán)
}
Distance = i*2*0.033/2;//這里乘2的原因是上面是2微妙
return Distance;
}

然后就可以讀距離了、連上藍牙可以顯示數(shù)據(jù)

注意:兩個HC_SR04_Read()函數(shù)調(diào)用的時間間隔要2ms及以上,測量范圍更大 精度更高
在這里插入圖片描述

sprintf((char *)Usart3String,"HC_SR04:%.2fcmrn",HC_SR04_Read());//顯示超聲波數(shù)據(jù)
HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),0xFFFF);//通過串口三輸出字符 strlen:計算字符串大小
?

然后把我們的手機藍牙和小車藍牙連接

手機顯示
在這里插入圖片描述

15.2-避障邏輯編寫

在這里插入圖片描述
然后我們編寫循跡邏輯,我們的邏輯時
在這里插入圖片描述

//**************避障功能********************//
//避障邏輯
if(HC_SR04_Read() > 25)//前方無障礙物
{
motorPidSetSpeed(1,1);//前運動
HAL_Delay(100);
}
else{//前方有障礙物
motorPidSetSpeed(-1,1);//右邊運動 原地
HAL_Delay(500);
if(HC_SR04_Read() > 25)//右邊無障礙物
{
motorPidSetSpeed(1,1);//前運動
HAL_Delay(100);
}
else{//右邊有障礙物
motorPidSetSpeed(1,-1);//左邊運動 原地
HAL_Delay(1000);
if(HC_SR04_Read() >25)//左邊無障礙物
{
 motorPidSetSpeed(1,1);//前運動
HAL_Delay(100);
}
else{
motorPidSetSpeed(-1,-1);//后運動
HAL_Delay(1000);
motorPidSetSpeed(-1,1);//右邊運動
HAL_Delay(50);
}
}
}

這樣我們就可以使用超聲波讀取距離值了。
下篇16章我們i講解如何利用超聲波做跟隨,我們后面會定距離跟隨的功能。

審核編輯 黃宇

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

    關(guān)注

    2260

    文章

    10831

    瀏覽量

    352695
  • 超聲波測距
    +關(guān)注

    關(guān)注

    5

    文章

    246

    瀏覽量

    37745
  • 超聲波避障
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    2773
收藏 人收藏

    評論

    相關(guān)推薦

    超聲波測距原理

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

    關(guān)于HC-SR04超聲波測距模塊

    參考:某寶HC-SR04 超聲波測距模塊商品詳情頁1.關(guān)于HC-SR04 超聲波
    發(fā)表于 08-10 06:24

    如何利用HC-SR04超聲波測距模塊去實現(xiàn)精確的直線測距

    超聲波測距原理是什么?利用STM32驅(qū)動HC-SR04需要做好哪幾個關(guān)鍵點?如何利用HC-SR04超聲
    發(fā)表于 10-20 07:28

    HC-SR04超聲波測距模塊的相關(guān)資料分享

    51單片機學習路之HC-SR04超聲波模塊前言 本人是一個小白,第一次寫博客,基礎欠佳,有待夯實,能力不足,需要進步。大概會在此博客中漏洞百出,望君在閱讀后可以進行批評指正,不勝感
    發(fā)表于 11-23 07:47

    基于stm32HC-SR04超聲波測距模塊怎么使用?

    基于stm32HC-SR04超聲波測距模塊怎么使用?
    發(fā)表于 11-25 09:15

    如何利用現(xiàn)成的SysTick去實現(xiàn)HC-sr04超聲波測距

    什么是HC-sr04超聲波測距模塊呢?HC-sr04超聲波
    發(fā)表于 12-02 08:10

    HC-SR04超聲波測距模塊原理

    、HC-SR04超聲波測距模塊原理1.模塊簡介HC-SR04
    發(fā)表于 12-06 07:14

    如何通過HC-SR04超聲波模塊去實現(xiàn)測距功能

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

    HC-SR04超聲波測距模塊簡介

    1 簡介HC-SR04超聲波測距模塊可提供 2cm-400cm的非接觸式距離感測功能,測 距精度可達高到 3mm ;
    發(fā)表于 01-06 06:05

    HC-SR04超聲波測距模塊及程序

    HC-SR04超聲波測距模塊及程序HC-SR04超聲波測距
    發(fā)表于 12-08 16:50 ?83次下載

    超聲波測距模塊HC-SR04)用戶手冊

    超聲波資料,超聲波測距模塊HC-SR04)用戶手冊。
    發(fā)表于 12-19 14:01 ?87次下載

    簡單的超聲波測距模塊制作_HC-SR04超聲波測距模塊及制作圖詳解

    本文主要介紹的是HC-SR04超聲波測距模塊及制作圖詳解,首先介紹了超聲波
    發(fā)表于 05-18 09:40 ?5.3w次閱讀
    簡單的<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>模塊</b>制作_<b class='flag-5'>HC-SR04</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>模塊</b>及制作圖<b class='flag-5'>詳解</b>

    使用單片機和HC-SR04設計超聲波測距系統(tǒng)的設計資料合集

    HC-SR04超聲波測距模塊配套資料合集免費下載包括了:STC89C52RC系列手冊,PCB截圖,基于單片機的超聲波
    發(fā)表于 11-06 08:00 ?135次下載
    使用單片機和<b class='flag-5'>HC-SR04</b>設計<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>系統(tǒng)的設計資料合集

    HC-SR04超聲波測距塊講解(附32單片機源碼)

    、HC-SR04超聲波測距模塊原理1.模塊簡介HC-SR04
    發(fā)表于 11-23 18:21 ?131次下載
    <b class='flag-5'>HC-SR04</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>塊講解(附32單片機源碼)

    超聲波測距資料(HC-SR04)_TB

    超聲波測距資料(HC-SR04)_TB 超聲波PIC單片機C程序超聲波測距51C程序
    發(fā)表于 03-14 15:13 ?195次下載