<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > LabVIEW控制Arduino實(shí)現超聲波測距(進(jìn)階篇—5)

LabVIEW控制Arduino實(shí)現超聲波測距(進(jìn)階篇—5)

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

1


項目概述


超聲波測距是一種傳統而實(shí)用的非接觸測量方法,與激光、渦流和無(wú)線(xiàn)電測距方法相比,具有不受外界光及電磁場(chǎng)等因素影響的優(yōu)點(diǎn),在比較惡劣的環(huán)境中也具有一定的適應能力,且結構簡(jiǎn)單、成本低,因此在工業(yè)控制、建筑測量、機器人定位方面有廣泛的應用。


本節將介紹使用HC-SR04超聲波傳感器、DS18B20數字溫度傳感器、ArduinoUno和LabVIEW組成帶有溫度補償的超聲波測距系統,可用于機器人避障等場(chǎng)合的距離測量。


超聲波測距的原理:從超聲波****發(fā)出的超聲波(假設傳播介質(zhì)為氣體),經(jīng)氣體介質(zhì)的傳播,遇到障礙物之后反射的超聲波被超聲波接收器所接收。將超聲波****與接收之間的時(shí)間與氣體介質(zhì)中的聲速相乘,就是聲波傳輸的距離,聲波傳輸距離的一半便是所測距離。


拓展學(xué)習:LabVIEW控制Arduino采集多路DS18B20溫度數值(進(jìn)階篇—3)



2


項目架構


超聲波測距系統總體框圖如下圖所示:


圖片


在整個(gè)系統中,Arduino Uno作為下位機,負責讀寫(xiě)HC-SR04超聲波傳感器、讀取DS18B20溫度傳感器以及上傳數據,LabVIEW軟件作為上位機,負責接收超聲波時(shí)間、空氣溫度和計算超聲波所測量的距離值并顯示,上下位機利用USB-TTL接口實(shí)現通信。


3


硬件環(huán)境


本項目將HC-SR04超聲波模塊的VCC、GND、Trig、Echo分別連接到ACCrduinoUno控制板的+5V、GND、數字端口D2和D3上。然后,將DS18B20溫度傳感器VCC、GND、DQ分別連接至Arduino Uno控制板的3.3V、GND和數字端口D4上,且在DQ與3.3V之間連接一個(gè)1KΩ的上拉電阻。超聲波測距系統硬件連接示意圖如下圖所示:


圖片

4


Arduino功能設計


在基于A(yíng)rduino與LabVIEW的上下位機超聲波測距系統中,Arduino Uno控制板需要完成以下功能:接收和判斷命令、采集和傳輸溫度與超聲波往返時(shí)間。Arduino Uno控制板通過(guò)串口接收上位機發(fā)來(lái)的命令,分析得到有效命令,讀取DS18B20數字溫度傳感器,將氣溫數據上傳給LabVIEW軟件或控制超聲波傳感器****超聲波,并測量出超聲波往返的時(shí)間,將超聲波往返的時(shí)間上傳至LabVIEW軟件。


Arduino Uno控制器負責讀取LabVIEW上位機發(fā)來(lái)的距離測量和溫度采集命令,并通過(guò)HC-SR04超聲波傳感器和DS18B20傳感器獲取超聲波往返時(shí)間和溫度數據,通過(guò)串口發(fā)送回上位機LabVIEW軟件。Arduino Uno控制器的程序代碼如下所示:



















































































#include <OneWire.h>#include <DallasTemperature.h>       ? ???// Data wire is plugged into port 2 on the Arduino#define ONE_WIRE_BUS 2
 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire);byte comdata[3]={0};      //定義數組數據,存放串口命令數據
int LED = 13;                 //定義LED連接的管腳const int TrigPin = 2;const int EchoPin = 3;float distance;
void receive_data(void);      //接受串口數據void test_do_data(void);         //測試串口數據是否正確,并更新數據

void setup(){  Serial.begin(9600);        pinMode(LED, OUTPUT);  // Start up the library  sensors.begin(); } void loop(){  while (Serial.available() > 0)   //不斷檢測串口是否有數據   {        receive_data();            //接受串口數據        test_do_data();               //測試數據是否正確并更新數據   }}void distance_time(void){  digitalWrite(TrigPin, LOW);  delayMicroseconds(2);  digitalWrite(TrigPin, HIGH);//發(fā)送10μS的高電平觸發(fā)信號  delayMicroseconds(10);  digitalWrite(TrigPin, LOW);  distance = pulseIn(EchoPin, HIGH); // 檢測脈沖寬度,即為超聲波往返時(shí)間}
void receive_data(void)       {   int i ;   for(i=0;i<3;i++)   {      comdata[i] =Serial.read();      //延時(shí)一會(huì ),讓串口緩存準備好下一個(gè)字節,不延時(shí)可能會(huì )導致數據丟失,       delay(2);   }}
void test_do_data(void){  if(comdata[0] == 0x55)            //0x55和0xAA均為判斷是否為有效命令   {     if(comdata[1] == 0xAA)     {          switch (comdata[2])          {            case 0x01:             sensors.requestTemperatures(); // Send the command to get temperatures            Serial.print(sensors.getTempCByIndex(0));              break;            case 0x02:              distance_time();            Serial.print(distance) ;              break ;          }      }   }}



5


LabVIEW功能設計


LabVIEW上位機部分需要完成以下功能:

1、向下位機Arduino控制器發(fā)送采集溫度的命令,Arduino控制器通過(guò)串口接收上位機命令,完成溫度的采集之后并將數據回傳,LabVIEW軟件將回傳的溫度數據顯示在前面板上。

2、向下位機Arduino控制器發(fā)送測量距離的命令,Arduino控制器通過(guò)串口接收上位機命令,完成距離的測量之后并將超聲波往返時(shí)回傳,LabVIEW軟件將回傳的超聲波往返時(shí)間、溫度與音速公式:u=331.3+(0.606 x t)m/s (t為攝氏溫度)計算得到所測量的距離,顯示在前面板上。

3、當處于自動(dòng)測溫模式時(shí),且LabVIEW軟件超時(shí)1秒時(shí),向下位機Arduino控制器發(fā)送采集溫度的命令,并將回傳的溫度數據顯示在前面板上,實(shí)時(shí)更新溫度,以保證測距盡可能精確。


5.1、前面板設計


LabVIEW上位機前面板主要有當前溫度值和測量距離的顯示表盤(pán),以及自動(dòng)測量選框和手動(dòng)測溫的按鈕,如下圖所示:


圖片


5.2、程序框圖設計


LabVIEW程序首先通過(guò)選擇的Arduino Uno控制器的串口號來(lái)初始化串口通信,然后進(jìn)入內嵌事件結構的While循環(huán)中,當"溫度測量"按鈕被按下時(shí),則向Arduino Uno控制器發(fā)送溫度測量的命令碼,等待1秒之后讀取Arduino Uno控制器返回的溫度數據并顯示出來(lái)。


當“距離測量"按鈕被按下時(shí),則向Arduino Uno控制器發(fā)送距離測量的命令碼,等待1秒之后讀取Arduino Uno控制器返回的超聲波往返時(shí)間,并通過(guò)溫度與音速公式u=331.3+(0.606 x t) m/s (t為攝氏溫度),計算得到所測量的距離數據顯示出來(lái)。


當“溫度測量"和“距離測量"按鈕在1秒內都沒(méi)被按下時(shí),LabVIEW程序進(jìn)入“超時(shí)”",且當自動(dòng)測量選項被使能后,則向Arduino Uno控制器發(fā)送溫度測量的命令碼,等待1秒之后讀取Arduino Uno控制器返回的溫度數據并顯示出來(lái),以實(shí)時(shí)更新當前的溫度。最后關(guān)閉串口通信。


LabVIEW上位機軟件中的“溫度測量”、“距離測量"和“超時(shí)"的程序框圖如下所示:


圖片


圖片


圖片


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

數字濾波器相關(guān)文章:數字濾波器原理


關(guān)鍵詞: LabVIEW

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>