超聲波測(cè)距是通過(guò)超聲波傳感器測(cè)量距離的過(guò)程。
下面我們來(lái)講解一下超聲波測(cè)距實(shí)驗(yàn)的過(guò)程:
一、實(shí)驗(yàn)元件
Aduino?UNO板 ×1
USB數(shù)據(jù)線?×?1
1p杜邦線?×?4
超聲波傳感器?×?1
LCD1602液晶傳感器×?1
二、實(shí)驗(yàn)原理
1、超聲波傳感器的工作原理:超聲波傳感器向某一方向發(fā)射超聲波,在發(fā)射的同時(shí)開始計(jì)時(shí);超聲波在空氣中傳播,途中遇到障礙物則立即返回,超聲波接收器收到反射波則立即停止計(jì)時(shí)。聲波在空氣中傳播速度為340m/s,根據(jù)計(jì)時(shí)器記錄時(shí)間t,即可算出發(fā)射點(diǎn)距離障礙物的距離S,即S=340m/s*t/2,這就是所謂的時(shí)間差測(cè)距法。

超聲波傳感器
2、使用Arduino采用數(shù)字引腳給SR04的Trig引腳至少10μs的高電平信號(hào),觸發(fā)SR04模塊測(cè)距功能。
? ? ?觸發(fā)后,模塊會(huì)自動(dòng)發(fā)送8個(gè)40KHz的超聲波脈沖,并自動(dòng)檢測(cè)是否有信號(hào)返回。這步會(huì)由模塊內(nèi)部自動(dòng)完成。
? ? ?如有信號(hào)返回,Echo引腳會(huì)輸出高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。此時(shí),我們能使用pulseIn()函數(shù)獲取到測(cè)距的結(jié)果,并計(jì)算出距被測(cè)物的實(shí)際距離。



傳感器工作過(guò)程
三、實(shí)驗(yàn)過(guò)程
1、電路圖



超聲波測(cè)距電路圖
2、實(shí)驗(yàn)代碼
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
volatile float dist;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定義一個(gè)不穩(wěn)定的變量為浮點(diǎn)型
LiquidCrystal_I2C mylcd(0x27,16,2);? ?//課程套件中所用的顯示器類型,兩行顯示,每行16個(gè)字符,0x27為課程所用套件的LCD液晶屏IIC地址,第三方的IIC協(xié)議LCD液晶屏地址默認(rèn)為0x27
float checkdistance_4_7() {? ? ? ? ? ? ? ? ? //超聲波傳感器測(cè)距的公式
??digitalWrite(4, LOW);
??delayMicroseconds(2);
??digitalWrite(4, HIGH);
??delayMicroseconds(10);? ? ? ? ? ? ? ?//給超聲波傳感器的Trig引腳至少10us的高電平信號(hào)
??digitalWrite(4, LOW);
??float distance = pulseIn(7, HIGH) / 58.00;? ? ?//計(jì)算距離的公式
??delay(10);
??return distance;
}
void setup(){
??dist = 0;? ? ? ? ? ? ? ? ? ? ? ?//設(shè)置距離的初始值為0
??pinMode(4, OUTPUT);? ? ?//設(shè)置A4為輸出端口
??pinMode(7, INPUT);? ? //設(shè)置A7為輸入端口
??mylcd.init();? ? ? ? ? ? ? ? ? ? ? ? //液晶屏初始化
??mylcd.backlight();
}
void loop(){? ? ? ? ? ? ? ? ? ? ? ? ? ?//將距離值在液晶屏上顯示
??dist = checkdistance_4_7();
??if (dist < 1000) {
????mylcd.clear();
????mylcd.setCursor(0, 0);
????mylcd.print("Distance(cm):");
????mylcd.setCursor(0, 1);
????mylcd.print(dist);
????delay(1000);
??}
}
四、實(shí)驗(yàn)結(jié)果
1、顯示屏上的距離數(shù)據(jù)隨傳感器里物體的 距離的變化而變化:
2、若在實(shí)驗(yàn)過(guò)程中無(wú)LCD顯示屏,可修改關(guān)于LCD的相關(guān)代碼,通過(guò)串口監(jiān)視器監(jiān)測(cè)數(shù)據(jù)。
修改代碼:


無(wú)LCD電路連接圖
串口監(jiān)視器中測(cè)量到的距離
五、反思與總結(jié)
1.出現(xiàn)的問(wèn)題及解決方法
(1)上傳一直失敗,原因是沒(méi)將實(shí)驗(yàn)板的型號(hào)改為Arduino Uno。
(2)串口監(jiān)視器結(jié)果為0,距離變化無(wú)反應(yīng)。原因是超聲波傳感器的Echo端口為輸出口,實(shí)際上對(duì)應(yīng)的是Uno板7端口,即我們所設(shè)置的INPUT輸入口,Trig端口對(duì)應(yīng)的是4端口,是觸發(fā)控制信號(hào)輸入的端口,開始時(shí)將輸入輸出口接反了。
(3)代碼修改錯(cuò)誤。原因是只設(shè)置了輸出,沒(méi)有初始化串口通信,設(shè)置波特率,少了Serial.begin(9600);這一句。所以為了防止出錯(cuò),可以從模塊部分進(jìn)行修改,修改完后代碼也修改了。
2.收獲
(1)Mixly既可以通過(guò)代碼,也可以通過(guò)模塊來(lái)完成實(shí)驗(yàn),可以根據(jù)自己的喜好來(lái)選擇。
(2)出現(xiàn)錯(cuò)誤一定要多加嘗試,代碼、連線多方面排除問(wèn)題,不要直接以為元件是壞的。
(3)我們利用本實(shí)驗(yàn)測(cè)量了全宿舍的身高,該超聲波傳感器的誤差很小。在我們粗糙的手法下,誤差在1、2厘米左右。