0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino測(cè)量障礙物的距離

科技觀察員 ? 來源:DevicePlus ? 作者:DevicePlus ? 2022-04-03 10:22 ? 次閱讀

有沒有想過停車傳感器是如何工作的,您的車怎么知道離撞墻有多遠(yuǎn)?肯定見過機(jī)器人避開障礙物吧,想知道它們是如何發(fā)現(xiàn)障礙物的嗎?這些問題的答案都涉及到短程測(cè)距。在這個(gè)項(xiàng)目中,我們將使用Arduino UNO結(jié)合ROHM測(cè)距傳感器,測(cè)量15cm以內(nèi)的木制目標(biāo)的距離。

雖然這個(gè)項(xiàng)目看起來很簡單,但是傳感器并不能直接給出與目標(biāo)之間的距離。這時(shí),我們要用到光電晶體管,它根據(jù)與目標(biāo)之間的距離輸出一定的電壓,需要將這個(gè)電壓轉(zhuǎn)換成距離。由于光電晶體管產(chǎn)生的電壓變化與距離不呈線性關(guān)系,這個(gè)方法的復(fù)雜程度增加了。這涉及一種稱為曲線擬合的方法,以從實(shí)驗(yàn)數(shù)據(jù)中獲得盡可能最接近的方程。

概述

在這個(gè)DIY項(xiàng)目中,我們將開發(fā)一個(gè)電路,使用Arduino的數(shù)字引腳為測(cè)距傳感器的LED供電。LED發(fā)出的光將從木制目標(biāo)反射,并被光電晶體管接收,光電晶體管將產(chǎn)生電壓信號(hào),由Arduino中的模擬引腳讀取。由于電壓變化相對(duì)于距離變化不呈線性關(guān)系,在與目標(biāo)不同距離處收集的數(shù)據(jù)將用于使用MATLAB生成控制方程。然后,將通過Arduino在代碼中使用該方程來測(cè)量距離。將按照以下順序介紹這個(gè)項(xiàng)目:

所需元器件

電路原理

設(shè)置Arduino IDE

校準(zhǔn)編程

使用MATLAB進(jìn)行曲線擬合

最終編程

測(cè)試

所需元器件

pYYBAGJGxB6ADb-3AABuHJJ9TXM792.png

電路原理圖

所有元器件都采購齊全后,第一步是把所有東西都連接起來。這個(gè)項(xiàng)目不需要很多元器件;只需要通過正確的電阻器將Arduino與ROHM RPR-220傳感器正確連接即可。實(shí)際上,為了使其成為便攜式系統(tǒng),我們使用雙面膠帶將Arduino貼在面包板的背面,將ROHM傳感器貼在面包板的正面。ROHM傳感器引腳的定義如下所示:

poYBAGJGxBuAVU42AAIp90pn7uk031.png

連接示意圖如下所示:

poYBAGJGxBeAf1erAALg6XzbZaw236.png

實(shí)際接線如下所示:

poYBAGJGxBOAVI0lAAbS6UqUCxQ803.png

poYBAGJGxA6AcyzjAAZDH25HCIE304.png

設(shè)置Arduino IDE

Arduino編程需要設(shè)置Arduino IDE。Arduino IDE可在Linux和Windows上使用。對(duì)于這個(gè)DIY項(xiàng)目,我們將使用Windows桌面應(yīng)用程序。訪問以下鏈接下載并安裝Arduino IDE:

https://www.arduino.cc/en/Main/Software

選擇以下鏈接:

Windows Installer,適用于Windows XP及更高版本

成功安裝后,打開Arduino IDE并使用USB B數(shù)據(jù)線連接Arduino UNO R3:在Arduino IDE中,從“工具”》“端口”》“COM 3 (Arduino Genuino / UNO)”中選擇適當(dāng)?shù)腃OM端口。這時(shí),您已經(jīng)完成設(shè)置,可以開始編程了。

校準(zhǔn)編程

首先,開發(fā)程序,以獲取目標(biāo)放在不同距離時(shí)的傳感器值。包含注釋的代碼如下所示:

#define IR_INPUT_PIN A0 //Pin to read values from phototransistor

#define IR_LED_PIN 8 //Pin to light LED

void setup()

{

Serial.begin(9600);

pinMode(IR_INPUT_PIN, INPUT);

pinMode(IR_LED_PIN, OUTPUT);

}

void loop(){

int ambient = 0;

int lit = 0;

int value = 0;

digitalWrite(IR_LED_PIN, LOW); //Turning off LED to measure ambient light

delay(5); //To give ADC and LED transition time

ambient = analogRead(IR_INPUT_PIN); //Saving value for ambient light

digitalWrite(IR_LED_PIN, HIGH); //Turning on LED

delay(5);

lit = analogRead(IR_INPUT_PIN); //Measuring total reflected light on sensor

value = lit – ambient; //Removing ambient light value to calculate the net value of LED

Serial.print(“value = “);

Serial.println(value); //Printing final sensor value on serial monitor

delay(1000);

}

完成上述代碼后,編譯并將其上傳到Arduino。如果所有接線正確,LED將會(huì)點(diǎn)亮。如下所示設(shè)置用于校準(zhǔn)的儀器(將一個(gè)目標(biāo)放在15cm的距離處,標(biāo)尺放在下面):

pYYBAGJGxAqARrilAAVEljxFkbo850.png

現(xiàn)在,在Arduino IDE中,打開“工具”》“串口監(jiān)視器”。執(zhí)行以下操作:

當(dāng)目標(biāo)放在15cm處時(shí),檢查傳感器值。

當(dāng)目標(biāo)放在10cm處時(shí),檢查傳感器值。

當(dāng)目標(biāo)放在5cm處時(shí),檢查傳感器值。

當(dāng)目標(biāo)放在2cm處時(shí),檢查傳感器值。

如上所述,由于目標(biāo)的顏色、環(huán)境光和環(huán)境不同,這些值可能會(huì)有所不同。在本例中,距離為15、10、5和2cm處對(duì)應(yīng)的值分別為15、30、97和487。

pYYBAGJGxAWANm3sAAD27OaH3H0110.png

很明顯,這種關(guān)系不是線性的,我們需要一個(gè)方程來計(jì)算距離。這個(gè)方程將使用下面介紹的曲線擬合方法獲得。

使用MATLAB進(jìn)行曲線擬合

打開MATLAB,如下所示寫入x和y坐標(biāo)數(shù)據(jù):

pYYBAGJGxACATgFKAAF9dbMFQMA347.png

現(xiàn)在轉(zhuǎn)到應(yīng)用程序中的曲線擬合。

pYYBAGJGw_qABB1VAAF9aKX8AI4409.png

擬合類型選擇冪函數(shù)。

pYYBAGJGw_aAN9pFAAFcHM1R8hc376.png

記下方程和常數(shù)a和b的值。

最終編程

最終編程時(shí),修改代碼以包括從曲線擬合獲得的方程,并刪除打印命令,但最終距離除外,這是必需的。由于已經(jīng)使用曲線擬合找到了傳感器值與距離之間的關(guān)系,因此將聲明一個(gè)附加變量來存儲(chǔ)距離的大小。

#define IR_INPUT_PIN A0 //Pin to read values from phototransistor

#define IR_LED_PIN 8 //Pin to light LED

double a= 73.11; //Constants obtained from MATLAB Curve fitting

double b= –0.585;

double dist;

void setup()

{

Serial.begin(9600);

pinMode(IR_INPUT_PIN, INPUT);

pinMode(IR_LED_PIN, OUTPUT);

}

void loop()

{

int ambient = 0;

int lit = 0;

int value = 0;

digitalWrite(IR_LED_PIN, LOW); //Turning off LED to measure ambient light

delay(5); //To give ADC and LED transition time

ambient = analogRead(IR_INPUT_PIN); //Saving value for ambient light

digitalWrite(IR_LED_PIN, HIGH); //Turning on LED

delay(5);

lit = analogRead(IR_INPUT_PIN); //Measuring total reflected light on sensor

value = lit – ambient; //Removing ambient light value to calculate the net value of LED

//Using power function and formulating equation generated by MATLAB

dist = pow(value,b);

dist = a*dist;

//Displaying the calculated distance

Serial.print(dist);

Serial.println(“ cm”);

}

測(cè)試

測(cè)試時(shí),使用相同的校準(zhǔn)設(shè)置。

poYBAGJGw_KAXNVoAAYoMK0h5Zw357.png

將最終代碼上傳到Arduino后,打開串口監(jiān)視器。您將看到以厘米為單位的距離值。為了驗(yàn)證測(cè)試,將屏幕上的值與地面上的標(biāo)尺進(jìn)行匹配。如果數(shù)值接近正確,您就成功應(yīng)用曲線擬合方法進(jìn)行了逼近?,F(xiàn)在,您的系統(tǒng)可以可靠地計(jì)算不同場(chǎng)景中相似障礙物的距離。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 測(cè)距傳感器
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    20173
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185922
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    遇到障礙物自動(dòng)返回?

    為什么有些東西,遇到障礙物會(huì)自動(dòng)返回,是哪一種傳感器嗎?哪里有沒有這類的電路圖介紹下,非常感謝
    發(fā)表于 09-10 21:14

    設(shè)計(jì)完P(guān)CB后走線不能躲避障礙物時(shí)什么情況

    本帖最后由 gk320830 于 2015-3-8 20:36 編輯 設(shè)計(jì)完P(guān)CB后走線不能躲避障礙物時(shí)什么情況?已經(jīng)設(shè)置了躲避障礙物還是不能躲避
    發(fā)表于 12-20 08:47

    求教 障礙物感應(yīng)類開關(guān)

    本帖最后由 gk320830 于 2015-3-8 14:20 編輯 急需用到2米內(nèi)障礙物感應(yīng)器,帶開關(guān)功能或者高手幫忙設(shè)計(jì)個(gè)輔助開關(guān)電路,24V電源供電,多謝
    發(fā)表于 03-07 21:58

    障礙物時(shí) 語音提示 前方危險(xiǎn),請(qǐng)注意。

    障礙物時(shí)語音提示前方危險(xiǎn),請(qǐng)注意。語音模塊是isd1820單片機(jī)51 求幫忙
    發(fā)表于 02-24 21:43

    基于labview機(jī)器視覺的障礙物時(shí)別

    通過攝像頭對(duì)周圍環(huán)境信息的實(shí)時(shí)采集,如果當(dāng)鏡頭前方出現(xiàn)障礙物時(shí)候,以一定的方式(聲音或振動(dòng)之類的)反饋出來。主要考慮的是實(shí)現(xiàn)盲人室內(nèi)導(dǎo)盲作用,不需要太過于考慮實(shí)際使用,只要能實(shí)現(xiàn)判定到障礙物,自動(dòng)提醒就行啦。怎么判定前方出現(xiàn)障礙物
    發(fā)表于 03-14 07:58

    新人求教AD中Pullback(障礙物)到底是一個(gè)什么概念或作用?

    ,即如果設(shè)置的障礙物值為20mil,那么在板的邊框外面有20mil的覆銅,在邊框的里面也有20mil的覆銅?!?、“Pullback”,是在內(nèi)電層邊緣設(shè)置的一個(gè)閉合的去銅邊界,以保證內(nèi)電層邊界距離PCB
    發(fā)表于 11-04 11:27

    請(qǐng)問Infrared Proximity Sensor如何檢測(cè)前方是否有障礙物

    Infrared Proximity Sensor如何檢測(cè)前方是否有障礙物
    發(fā)表于 11-06 07:57

    能用單片機(jī)直接通過串口連接激光雷達(dá)測(cè)障礙物

    想用單片機(jī)直接通過串口連接激光雷達(dá),測(cè)障礙物,該激光雷達(dá)波特率230400,是arduino的極限115200的兩倍,所以要用STM32的芯片了。其數(shù)據(jù)手冊(cè)說的還是不清楚,固連接電腦的串口根據(jù)測(cè)得
    發(fā)表于 02-24 06:31

    檢測(cè)障礙物有什么什么傳感器?

    檢測(cè)障礙物有什么什么傳感器,用紅外反射還是超聲波測(cè)距,或者還有其他傳感器?
    發(fā)表于 11-08 06:33

    匯編語言程序設(shè)計(jì)案例—?jiǎng)討B(tài)顯示/障礙物檢測(cè)/障礙物方位檢測(cè)

    匯編語言程序設(shè)計(jì)案例1—?jiǎng)討B(tài)顯示/障礙物檢測(cè)/障礙物方位檢測(cè) 10-1.  LED數(shù)碼管顯示原理10-2.  案例分析1(2位學(xué)號(hào)顯示)10-3.  案例分析2(簡易按鍵搶答)10-4.
    發(fā)表于 03-23 12:15 ?38次下載

    障礙物檢測(cè)實(shí)驗(yàn)

    障礙物檢測(cè)實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康摹靶L(fēng)”小車在運(yùn)動(dòng)過程中要成功避開障礙物必須在一定距離外就探測(cè)到障礙物。在小車上探測(cè)障礙物
    發(fā)表于 03-23 10:47 ?2694次閱讀
    <b class='flag-5'>障礙物</b>檢測(cè)實(shí)驗(yàn)

    障礙物方位檢測(cè)實(shí)驗(yàn)

    障礙物方位檢測(cè)實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康男≤囋谶\(yùn)動(dòng)中要成功避開障礙物,除了要檢測(cè)是否有障礙物外,還需要判斷障礙物的方位,以便小
    發(fā)表于 03-23 10:48 ?1956次閱讀
    <b class='flag-5'>障礙物</b>方位檢測(cè)實(shí)驗(yàn)

    避免障礙物Arduino控制汽車設(shè)計(jì)方案

    避免障礙物(即墻壁或前方的物體)的Arduino控制汽車。 ? ? ? ? 責(zé)任編輯:xj 原文標(biāo)題:基于Arduino的避障車 文章出處:【微信公眾號(hào):電路設(shè)計(jì)技能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。 ?
    的頭像 發(fā)表于 12-25 14:55 ?1551次閱讀

    Arduino障礙物避免機(jī)器人汽車

    電子發(fā)燒友網(wǎng)站提供《Arduino障礙物避免機(jī)器人汽車.zip》資料免費(fèi)下載
    發(fā)表于 10-31 09:30 ?0次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>障礙物</b>避免機(jī)器人汽車

    如何讓Arduino使用雷達(dá)避開障礙物

    電子發(fā)燒友網(wǎng)站提供《如何讓Arduino使用雷達(dá)避開障礙物.zip》資料免費(fèi)下載
    發(fā)表于 06-26 14:58 ?1次下載
    如何讓<b class='flag-5'>Arduino</b>使用雷達(dá)避開<b class='flag-5'>障礙物</b>