加入星計劃,您可以享受以下權益:

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

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

06/21 10:10
2520
服務支持:
技術交流群

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

虛擬商品不可退

當前內容為數(shù)字版權作品,購買后不支持退換且無法轉移使用。

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

這個是全網(wǎng)最詳細的STM32項目教學視頻。
第一篇在這里:
視頻在這里

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

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ù)組調整大一些

在這里插入圖片描述
因為我們不適用定時器所以我們需要自己寫一個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ù)調用的時間間隔要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);//高電平輸出結束,設置為低電平
	
	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ù)調用的時間間隔要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講解如何利用超聲波做跟隨,我們后面會定距離跟隨的功能。

聯(lián)系:Q,1930299709

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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
KSZ9897RTXI-TR 1 Microchip Technology Inc IC ETHERNET SWITCH 7PORT 128TQFP

ECAD模型

下載ECAD模型
$12.98 查看
H11G1M 1 onsemi 6-Pin DIP High Voltage Photodarlington Output Optocoupler, 1000-BLKBG
$1.01 查看
HC49US-FF5F18-6.000MHZ 1 ILSI America LLC Parallel - Fundamental Quartz Crystal,
暫無數(shù)據(jù) 查看

相關推薦

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