米思齊分享-02-超聲波測(cè)距案例講解

超聲波測(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ò)程

傳感器工作過(guò)程

三、實(shí)驗(yàn)過(guò)程

1、電路圖

超聲波測(cè)距電路圖

超聲波測(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電路連接圖

無(wú)LCD電路連接圖

串口監(jiān)視器中測(cè)量到的距離

串口監(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厘米左右。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容