超聲波測(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í)開(kāi)始計(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);? ?//課程套件中所用的顯示器類(lèi)型徐裸,兩行顯示遣鼓,每行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)輸入的端口胀瞪,開(kāi)始時(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厘米左右。