前言
通過利用超聲波在空氣中的傳播速度為已知,測量聲波在發射后遇到障礙物反射回來的時間,根據發射和接收的時間差計算出發射點到障礙物的實際距離。
HC-SR04模塊
**HC-SR04超聲波模塊常用于機器人避障、物體測距、液位檢測、公共安防、停車場檢測等場所。HC-SR04超聲波模塊主要是由兩個通用的壓電陶瓷超聲傳感器,并加外圍信號處理電路構成的。
參數:
Operating Voltage | Dc5V |
---|---|
Operating Current | 15ma |
Operating Frequency | 40KHz |
Max Range | 4m |
Min Range | 2cm |
Ranging Accuracy | 3mm |
Measuring Angle | 15° |
Trigger Input Signal | 10μS TTL脈沖 |
Dimension | 45 x 20 x 15 |
控制流程
- 通過Trig引腳發一個 10US 以上的高電平,模塊自動發送 8 個 40khz 的方波,自動檢測是否有信號返回;
- 有信號返回時,Echo有高電平輸出,高電平時間即是超聲波往返時間。
- 測試距離 = (高電平時間 *聲速)/2
通過單片機的定時器獲得計時功能來獲得檢測距離,開啟定時器后TH和TL寄存器數值會自動增加。直到關閉定時器,再讀出其中的數值即可計算距離。
/*開始計時*/
while (!ECHO);//當ECHO為高電平的時候,跳出循環,并開始記錄時間
TR0 = 1;//啟動定時器0,開啟計時
while (ECHO);//ECHO不為0,即脈沖返回結束,計時結束
TR0 = 0;//停止計時,此時的ECHO的高電平時間就是 超聲波發出到重新返回接收所用的時間
代碼
#ifndef _HC_SR04_H_
#define _HC_SR04_H_
#include //提供_nop_();/*供HC-SR04提供啟動時間*/
?
/*位定義*/
sbit TRIG = P1 ^ 0;
sbit ECHO = P1 ^ 1;
?
/*全局變量定義,超出距離標志位為1,不超出為0*/
bit HC_SR04_flag;
?
/*函數聲明*/
void HC_SR04_Init(void);//初始化T0定時器,用于HC_SR04
?
unsigned int HC_SR04(void);//返回距離
?
#endif
#include "HC_SR04.h"
?
/*******************************************************************************
** 函數名稱: HC_SR04_Init
** 功能描述: 初始化定時器0,用以記錄從發射到返回的時間Time
** 參數說明: void
** 返回說明: void
** 創建人員: Main
** 創建日期: 2020-06-01
**------------------------------------------------------------------------------
** 修改人員:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void HC_SR04_Init(void)
{
TMOD |= 0x01;
?
TH0 = 0;
TL0 = 0;
ET0 = 1; //允許T0中斷,可關閉,只有特別大的才開
EA = 1;
?
TRIG = 0; //先使啟動端置低,等待高電平啟動
}
?
?
/*******************************************************************************
** 函數名稱: HC_SR04
** 功能描述: 返回測量距離
** 參數說明: void
** 返回說明: 測量距離,單位(cm)
** 創建人員: Main
** 創建日期: 2020-12-22
**------------------------------------------------------------------------------
** 修改人員: Main
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
unsigned int HC_SR04(void)
{
unsigned int distance;//用于記錄測得的距離
unsigned int time;//用于記錄超聲波發出到重新返回接收所用的時間
?
/*啟動HC_SR04*/
TRIG = 1;//升高電平,打開觸發信號
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG = 0;
?
/*開始計時*/
while (!ECHO);//當ECHO為高電平的時候,跳出循環,并開始記錄時間,當為低電平時卡住不動
?
TR0 = 1;//啟動定時器0,開啟計時
while (ECHO);//ECHO不為0,即脈沖返回結束,計時結束
TR0 = 0;//停止計時,此時的ECHO的高電平時間就是 超聲波發出到重新返回接收所用的時間
?
/*計算時間及距離*/
time = (TH0 * 256 + TL0) * 1.29; //可改變此數據來提高精確度
distance = (time * 0.034) / 2; //單位是cm,0.34是mm
?
?
TH0 = 0; //清零,進行下一次測距
TL0 = 0;
?
//返回距離
return distance;
}
?
/*******************************************************************************
** 函數名稱: T0_Time_Sr04
** 功能描述: 超出測量距離的異常
** 參數說明: None
** 返回說明: void
** 創建人員: Main
** 創建日期:
**------------------------------------------------------------------------------
** 修改人員:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void T0_Time_Sr04() interrupt 1
{
HC_SR04_flag = 1;
//TI=1;
//printf("超出距離");
//TI=0;
}
?
?
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6065文章
44946瀏覽量
648282 -
超聲波
+關注
關注
63文章
3116瀏覽量
140034 -
51單片機
+關注
關注
277文章
5710瀏覽量
126871 -
定時器
+關注
關注
23文章
3297瀏覽量
117461
發布評論請先 登錄
相關推薦
熱點推薦
基于51單片機的超聲波測距系統
AT89C2051。采用12MHz高精度的晶振,以獲得較穩定時鐘頻率,減小測量誤差。單片機用P3.5端口輸出超聲波換能器所需的40kHz的方波信號,P3.6端口監測超聲波接收電路輸出的
發表于 03-25 10:21
基于SLH89F5162的單片機超聲波測距器設計
方案標題:基于SLH89F5162的單片機超聲波測距器設計方案概述:本設計旨在設計一種一種基于單片機實時語音播報,帶有LED數碼顯示功能的脈沖反射式
發表于 10-18 14:16
【51單片機—定時器應用】定時器計數、定時器中斷函數、while(1)三者之間是如何協調、工作?
51單片機程序,使用定時器時,定時器計數、定時器中斷函數、while(1)循環三者之間如何協調好整個流程?【
發表于 11-20 18:51
?12次下載

求助51單片機超聲波測距
**自己暑假搞了搞單片機,但是被困在了oled不顯示我測的實時數據,求幫忙**(stc89c52rc芯片,hc-sr04超聲波測距模塊)代碼如下:`#include &lt
發表于 11-23 18:21
?0次下載

單片機高級系列丨超聲波測距(LCD1602顯示)
單片機高級系列丨超聲波測距(LCD1602顯示)主程序#include&lt;reg51.h&gt;#include&
發表于 11-26 14:36
?12次下載

單片機高級系列丨超聲波測距(數碼管顯示)
單片機高級系列丨超聲波測距(數碼管顯示)超聲波模塊的TRIG管腳接在單片機的P20口,ECHO管腳接在單片機的P21口 其他的電源管腳接在
發表于 11-26 14:51
?24次下載

評論