超聲波簡(jiǎn)介
? ? ? 超聲波是由機(jī)械振動(dòng)產(chǎn)生的, 可在不同介質(zhì)中以不同的速度傳播, 具有定向性好、能量集中、傳輸過(guò)程中衰減較小、反射能力較強(qiáng)等優(yōu)點(diǎn)。超聲波傳感器可廣泛應(yīng)用于非接觸式檢測(cè)方法,它不受光線(xiàn)、被測(cè)物顏色等影響, 對(duì)惡劣的工作環(huán)境具有一定的適應(yīng)能力, 因此在水文液位測(cè)量、車(chē)輛自動(dòng)導(dǎo)航、物體識(shí)別等領(lǐng)域有著廣泛的應(yīng)用。
超聲波測(cè)距原理
? ? ? 超聲波測(cè)距是通過(guò)不斷檢測(cè)超聲波發(fā)射后遇到障礙物所反射的回波, 從而測(cè)出發(fā)射和接收回波的時(shí)間差Δt , 然后求出距離S 。在速度v 已知的情況下,距離S 的計(jì)算,公式如下:S = vΔt/ 2在空氣中,常溫下超聲波的傳播速度是334 米/秒,但其傳播速度V 易受空氣中溫度、濕度、壓強(qiáng)等因素的影響,其中受溫度的影響較大,如溫度每升高1 ℃, 聲速增加約0. 6 米/ 秒。因此在測(cè)距精度要求很高的情況下, 應(yīng)通過(guò)溫度補(bǔ)償?shù)姆椒▽?duì)傳播速度加以校正。已知現(xiàn)場(chǎng)環(huán)境溫度T 時(shí), 超聲波傳播速度V 的計(jì)算公式如下:
? ? ? V = 331. 5+0.607T
? ? ? 這樣, 只要測(cè)得超聲波發(fā)射和接收回波的時(shí)間差Δt 以及現(xiàn)場(chǎng)環(huán)境溫度T,就可以精確計(jì)算出發(fā)射點(diǎn)到障礙物之間的距離。
HC-SR04超聲波測(cè)距模塊簡(jiǎn)介
? ? ? HC-SR04超聲波測(cè)距模塊可提供2cm-400cm的非接觸式距離感測(cè)功能,測(cè)距精度可達(dá)高到3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。
HC-SR04超聲波測(cè)距模塊實(shí)物圖
HC-SR04超聲波測(cè)距模塊特點(diǎn)
? ? ? 1、典型工作用電壓:5V
? ? ? 2、超小靜態(tài)工作電流:小于5mA
? ? ? 3、感應(yīng)角度(R3 電阻越大,增益越高,探測(cè)角度越大):
? ? ? ? ? ? R3 電阻為392,不大于15 度
? ? ? ? ? ? R3 電阻為472, 不大于30 度
? ? ? 4、探測(cè)距離(R3 電阻可調(diào)節(jié)增益,即調(diào)節(jié)探測(cè)距離):
? ? ? ? ? ? R3 電阻為392 2cm-450cm
? ? ? ? ? ? R3 電阻為472 2cm-700cm
? ? ? 5、高精度:可達(dá)0.3cm
? ? ? 6、盲區(qū)(2cm)超近
HC-SR04超聲波測(cè)距模塊管腳
? ? ? VCC(5V)、 Trig(控制端)、 Echo(接收端)、地(GND)
? ? ? 使用方法:控制口發(fā)一個(gè)10US 以上的高電平,就可以在接收口等待高電平輸出。一有輸出就可以開(kāi)定時(shí)器計(jì)時(shí),當(dāng)此口變?yōu)榈碗娖綍r(shí)就可以讀定時(shí)器的值,此時(shí)就為此次測(cè)距的時(shí)間,方可算出距離。如此不斷的周期測(cè),就可以達(dá)到你移動(dòng)測(cè)量的值了。
HC-SR04超聲波測(cè)距模塊工作原理
? ? ? 1、采用IO 觸發(fā)測(cè)距,給至少10us 的高電平信號(hào);
? ? ? 2、模塊自動(dòng)發(fā)送8 個(gè)40khz 的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;
? ? ? 3、有信號(hào)返回,通過(guò)IO 輸出高電平,高電平持續(xù)時(shí)間就是超聲波從發(fā)射到返回時(shí)間.測(cè)試距離=(高電平時(shí)間*聲速(340M/S))/2。
? ? ? 以上時(shí)序圖表明只需要提供一個(gè)10US以上的脈沖觸發(fā)信號(hào),該模塊內(nèi)部將發(fā)出8個(gè)40kHz周期電平并檢測(cè)回波。一旦檢測(cè)到有回波信號(hào)則輸出回響信號(hào)?;仨懶盘?hào)的脈沖寬度與所測(cè)的距離成正比。由此通過(guò)發(fā)射信號(hào)到收到的回響信號(hào)時(shí)間間隔可以計(jì)算得到距離。距離=高電平時(shí)間*聲速。?
HC-SR04超聲波測(cè)距模塊應(yīng)用注意事項(xiàng)
? ? ? 1、此模塊不宜帶電連接,如果要帶電連接,則先讓模塊的Gnd 端先連接。否則會(huì)影響模塊工作。
? ? ? 2、測(cè)距時(shí),被測(cè)物體的面積不少于0.5 平方米且要盡量平整。否則會(huì)影響測(cè)試結(jié)果。
HC-SR04超聲波測(cè)距模塊測(cè)距例程
/***********************超聲波測(cè)距串口輸出**********************
*? 處理器:STC89C52RC
*? 開(kāi)發(fā)環(huán)境:KEIL
*? 名稱(chēng):超聲波測(cè)距串口輸出
*? 說(shuō)明:波特率9600
/****************************包含頭文件***************************/
#include <reg52.h>
/*******************************宏定義*****************************/
#define SPEED_30C 3495????????? //30攝氏度時(shí)的聲速,聲速V=331.5+0.6*溫度;
#define SPEED_23C 3453????????? //23攝氏度時(shí)的聲速,聲速V=331.5+0.6*溫度;
/******************************位定義******************************/
//FOSC = 11.0592MHz,12T模式,SMOD=0
#define reload_count_1200bps 0xe8
#define reload_count_2400bps 0xf4
#define reload_count_4800bps 0xfa
#define reload_count_9600bps 0xfd
sbit ECHO=P1^6;?????????????? ??//回聲接收端口
sbit TRIG=P1^5;?? ??????????????//超聲觸發(fā)端口
sbit BEEP=P2^3;???????? ??? ????//蜂鳴器
/*************************定義變量和數(shù)組*************************/
long int distance=0;????????? ??//距離變量
unsigned char count;
void Delay5Ms(void);
void delay(int In,int Out);
unsigned char zifuchuan[]="SSLV WELCOME!";? ? //待顯示字符
unsigned char juli[]="距離為:?? . 厘米";? ? ? ? ? ? ? ? ? ? //待顯示字符
???????
void delayt(unsigned int x)
{
?unsigned char j;
?while(x-->0){for(j=0;j<125;j++){;}}
}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-418380.html
void delay(int In,int Out)
{
?int i,j;
?for(i=0;i<In;i++)
?{for(j=0;j<Out;j++){;}}
}
void serial_port_initial(char TH,char TL)
{
?SCON=SCON|0x50;????????? ????//0101,0000 8位可變波特率,無(wú)奇偶校驗(yàn)位
?TMOD=TMOD|0x20;????????? ????//0011,0001 設(shè)置定時(shí)器1為8位自動(dòng)重裝記數(shù)器
?PCON=PCON|0x00;
?TH1=TH;TL1=TL;? ? ? ? ? ? ? ? ? //設(shè)置定時(shí)器1自動(dòng)重裝數(shù)??
?ES=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //允許串口中斷
?EA=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開(kāi)總中斷???
?TR1=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開(kāi)定時(shí)器1??????????????????????????????????????????????????????
}
void send_UART(unsigned char i)???? //發(fā)送一節(jié)函數(shù)
{
?ES=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??//關(guān)串 口中斷
?TI=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清零串口發(fā)送完成中斷請(qǐng)求標(biāo)志
?SBUF=i;
?while(TI==0);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等特?cái)?shù)據(jù)傳送
?TI=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清除數(shù)據(jù)傳送標(biāo)志
?ES=1;
}
void sendc(unsigned char * pd)
{
?while((*pd)!='\0')? ? ? ? ? ? ? ? ? ? ? ?//發(fā)送字符串,直到遇到0才結(jié)束
?{
? send_UART(*pd);?????????????????? //發(fā)送一個(gè)字符
? pd++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //移動(dòng)到下一個(gè)字符
?}文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-418380.html
}
void Alarm(unsigned char t)
{
?unsigned char i;
?for(i=0;i<t;i++)
?{BEEP=0;delay(10,1000);BEEP=1;delay(10,1000);}
}
void Init_timer(void)
{
?TMOD=TMOD|0x01;??? ? ??????????//定時(shí)器0初始化,設(shè)置為16位自動(dòng)重裝模式
?TL0=0x66;TH0=0xfc;? ? ? ? ? ? ? ?//1ms
?ET0=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//開(kāi)定時(shí)器0
?EA=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //總中斷使能
}
void Init_Parameter(void)
{TRIG=1;ECHO=1;count=0;distance=0;}
???
void display(int number)
{
?unsigned char b,c,d,e;
?b=(number/1000);
?c=(number/100)%10;
?d=(number/10)%10;
?e=number%10;
?juli[7]=0x30+b;
?juli[8]=0x30+c;
?juli[9]=0x30+d;
?juli[11]=0x30+e;
?sendc(juli);
}
void Trig_SuperSonic(void)? ? ? ? ? ? ? ? ? ? ? ? ? ? //出發(fā)聲波
{TRIG=1;delayt(1);TRIG=0;}
void Measure_Distance(void)
{
?unsigned char l;
?unsigned int h,y;
?TR0=1;
?while(ECHO){;}
?TR0=0;
?l=TL0;h=TH0;
?y=(h<<8)+l;
?y=y-0xfc66;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //us部分
?distance=y+1000*count;? ? ? ? ? ? ? ? ? ? ? ? ? //計(jì)算總時(shí)間
?TL0=0x66;TH0=0xfc;
?delayt(30);
?distance=SPEED_30C*distance/20000;
}
???????????????????
void main(void)
{
?serial_port_initial(reload_count_9600bps,reload_count_9600bps);
?Alarm(2);
?sendc(zifuchuan);
?Init_timer();
?Init_Parameter();
?while(1)
?{
? Trig_SuperSonic();? ? ? ? ? ? ? ? ? //觸發(fā)超聲波發(fā)射
? while(ECHO == 0){;}? ? ? ? ? ? ? ?//等待回聲
? Measure_Distance();????????????? //計(jì)算脈寬并轉(zhuǎn)換為距離
? display(distance);? ? ? ? ? ? ? ? ? ?//顯示距離
? Init_Parameter();? ? ? ? ? ? ? ? ? ? // 參數(shù)重新初始化
? delayt(100);? ? ? ? ? ? ? ? ? ? ? ? ? ? //延時(shí),兩次發(fā)射之間要至少有10ms間隔
?}
}
void timer0 (void) interrupt 1
{
?TF0=0;
?TL0=0x66;TH0=0xfc;
?count++;
?if(count==18)??????????????????????? //超聲波回聲脈寬最多18ms
?{
? TR0=0;
? TL0=0x66;TH0=0xfc;
? count=0;
?}
}
到了這里,關(guān)于HC-SR04超聲波測(cè)距模塊介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!