STM32 | HC-SR04 超聲波傳感器測距

模塊:HC-SR04

感應角度:不大于15度?

探測距離:2cm-450cm??????

高精度:可達0.3cm

Trig:觸發信號,接收MCU發送的控制脈沖,MCU對應GPIO 設置為輸出

Echo:反饋信號,向MCU發送數據脈沖,?MCU對應GPIO 設置為輸入

VCC:3.3V~5V

超聲波測距原理:

  1. 超聲波發射裝置向某一方向發出超聲波,并開始計時
  2. 超聲波在空氣中傳播,途中碰到障礙物就立即返回來
  3. 接收器接收到超聲波的時間差,就停止計時
  4. 根據超聲波在空氣中傳播速度(340m/s),再根據計時器記錄的時間t,可以算出距離(s)

似乎有多種模式,本文只使用GPIO模式:

單片機操作步驟:

(1)采用IO口TRIG觸發測距,給最少10us的高電平信號。

(2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回;

(3)有信號返回, 超聲波模塊通過ECHO引腳輸出一個高電平(ECHO輸出的高電平持續時間,就是處理的結果), 高電平持續的時間就是超聲波從發射到返回的時間。

代碼

UltraSonic_Init()

  1. 配置 GPIOG 的 14 腳為 Trig 輸出,15 腳為 Echo 輸入
  2. 配置 TIM4 定時器為 1MHz 計數頻率 (1us / 計數)
  3. 設置最大測量時間為 50ms (50000 計數)
void UltraSonic_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;TIM_TimeBaseInitTypeDef  	TIM_TimeBaseInitStruct;// UlatrSonic-->PG14,PG15RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	 //使能PG端口時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;               // TrigGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHzGPIO_Init(GPIOG, &GPIO_InitStructure);					 //根據設定參數初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	    		 // EchoGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;            //設置成上拉輸入GPIO_Init(GPIOG, &GPIO_InitStructure);	  				 //推挽輸出 ,IO口速度為50MHz// 設置一個定時器,1us計數1個數,不用中斷,且開始時不使能定時器//1、能定時器時鐘。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);TIM_TimeBaseInitStruct.TIM_Prescaler	= 84-1;	            //84MHZ/8400 = 10000HZ  Prescaler范圍1~65536 TIM_TimeBaseInitStruct.TIM_Period		= 50000-1;		    //在10000HZ時鐘頻率下,用時1ms 自動重裝載寄存器值TIM_TimeBaseInitStruct.TIM_CounterMode	= TIM_CounterMode_Up;//向上計數TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1;  	 //分頻因子//2、初始化定時器TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);//【不使能定時器】TIM_Cmd(TIM4, DISABLE);
}

UltraSonic_GetDistance()

  1. 發送 15us 的高電平觸發信號,然后拉低引腳
  2. 等待模塊返回的 Echo 信號(高電平)
  3. 高電平來了,開始定時器計時,目的是測量 Echo 高電平持續時間
  4. 低電平來了,停止定時器計時,得到 Echo 高電平持續時間
  5. 根據超聲波在空氣中的傳播速度 (340m/s) 計算距離
float UltraSonic_GetDistance()
{float distance_cm = 0;u32 time_us = 0;//**************************************//啟動超聲波模塊 也就是要發送啟動信號GPIO_ResetBits(GPIOG, GPIO_Pin_14);delay_us(5);//高電平需要10us以上---【啟動信號】GPIO_SetBits(GPIOG, GPIO_Pin_14);delay_us(15);GPIO_ResetBits(GPIOG, GPIO_Pin_14);//*********************************//設置定時器的CNT值為0,設置初值TIM_SetCounter(TIM4,0);//等待ECHO的高電平到來while(GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_15)==Bit_RESET);//**************************//【高電平來了】-------啟動定時器TIM_Cmd(TIM4,ENABLE);//等待ECHO的低電平到來while(GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_15)==Bit_SET);//****************************//【低電平來了】------讀時間數據,關定時器//取出CNT的值-----定時器的當前值time_us = TIM_GetCounter(TIM4);    // 微秒 (μs)。//關閉定時器TIM_Cmd(TIM4, DISABLE);//**************************************//【通過公式】: // distance (m) * 2 = time * 10(-6) * 340m/s// distance (m)     = time * 10(-6) * 340m/s / 2// distance (cm)    = time * 10(-6) * 340m/s / 2 * 100 = time * 10(-3) * 17distance_cm = time_us * 0.017;   // distance = time / 58;return distance_cm;
}

調用程序:

void ULTRA_SONIC_task(void *pvParameters)
{float distance_cm = 0;while(1){printf("ULTRA_SONIC_task \r\n");distance_cm = UltraSonic_GetDistance();printf("distance = %f  (cm) \r\n",distance_cm);delay_ms(3000);}
}

輸出結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89269.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【RTSP從零實踐】12、TCP傳輸H264格式RTP包(RTP_over_TCP)的RTSP服務器(附帶源碼)

😁博客主頁😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客內容🤑:🍭嵌入式開發、Linux、C語言、C、數據結構、音視頻🍭 🤣本文內容🤣&a…

【unitrix】 6.1 類型化整數特征(t_int.rs)

一、源碼 這段代碼定義了一個 Rust 特征(trait)TInt 和一些實現,用于表示類型化的整數。 use crate::number::{Null, B, Bit, TNumber};/// 類型化整數標記特征 /// /// 要求: /// - 實現 TNumber /// - 可復制 (Copy) /// - 默認…

速通LVS

一、LVS的使用lvs部署命令介紹lvs軟件相關信息:程序包:ipvsadm Unit File: ipvsadm.service 主程序:/usr/sbin/ipvsadm 規則保存工具:/usr/sbin/ipvsadm-save 規則重載工具:/usr/sbin/ipvsadm-restore 配置文件&#x…

Nginx,MD5和Knife4j

一、 Nginx: 項目網關與流量調度核心原理反向代理 (Reverse Proxy):在Web架構中,Nginx作為系統的統一入口(API網關),接收所有外部客戶端請求。它通過解析請求的URL路徑(location指令),判斷請求的…

多態,內部類(匿名內部類),常用API(1)

多態 什么是多態? 同一個對象在不同時刻表現出來的不同形態(多種形態) 例:Cat extends Animal 第一種形態:Cat c1 new Cat(); //c1是只貓 第二種形態:Animal c2 new Cat(); //c2是個動物 &#xff08…

Qt小組件 - 7 SQL Thread Qt訪問數據庫ORM

簡介網上關于Qt訪問數據庫的資料大多使用QSqlDatabase模塊。雖然這在C中尚可接受,但在Python中使用就顯得過于繁瑣了——不僅要手動編寫SQL語句,還與Python追求簡潔的理念背道而馳。在這里寫一個基于sqlalchemy的示例,也可以使用其他的ORM庫 …

使用Gin框架構建高并發教練預約微服務:架構設計與實戰解析

項目概述 技術棧 Web框架:Gin(高性能HTTP框架)數據存儲:Redis(內存數據庫,用于高并發讀寫) 項目結構 coach-booking-service ├── main.go # 程序入口,路由初始化&am…

深入拆解Spring第二大核心思想:AOP

什么是AOP Aspect Oriented Programming(面向切面編程) 什么是面向切面編程呢? 切?就是指某?類特定問題, 所以AOP也可以理解為面向特定方法編程. 什么是面向特定方法編程呢? 比如對于"登錄校驗", 就是?類特定問題. 登錄校驗攔截器, 就是…

linux服務器stress-ng的使用

安裝方法 ? Ubuntu/Debian:sudo apt update && sudo apt install stress-ng -y? CentOS/RHEL(需EPEL源):sudo yum install epel-release -ysudo yum install stress-ng -y? 源碼編譯(適合定制化需求&#x…

探索阿里云DMS:解鎖高效數據管理新姿勢

一、阿里云 DMS 是什么 阿里云 DMS,全稱為 Data Management Service,即數據管理服務 ,是一種集數據管理、結構管理、安全管理于一體的全面數據庫服務平臺。它能夠有效地支持各類數據庫產品,包括但不限于 MySQL、SQL Server、Post…

python爬取新浪財經網站上行業板塊股票信息的代碼

在這個多行業持續高速發展的時代,科技正在改變著我們的生活。 在世界科技領域中,中國正占據越來越重要的位置。當下,每個行業都提到了區塊鏈、人工智能、大數據、5G等科技力量,強調了科技在行業咨詢與數據分析領域的重要意義。 隨…

【JAVA】監聽windows中鼠標側面鍵的按鈕按下事件

監聽windows中鼠標側面鍵的按鈕按下事件用到的包核心類使用這個類用到的包 jna-5.11.0.jar jna-platform-5.11.0.jar核心類 package sample.tt.mouse;import com.sun.jna.Pointer; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.WinDef.HMODULE; …

Redis突發寫入阻斷?解析“MISCONF Redis is configured to save RDB…“故障處理

當你的Redis服務器突然拒絕寫入并拋出 MISCONF Redis is configured to save RDB snapshots... 錯誤時,別慌!這是Redis的數據安全保護機制在發揮作用。本文帶你深度解析故障根因,并提供完整的解決方案。🔥 故障現象還原 客戶端&am…

產品更新丨谷云科技 iPaaS 集成平臺 V7.6 版本發布

六月,谷云科技iPaaS集成平臺更新了V7.6版本。這次更新中我們著重對API網關、API編排、組織管理權限、API監控等功能進行了增強以及優化,一起來看看有什么新變化吧! 網關、監控、編排、組織權限全方位升級 1.API網關 錯誤碼預警,可…

圖像處理中的模板匹配:原理與實現

目錄 一、什么是模板匹配? 二、模板匹配的匹配方法 1. 平方差匹配(cv2.TM_SQDIFF) 2. 歸一化平方差匹配(cv2.TM_SQDIFF_NORMED) 3. 相關匹配(cv2.TM_CCORR) 4. 歸一化相關匹配&#xff08…

高性能架構模式——高性能NoSQL

目錄 一、關系數據庫的缺點二、常見的 NoSQL 方案分 類2.1、K-V 存儲2.2、文檔數據庫2.3、列式數據庫2.4、全文搜索引擎三、高性能 NoSQL 方案的典型特征和應用場景3.1、K-V 存儲典型特征和應用場景3.2、文檔數據庫典型特征和應用場景3.1.1、文檔數據庫的 no-schema 特性的優勢…

正確選擇光伏方案設計軟件:人力成本優化的關鍵一步

在競爭激烈的市場環境中,企業無不追求效率提升與成本控制。設計環節作為產品開發的核心流程,其效率高低直接影響整體項目進度與資源消耗。錯誤的設計軟件選擇如同在信息高速公路上設置路障——它不會阻止前行,卻會讓每一次溝通、每一次修改都…

Git問題排查與故障解決詳解

前言 在使用Git進行版本控制的過程中,開發者常常會遇到各種各樣的問題和錯誤。本文將詳細介紹常見的Git問題及其解決方法,幫助開發者快速定位和解決問題,避免在開發過程中浪費時間。 1. 基礎錯誤與解決 1.1 身份配置問題 問題&#xff1a…

使用Xinference部署語音模型實現文本轉語音:完整指南

文章目錄引言環境準備1. 安裝Xinference2. 啟動Xinference服務3. 部署語音模型Python實現文本轉語音關鍵參數說明應用場景性能優化建議常見問題解決結語引言 文本轉語音(Text-to-Speech, TTS)技術在智能助手、有聲讀物、語音導航等應用中扮演著重要角色…

【C#】實體類定義的是long和值識別到的是Int64,實體類反射容易出現Object does not match target type

🌹歡迎來到《小5講堂》🌹 🌹這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。🌹 🌹溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!&#…