當前位置:首頁 > 公眾號精選 > 程序員小哈
[導讀]HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達3mm; 模塊包括超聲波發(fā)射器、接收器與控制電路。 在智能小車的測距、避障,盲人拐杖,視力保護器(坐姿矯正),倒車雷達等應用中時常使用。 工作原理 HC-SR04基本工作原理: 使用

HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達3mm;

模塊包括超聲波發(fā)射器、接收器與控制電路。

在智能小車的測距、避障,盲人拐杖,視力保護器(坐姿矯正),倒車雷達等應用中時常使用。

工作原理

HC-SR04基本工作原理:

  1. 使用單片機的一個引腳發(fā)送一個至少10us高電平的TTL脈沖信號到模塊的Trig引腳,用于觸發(fā)模塊工作。

  2. 模塊檢測到觸發(fā)信號之后,會自動發(fā)送8個40khz的方波,然后自動切換至監(jiān)測模式,監(jiān)測是否有信號返回(超聲波信號遇障礙物會返回)。

  3. 如果有信號返回,通過模塊的Echo引腳會輸出一個高電平, 高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。

  4. 因為聲音在空氣中的速度為340米/秒,即可計算出所測的距離。

代碼實現(xiàn)

通過上面的分析,我們知道,獲得超聲波模塊測得的距離的難點就是求得Echo引腳輸出脈沖的高電平持續(xù)時間。

實現(xiàn)步驟:

  1. 初始化Trig引腳PA2為輸出模式,Echo引腳PA3為浮空輸入模式;
    初始化TIM4為1ms的定時器,msHcCount變量用于記錄定時器中斷次數(shù)。
//文件"sr04.h"中添加定義extern u32 msHcCount;
//超聲波硬件接口定義#define HCSR04_PORT GPIOA#define HCSR04_CLK RCC_APB2Periph_GPIOA#define HCSR04_TRIG GPIO_Pin_2#define HCSR04_ECHO GPIO_Pin_3
#define TRIG_Send PAout(2)#define ECHO_Reci GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)
//文件"sr04.c"中void Hcsr04Init(){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(HCSR04_PORT, &GPIO_InitStructure); GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG); GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(HCSR04_PORT, &GPIO_InitStructure); GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_DeInit(TIM4); TIM_TimeBaseStructure.TIM_Period = (1000-1); TIM_TimeBaseStructure.TIM_Prescaler =(72-1); TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM4, TIM_FLAG_Update); TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); Hcsr04_NVIC(); TIM_Cmd(TIM4,DISABLE); }


  1. 測量距離,下面代碼實現(xiàn)的是五次測量取平均值作為最終的結果。
    單次距離測量的方法采用了兩種實現(xiàn)方式:定時器方式和延時函數(shù)的方式。

  • 定時器方式,通過定時器4計數(shù)器值計算距離

當ECHO_Reci引腳的輸入電平由低變高時:即while(ECHO_Reci == 0); 循環(huán)為假時開始計時:OpenTimerForHc();

當ECHO_Reci引腳的輸入電平由高變低時,即while(ECHO_Reci == 1); 循環(huán)為假時結束計時:CloseTimerForHc();

計時結束,調用GetEchoTimer(void)函數(shù)計算總耗時,單位us。

u32 GetEchoTimer(void){ u32 t = 0; t = msHcCount*1000; t += TIM_GetCounter(TIM4); TIM4->CNT = 0;  delay_ms(50); return t;}

通過定時器4計數(shù)器值計算距離的具體實現(xiàn)代碼如下所示:

float Hcsr04GetLength(void ){ u32 t = 0; int i = 0; float lengthTemp = 0; float sum = 0; while(i<5) { TRIG_Send = 1;  delay_us(20); TRIG_Send = 0; while(ECHO_Reci == 0);  OpenTimerForHc();  i = i + 1; while(ECHO_Reci == 1); CloseTimerForHc();  t = GetEchoTimer();   lengthTemp = ((float)t/58.0);  sum = lengthTemp + sum ;  }  lengthTemp = sum/5.0; return lengthTemp;}
  • 延時函數(shù)方式計算距離

也是取五次測量值的平均值作為結果,在計算Echo引腳輸出高電平時間的時候,只要while(ECHO_Reci)為真,計時即+10us,直至高電平結束,即可獲得高電平持續(xù)的總時間。

測試結果部分可以看出此方法誤差較大,大家可以想想,問題出在哪里?

void HCSR04_Ranging(float *p){ u8 i=0; u32 j=0; float HCSR04_Temp = 0.0;  for(i=0;i<5;i++) { TRIG_Send=1; delay_us(40); TRIG_Send=0; while(!ECHO_Reci); while(ECHO_Reci) { delay_us(10); j++; } HCSR04_Temp+=j*10; //模塊最大可測距4m  j=0; delay_ms(60);//防止發(fā)射信號對回響信號的影響 }
*p= HCSR04_Temp/5/58.0; }

注意:文中多次使用類似while循環(huán):while(ECHO_Reci),其實這樣做容易讓單片機陷入死循環(huán),各位可以試著想想有沒有好的方式避免。

距離換算

查看手冊,我們會看到,手冊上說:

測量距離(cm) = 高電平持續(xù)的us數(shù) / 58

為什么us值/58即是以cm為單位的距離值呢?

正常的換算公式為:

測試距離 = (高電平時間*聲速(340m/s))/2

除以2的原因是,超聲波的信號是往返的耗時等于高電平時間,我們求距離,需要除以2。

上面的測量距離單位為m,高電平時間為s, 如果我們把測量距離的單位換為cm,高電平時間改為us, 則上面的公式就修改為:

測量距離cm = (高電平時間us/1000000) * 340 / 2 * 100

即測量距離cm = 高電平時間us * 17 / 1000;

即測量距離cm = 高電平時間us / (1000/17);而1000/17 ≈ 58.82

所以一般為了方便計算,距離換算就是將求得的高電平時間除以58,即得距離值,單位cm。

硬件連接


目前HC-SR04這個模塊有很多版本,最好選用3.3V和5V兼容的版本。


我也拿了一個5V的老版本做了一下測試,使用3.3V供電,測量的數(shù)據(jù)不對,什么也不改變的情況下,將電源引腳供電改為5V供電,返回的數(shù)據(jù)就正常了。

如果使用5V老版本的HC-SR04模塊,為了使系統(tǒng)能夠穩(wěn)定,最好選用5V耐受的IO引腳,諸如帶有下面FT標識的引腳。


實際效果圖

下面硬件使用的STM32核心板為我們“2020.06每月一練的核心板,需要資料的可以后臺回復“每月一練”獲取。

測試結果

分別將HC-SR04放置于障礙物前30cm、20cm、10cm處各測量兩次,具體數(shù)據(jù)如下所示:

通過上面我們可以看出,定時器的方式的準確度明顯高于延時函數(shù)的實現(xiàn)方式,自己分析一下,為什么延時函數(shù)的方式誤差會差這么多呢?

當然這里面的誤差還包括我擺放的原因導致的誤差。

資料獲取

微信公眾號后臺回復“SR04”,可以下載超聲波測距原理及實現(xiàn)網文對應的工程源碼。

尾語

在找回新號之后,就面臨著兩個選擇,是選擇更好的交流體驗,選擇帶有留言功能的新號呢?還是為了辛辛苦苦積攢的讀者,將就使用「程序員小哈」那個老號呢?

舍棄意味著從新開始,舍棄意味著讀者的數(shù)量也一并清零,猶豫再三,為了成為一個有靈魂的公眾號,還是選擇了有留言功能的新號。

我相信,大家經過一段時間與我的相處,大概知道我的為人,我相信在各位朋友的幫助下,我們的讀者數(shù)量很快就會超越老號,整體更進一步的。

希望各位新老朋友能幫忙宣傳一下,讓我們的公眾號越來越好,讓我有更多的熱情能夠寫出好的文章分享給大家。

程序員小哈這個公眾號也運營一段時間了,對其很有感情,也不想荒廢了。

未來兩個公眾號的定位:

程序員小哈」:分享嵌入式、物聯(lián)網相關領域精彩文章,分享圈內人員的經驗心得,我會認真篩選每一次的分享,希望各位能夠從中受益;

嵌入式從0到1」:堅持原創(chuàng),每周2~3篇技術分享,每月DIY一個的小項目,大家一起玩,一起進步,帶你走進嵌入式工程師的大門。

希望你能兩個都關注一段時間,觀察一段時間,如果你感覺沒有收獲,隨時取關,感謝你的支持!


PS:咱們的公眾號也有留言功能了,大家可以暢所欲言了^_^


新公眾號「嵌入式從0到1」,長按關注一波哈。



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉