有沒有想過停車傳感器是如何工作的,您的車怎么知道離撞墻有多遠?肯定見過機器人避開障礙物吧,想知道它們是如何發(fā)現(xiàn)障礙物的嗎?這些問題的答案都涉及到短程測距。在這個項目中,我們將使用Arduino UNO結(jié)合ROHM測距傳感器,測量15cm以內(nèi)的木制目標的距離。
雖然這個項目看起來很簡單,但是傳感器并不能直接給出與目標之間的距離。這時,我們要用到光電晶體管,它根據(jù)與目標之間的距離輸出一定的電壓,需要將這個電壓轉(zhuǎn)換成距離。由于光電晶體管產(chǎn)生的電壓變化與距離不呈線性關(guān)系,這個方法的復(fù)雜程度增加了。這涉及一種稱為曲線擬合的方法,以從實驗數(shù)據(jù)中獲得盡可能最接近的方程。
概述
在這個DIY項目中,我們將開發(fā)一個電路,使用Arduino的數(shù)字引腳為測距傳感器的LED供電。LED發(fā)出的光將從木制目標反射,并被光電晶體管接收,光電晶體管將產(chǎn)生電壓信號,由Arduino中的模擬引腳讀取。由于電壓變化相對于距離變化不呈線性關(guān)系,在與目標不同距離處收集的數(shù)據(jù)將用于使用MATLAB生成控制方程。然后,將通過Arduino在代碼中使用該方程來測量距離。將按照以下順序介紹這個項目:
所需元器件:
電路原理圖
設(shè)置Arduino IDE
校準編程
使用MATLAB進行曲線擬合
最終編程
測試
所需元器件

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

連接示意圖如下所示:

實際接線如下所示:


設(shè)置Arduino IDE
Arduino編程需要設(shè)置Arduino IDE。Arduino IDE可在Linux和Windows上使用。對于這個DIY項目,我們將使用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端口。這時,您已經(jīng)完成設(shè)置,可以開始編程了。
校準編程
首先,開發(fā)程序,以獲取目標放在不同距離時的傳感器值。包含注釋的代碼如下所示:
#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將會點亮。如下所示設(shè)置用于校準的儀器(將一個目標放在15cm的距離處,標尺放在下面):

現(xiàn)在,在Arduino IDE中,打開“工具”》“串口監(jiān)視器”。執(zhí)行以下操作:
當(dāng)目標放在15cm處時,檢查傳感器值。
當(dāng)目標放在10cm處時,檢查傳感器值。
當(dāng)目標放在5cm處時,檢查傳感器值。
當(dāng)目標放在2cm處時,檢查傳感器值。
如上所述,由于目標的顏色、環(huán)境光和環(huán)境不同,這些值可能會有所不同。在本例中,距離為15、10、5和2cm處對應(yīng)的值分別為15、30、97和487。

很明顯,這種關(guān)系不是線性的,我們需要一個方程來計算距離。這個方程將使用下面介紹的曲線擬合方法獲得。
使用MATLAB進行曲線擬合
打開MATLAB,如下所示寫入x和y坐標數(shù)據(jù):

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

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

記下方程和常數(shù)a和b的值。
最終編程
最終編程時,修改代碼以包括從曲線擬合獲得的方程,并刪除打印命令,但最終距離除外,這是必需的。由于已經(jīng)使用曲線擬合找到了傳感器值與距離之間的關(guān)系,因此將聲明一個附加變量來存儲距離的大小。
#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”);
}
測試
測試時,使用相同的校準設(shè)置。

將最終代碼上傳到Arduino后,打開串口監(jiān)視器。您將看到以厘米為單位的距離值。為了驗證測試,將屏幕上的值與地面上的標尺進行匹配。如果數(shù)值接近正確,您就成功應(yīng)用曲線擬合方法進行了逼近。現(xiàn)在,您的系統(tǒng)可以可靠地計算不同場景中相似障礙物的距離。
-
測距傳感器
+關(guān)注
關(guān)注
0文章
76瀏覽量
20285 -
Arduino
+關(guān)注
關(guān)注
188文章
6479瀏覽量
188728
發(fā)布評論請先 登錄
相關(guān)推薦
設(shè)計完P(guān)CB后走線不能躲避障礙物時什么情況
求教 障礙物感應(yīng)類開關(guān)
基于labview機器視覺的障礙物時別
新人求教AD中Pullback(障礙物)到底是一個什么概念或作用?
能用單片機直接通過串口連接激光雷達測障礙物嗎
匯編語言程序設(shè)計案例—動態(tài)顯示/障礙物檢測/障礙物方位檢測
障礙物檢測實驗

障礙物方位檢測實驗

評論