在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

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

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

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

            1


            項(xiàng)目概述


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


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

            本篇博文將介紹使用夏普公司的GP2D12紅外傳感器、Arduino Uno和LabVIEW組成紅外測(cè)距系統(tǒng),可用于機(jī)器人避障等場合的距離測(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)換為距離值并顯示出來,上下位機(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控制板通過串口接收上位機(jī)發(fā)來的命令,分析得到有效命令,多次采集GP2D12傳感器的電壓輸出值,并將GP2D12電壓輸出的平均值上傳至LabVIEW軟件。


            Arduino Uno控制器負(fù)責(zé)讀取LabVIEW上位機(jī)發(fā)來的距離測(cè)量命令,并通過GP2D12紅外傳感器獲取距離數(shù)據(jù),通過串口發(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控制器通過串口接收上位機(jī)命令,完成紅外數(shù)據(jù)采集之后并將采集的紅外數(shù)據(jù)回傳,LabVIEW軟件將回傳的紅外數(shù)據(jù)轉(zhuǎn)換為距離值并顯示在前面板上。

            2、通過紅外傳感器的電壓與距離特性關(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è)量兩個(gè)部分,擬合部分提供8個(gè)電壓-距離的擬合點(diǎn),以通過廣義多項(xiàng)式擬合出最佳的曲線方程,提高系統(tǒng)的測(cè)量精度;測(cè)量部分提供多次測(cè)量顯示,并通過多次測(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幀中,通過設(shè)置的串口號(hào)來初始化串口通信。然后,程序進(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)中,通過“測(cè)量子程序"讀取Arduino Uno控制器返回的數(shù)據(jù),并利用公式節(jié)點(diǎn)和5階擬合系數(shù)計(jì)算得到所測(cè)量的距離,同時(shí)利用計(jì)數(shù)器將距離數(shù)據(jù)循環(huán)顯示在測(cè)量數(shù)據(jù)中。“測(cè)距_測(cè)量"值改變事件程序框圖(部分)如下圖所示:


            圖片


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


            圖片


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


            圖片


            由于本節(jié)所采用的是普通紅外測(cè)距傳感器,通過廣義多項(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)閉