前言
通過(guò)利用超聲波在空氣中的傳播速度為已知,測(cè)量聲波在發(fā)射后遇到障礙物反射回來(lái)的時(shí)間,根據(jù)發(fā)射和接收的時(shí)間差計(jì)算出發(fā)射點(diǎn)到障礙物的實(shí)際距離。
HC-SR04模塊
**HC-SR04超聲波模塊常用于機(jī)器人避障、物體測(cè)距、液位檢測(cè)、公共安防、停車(chē)場(chǎng)檢測(cè)等場(chǎng)所。HC-SR04超聲波模塊主要是由兩個(gè)通用的壓電陶瓷超聲傳感器,并加外圍信號(hào)處理電路構(gòu)成的。
參數(shù):
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 |
控制流程
- 通過(guò)Trig引腳發(fā)一個(gè) 10US 以上的高電平,模塊自動(dòng)發(fā)送 8 個(gè) 40khz 的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;
- 有信號(hào)返回時(shí),Echo有高電平輸出,高電平時(shí)間即是超聲波往返時(shí)間。
- 測(cè)試距離 = (高電平時(shí)間 *聲速)/2
通過(guò)單片機(jī)的定時(shí)器獲得計(jì)時(shí)功能來(lái)獲得檢測(cè)距離,開(kāi)啟定時(shí)器后TH和TL寄存器數(shù)值會(huì)自動(dòng)增加。直到關(guān)閉定時(shí)器,再讀出其中的數(shù)值即可計(jì)算距離。
/*開(kāi)始計(jì)時(shí)*/
while (!ECHO);//當(dāng)ECHO為高電平的時(shí)候,跳出循環(huán),并開(kāi)始記錄時(shí)間
TR0 = 1;//啟動(dòng)定時(shí)器0,開(kāi)啟計(jì)時(shí)
while (ECHO);//ECHO不為0,即脈沖返回結(jié)束,計(jì)時(shí)結(jié)束
TR0 = 0;//停止計(jì)時(shí),此時(shí)的ECHO的高電平時(shí)間就是 超聲波發(fā)出到重新返回接收所用的時(shí)間
代碼
#ifndef _HC_SR04_H_
#define _HC_SR04_H_
#include //提供_nop_();/*供HC-SR04提供啟動(dòng)時(shí)間*/
?
/*位定義*/
sbit TRIG = P1 ^ 0;
sbit ECHO = P1 ^ 1;
?
/*全局變量定義,超出距離標(biāo)志位為1,不超出為0*/
bit HC_SR04_flag;
?
/*函數(shù)聲明*/
void HC_SR04_Init(void);//初始化T0定時(shí)器,用于HC_SR04
?
unsigned int HC_SR04(void);//返回距離
?
#endif
#include "HC_SR04.h"
?
/*******************************************************************************
** 函數(shù)名稱(chēng): HC_SR04_Init
** 功能描述: 初始化定時(shí)器0,用以記錄從發(fā)射到返回的時(shí)間Time
** 參數(shù)說(shuō)明: void
** 返回說(shuō)明: void
** 創(chuàng)建人員: Main
** 創(chuàng)建日期: 2020-06-01
**------------------------------------------------------------------------------
** 修改人員:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void HC_SR04_Init(void)
{
TMOD |= 0x01;
?
TH0 = 0;
TL0 = 0;
ET0 = 1; //允許T0中斷,可關(guān)閉,只有特別大的才開(kāi)
EA = 1;
?
TRIG = 0; //先使啟動(dòng)端置低,等待高電平啟動(dòng)
}
?
?
/*******************************************************************************
** 函數(shù)名稱(chēng): HC_SR04
** 功能描述: 返回測(cè)量距離
** 參數(shù)說(shuō)明: void
** 返回說(shuō)明: 測(cè)量距離,單位(cm)
** 創(chuàng)建人員: Main
** 創(chuàng)建日期: 2020-12-22
**------------------------------------------------------------------------------
** 修改人員: Main
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
unsigned int HC_SR04(void)
{
unsigned int distance;//用于記錄測(cè)得的距離
unsigned int time;//用于記錄超聲波發(fā)出到重新返回接收所用的時(shí)間
?
/*啟動(dòng)HC_SR04*/
TRIG = 1;//升高電平,打開(kāi)觸發(fā)信號(hào)
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG = 0;
?
/*開(kāi)始計(jì)時(shí)*/
while (!ECHO);//當(dāng)ECHO為高電平的時(shí)候,跳出循環(huán),并開(kāi)始記錄時(shí)間,當(dāng)為低電平時(shí)卡住不動(dòng)
?
TR0 = 1;//啟動(dòng)定時(shí)器0,開(kāi)啟計(jì)時(shí)
while (ECHO);//ECHO不為0,即脈沖返回結(jié)束,計(jì)時(shí)結(jié)束
TR0 = 0;//停止計(jì)時(shí),此時(shí)的ECHO的高電平時(shí)間就是 超聲波發(fā)出到重新返回接收所用的時(shí)間
?
/*計(jì)算時(shí)間及距離*/
time = (TH0 * 256 + TL0) * 1.29; //可改變此數(shù)據(jù)來(lái)提高精確度
distance = (time * 0.034) / 2; //單位是cm,0.34是mm
?
?
TH0 = 0; //清零,進(jìn)行下一次測(cè)距
TL0 = 0;
?
//返回距離
return distance;
}
?
/*******************************************************************************
** 函數(shù)名稱(chēng): T0_Time_Sr04
** 功能描述: 超出測(cè)量距離的異常
** 參數(shù)說(shuō)明: None
** 返回說(shuō)明: void
** 創(chuàng)建人員: Main
** 創(chuàng)建日期:
**------------------------------------------------------------------------------
** 修改人員:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void T0_Time_Sr04() interrupt 1
{
HC_SR04_flag = 1;
//TI=1;
//printf("超出距離");
//TI=0;
}
?
?
-
單片機(jī)
+關(guān)注
關(guān)注
6040文章
44592瀏覽量
636891 -
超聲波
+關(guān)注
關(guān)注
63文章
3028瀏覽量
138509 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5705瀏覽量
123910 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3254瀏覽量
115070
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論