博客專欄

EEPW首頁(yè) > 博客 > LabVIEW控制Arduino實(shí)現(xiàn)紅外測(cè)距(進(jìn)階篇—6)

LabVIEW控制Arduino實(shí)現(xiàn)紅外測(cè)距(進(jìn)階篇—6)

發(fā)布人:美男子玩編程 時(shí)間:2022-07-18 來(lái)源:工程師 發(fā)布文章

1


項(xiàng)目概述


紅外測(cè)距是一種非直接接觸的測(cè)量方式,由于其結(jié)構(gòu)簡(jiǎn)單、抗干擾性強(qiáng)、成本低等優(yōu)點(diǎn),在測(cè)量測(cè)繪上得到廣泛的運(yùn)用。


紅外線在通過(guò)云霧等充滿懸浮離子的物質(zhì)時(shí)不易發(fā)生散射,有較強(qiáng)的穿透能力,還具有抗干擾能力強(qiáng)、易于產(chǎn)生、對(duì)環(huán)境影響小、不會(huì)干擾臨近的無(wú)線電設(shè)備的特點(diǎn),同時(shí),紅外光具有反射、折射、散射、干涉、吸收等特性,因而被廣泛應(yīng)用。

本篇博文將介紹使用夏普公司的GP2D12紅外傳感器、Arduino Uno和LabVIEW組成紅外測(cè)距系統(tǒng),可用于機(jī)器人避障等場(chǎng)合的距離測(cè)量。


圖片



2


項(xiàng)目架構(gòu)


紅外測(cè)距系統(tǒng)框圖如下圖所示:


圖片


在整個(gè)系統(tǒng)中,Arduino Uno作為下位機(jī),負(fù)責(zé)讀取GP2D12紅外傳感器的輸出值以及上傳數(shù)據(jù),LabVIEW軟件作為上位機(jī),負(fù)責(zé)將測(cè)量的電壓轉(zhuǎn)換為距離值并顯示出來(lái),上下位機(jī)利用USB-TTL接口實(shí)現(xiàn)通信。



3


硬件環(huán)境


將GP2D12紅外傳感器的VCC、GND、Vo分別接至Arduino Uno控制板上的+5V、GND、模擬端口A0。最好在VCC與GND之間并聯(lián)100uF的電解電容,以穩(wěn)定GP2D12的供電電壓,從而使輸出電壓更加穩(wěn)定。紅外測(cè)距系統(tǒng)硬件連接如下圖所示:


圖片



4


Arduino功能設(shè)計(jì)


在基于Arduino與LabVIEW的上下位機(jī)紅外測(cè)距系統(tǒng)中,Arduino Uno控制板需要完成以下功能:接收和判斷命令、采集和傳輸GP2D12傳感器輸出的電壓。ArduinoUno控制板通過(guò)串口接收上位機(jī)發(fā)來(lái)的命令,分析得到有效命令,多次采集GP2D12傳感器的電壓輸出值,并將GP2D12電壓輸出的平均值上傳至LabVIEW軟件。


Arduino Uno控制器負(fù)責(zé)讀取LabVIEW上位機(jī)發(fā)來(lái)的距離測(cè)量命令,并通過(guò)GP2D12紅外傳感器獲取距離數(shù)據(jù),通過(guò)串口發(fā)送回上位機(jī)LabVIEW軟件。Arduino Uno控制器的程序代碼如下所示:






















































#define Infrared_COMMAND  0x10   //采集命令字
byte comdata[3]={0};      //定義數(shù)組數(shù)據(jù),存放串口接收數(shù)據(jù) void receive_data(void);      //接受串口數(shù)據(jù)void test_do_data(void);         //測(cè)試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù)
float SensorSum = 0; int SensorPin = A0;    // select the input pin for the potentiometer
void setup(){  Serial.begin(9600);      
}void loop(){  while (Serial.available() > 0)   //不斷檢測(cè)串口是否有數(shù)據(jù)   {        receive_data();            //接受串口數(shù)據(jù)        test_do_data();               //測(cè)試數(shù)據(jù)是否正確并更新標(biāo)志位   }}void receive_data(void)       {   int i ;   for(i=0;i<3;i++)   {      comdata[i] =Serial.read();      //延時(shí)一會(huì),讓串口緩存準(zhǔn)備好下一個(gè)字節(jié),不延時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)丟失,       delay(2);   }} void test_do_data(void){  if(comdata[0] == 0x55)            //0x55和0xAA均為判斷是否為有效命令   {     if(comdata[1] == 0xAA)     {        if(comdata[2] == Infrared_COMMAND)        {                        for (int i = 0; i < 10; i++){                 SensorSum += analogRead(SensorPin);                 delay(5);              }            Serial.println(SensorSum*5.00/1023/10,2);            SensorSum=0;        }      }   }}



5


LabVIEW功能設(shè)計(jì)


LabVIEW上位機(jī)部分需要完成以下功能:

1、向下位機(jī)Arduino控制器發(fā)送紅外數(shù)據(jù)采集命令,Arduino控制器通過(guò)串口接收上位機(jī)命令,完成紅外數(shù)據(jù)采集之后并將采集的紅外數(shù)據(jù)回傳,LabVIEW軟件將回傳的紅外數(shù)據(jù)轉(zhuǎn)換為距離值并顯示在前面板上。

2、通過(guò)紅外傳感器的電壓與距離特性關(guān)系,擬合出電壓與測(cè)量距離的擬合曲線,用于將電壓更好地轉(zhuǎn)換為測(cè)量距離值,而且由于LabVIEW的運(yùn)算能力遠(yuǎn)遠(yuǎn)強(qiáng)于Arduino控制器的計(jì)算能力,將電壓與距離的換算放在LabVIEW軟件可以提高測(cè)量精度,并可以擴(kuò)展其他的紅外測(cè)距傳感器,只需要其電壓與距離的數(shù)值關(guān)系。


5.1、前面板設(shè)計(jì)


LabVIEW上位機(jī)前面板分為擬合和測(cè)量?jī)蓚€(gè)部分,擬合部分提供8個(gè)電壓-距離的擬合點(diǎn),以通過(guò)廣義多項(xiàng)式擬合出最佳的曲線方程,提高系統(tǒng)的測(cè)量精度;測(cè)量部分提供多次測(cè)量顯示,并通過(guò)多次測(cè)量計(jì)算平均值,以盡可能準(zhǔn)確地獲取距離數(shù)據(jù)。紅外測(cè)距系統(tǒng)的LabVIEW上位機(jī)前面板,如下圖所示:


圖片


5.2、程序框圖設(shè)計(jì)


為了LabVIEW上位機(jī)程序結(jié)構(gòu)更加清晰明了,更方便地進(jìn)行程序設(shè)計(jì),此處將LabVIEW與Arduino串口通信的LabVIEW上位機(jī)部分設(shè)計(jì)成測(cè)量子程序,在主程序中進(jìn)行調(diào)用,其主要是向Arduino Uno控制器發(fā)送命令碼,并獲取Arduino Uno控制器返回的測(cè)量數(shù)據(jù),實(shí)現(xiàn)測(cè)量功能。


測(cè)量子程序的前面板和程序框圖,如下圖所示:


圖片圖片


LabVIEW上位機(jī)主程序的結(jié)構(gòu)為順序結(jié)構(gòu)+While循環(huán)+事件結(jié)構(gòu)。首先,在順序結(jié)構(gòu)中的第一幀中,對(duì)所使用的數(shù)組、中間變量和顯示控件進(jìn)行初始化,在順序結(jié)構(gòu)的第2幀中,通過(guò)設(shè)置的串口號(hào)來(lái)初始化串口通信。然后,程序進(jìn)入While循環(huán)和事件結(jié)構(gòu),不斷地檢測(cè)是否有事件得到響應(yīng)并執(zhí)行,事件結(jié)構(gòu)有“測(cè)距_測(cè)量”、“測(cè)距_計(jì)算平均值”、和"曲線擬合”。最后,關(guān)閉串口通信。初始化程序框圖如下圖所示:


圖片


在“測(cè)距_測(cè)量"事件結(jié)構(gòu)中,通過(guò)“測(cè)量子程序"讀取Arduino Uno控制器返回的數(shù)據(jù),并利用公式節(jié)點(diǎn)和5階擬合系數(shù)計(jì)算得到所測(cè)量的距離,同時(shí)利用計(jì)數(shù)器將距離數(shù)據(jù)循環(huán)顯示在測(cè)量數(shù)據(jù)中?!皽y(cè)距_測(cè)量"值改變事件程序框圖(部分)如下圖所示:


圖片


在"測(cè)距_計(jì)算平均值"事件結(jié)構(gòu)中,通過(guò)對(duì)測(cè)量數(shù)據(jù)數(shù)組的5個(gè)元素相加并除以5,得到所測(cè)量距離的均值,這種通過(guò)多次測(cè)量的方法可以提高測(cè)距精度,滿足較高精度的測(cè)距需求。“測(cè)距_計(jì)算平均值”值改變事件程序框圖(部分)如下圖所示:


圖片


在“曲線擬合"事件結(jié)構(gòu)中,通過(guò)將距離數(shù)組和電壓數(shù)組利用5階廣義多項(xiàng)式擬合方式,計(jì)算出擬合系數(shù)并顯示在標(biāo)定系數(shù)上。"曲線擬合”值改變事件程序框圖如下圖所示:


圖片


由于本節(jié)所采用的是普通紅外測(cè)距傳感器,通過(guò)廣義多項(xiàng)式擬合方式可以較為精確地?cái)M合出電壓與距離之間的關(guān)系,使得測(cè)量精度有所提高。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

藍(lán)牙技術(shù)相關(guān)文章:藍(lán)牙技術(shù)原理
熱電偶相關(guān)文章:熱電偶原理


關(guān)鍵詞: LabVIEW

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉