加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

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

06/21 10:10
3014
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

這個(gè)是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里

STM32智能小車V3-STM32入門教程-openmv與STM32循跡小車-stm32f103c8t6-電賽 嵌入式學(xué)習(xí) PID控制算法 編碼器電機(jī) 跟隨

15.1-超聲波測(cè)距

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

硬件介紹

使用:HC-SR04 超聲波測(cè)距模塊

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

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

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

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

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

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

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

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

原因:

  1. 留一個(gè)定時(shí)器 方便以后擴(kuò)展FreeRTOS使用
  2. 或者擴(kuò)展其他舵機(jī)、電機(jī)等

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

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

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

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

在這里插入圖片描述
因?yàn)槲覀儾贿m用定時(shí)器所以我們需要自己寫一個(gè)us級(jí)延時(shí)函數(shù)
在這里插入圖片描述

/*******************
*  @brief  us級(jí)延時(shí)
*  @param  usdelay:要延時(shí)的us時(shí)間
*  @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  無(wú)
*  @return 障礙物距離單位:cm (靜止表面平整精度更高) 
*注意:兩個(gè)HC_SR04_Read()函數(shù)調(diào)用的時(shí)間間隔要2ms及以上,測(cè)量范圍更大 精度更高 
*******************/
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é)束,設(shè)置為低電平
	
	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;//超時(shí)退出循環(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 延時(shí),但是整個(gè)循環(huán)大概2us左右
		if(i >100000) return -2;//超時(shí)退出循環(huán)
	}
	Distance = i*2*0.033/2;//這里乘2的原因是上面是2微妙
	return Distance	;
}

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

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

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

然后把我們的手機(jī)藍(lán)牙和小車藍(lán)牙連接

手機(jī)顯示
在這里插入圖片描述

15.2-避障邏輯編寫

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

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

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

聯(lián)系:Q,1930299709

  • 聯(lián)系方式.txt

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
EPCQ64ASI16N 1 Intel Corporation Memory Circuit, 8MX8, CMOS, PDSO16, SOIC-16

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看
AQY282S 1 Panasonic Electronic Components Solid State Relay,
$1.69 查看
ABM3C-25.000MHZ-D4Y-T 1 Abracon Corporation CRYSTAL 25.0000MHZ 18PF SMD

ECAD模型

下載ECAD模型
$2.57 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜