超聲波模組與C51微控制器進行測距
阿新 • • 發佈:2022-03-29
一.超聲波感測器簡介
1.型號:HC-SR04
2.外觀:
3.管腳介紹:
針腳名稱 | 針腳含義 |
Vcc | 模組供電的正極 |
Gnd | 模組供電的負極 |
trig | 超聲波發出超聲波的管腳 |
echo | 當由高電平轉化成低電平之後表示接收到返回超聲波 |
4.主要引數
二.超聲波測距模組原理
1.時序圖
2.基本原理
由上面的時序圖可以看到,當給trig10us的高電平訊號,之後超聲波開始進行訊號傳送,同時echo訊號開始由低電平轉化成高電平訊號,同時開始啟動定時器,開始計時;當超聲波被障礙物返回時,echo訊號由高電平轉化成低電平訊號,同時停止定時器的計時,這樣就可以通過定時器算出中間經過的時間,根據公式:距離=速度(340m/s)*時間可以進行計算
3.程式碼實現
#include <REGX52.H> /*當檢測到距離大於15cm時,指示燈點亮,否則指示燈熄滅*/ sbit D1 = P1^0; sbit trig = P2^0; sbit echo = P2^1; /*將定時器的模式設定為0模式,並將初始值設定為0*/ void Timer0Init() { TMOD &= 0xF0; TMOD |= 0x01; TL0 = 0; TH0 = 0; } void Delay10us() { unsigned char i; i = 2; while (--i); }void HC_strat() { trig = 0; trig = 1; Delay10us(); trig = 0; } void main() { double time; double line; Timer0Init(); /* 1-當echo由低電平轉化成高電平時,開始傳送超聲波,同時開始定時器計時 2-當echo由高電平轉化成低電平時,停止傳送超聲波,同時停止定時器計時 */ HC_strat(); while(echo == 0); TR0 = 1; while(echo == 1); TR0 = 0; /* 1-340m/s = 34000cm/s = 34cm/ms = 0.034cm/us 2-time 的單位是us 3-由於聲波是來回傳輸,因此需要將最後的結果除以二 4-對於將兩個8位資料合併成一個16位資料,可以通過將高八位乘以2的八次方然後加上低八位即可 */ time = (TH0 * 256 + TL0)*1.085; line = (time * 0.034)/2; if(line>15) { D1 = 0; } else { D1 = 1; } }