项目概述
超声波测距是一种传统而实用的非触摸丈量办法,与激光、涡流和无线电测距办法比较,具有不受外界光及电磁场等因素影响的优点,在比较恶劣的环境中也具有必定的适应能力,且结构简单、成本低,因此在工业操控、建筑丈量、机器人定位方面有广泛的应用。
本节将介绍使用HC-SR04超声波传感器、DS18B20数字温度传感器、ArduinoUno和LabVIEW组成带有温度补偿的超声波测距体系,可用于机器人避障等场合的间隔丈量。
超声波测距的原理:从超声波发射器发出的超声波(假设传达介质为气体),经气体介质的传达,遇到障碍物之后反射的超声波被超声波接纳器所接纳。将超声波发射与接纳之间的时刻与气体介质中的声速相乘,就是声波传输的间隔,声波传输间隔的一半就是所测间隔。
拓宽学习:LabVIEW操控Arduino收集多路DS18B20温度数值(进阶篇—3)
项目架构
超声波测距体系总体框图如下图所示:
在整个体系中,ArduinoUno作为下位机,担任读写HC-SR04超声波传感器、读取DS18B20温度传感器以及上传数据,LabVIEW软件作为上位机,担任接纳超声波时刻、空气温度和核算超声波所丈量的间隔值并显示,上下位机利用USB-TTL接口实现通讯。
硬件环境
本项目将HC-SR04超声波模块的VCC、GND、Trig、Echo分别衔接到ACCrduinoUno操控板的+5V、GND、数字端口D2和D3上。然后,将DS18B20温度传感器VCC、GND、DQ分别衔接至ArduinoUno操控板的3.3V、GND和数字端口D4上,且在DQ与3.3V之间衔接一个1KΩ的上拉电阻。超声波测距体系硬件衔接示意图如下图所示:
Arduino功用设计
在根据Arduino与LabVIEW的上下位机超声波测距体系中,ArduinoUno操控板需求完结以下功用:接纳和判别指令、收集和传输温度与超声波往复时刻。ArduinoUno操控板经过串口接纳上位机发来的指令,分析得到有效指令,读取DS18B20数字温度传感器,将气温数据上传给LabVIEW软件或操控超声波传感器发射超声波,并丈量出超声波往复的时刻,将超声波往复的时刻上传至LabVIEW软件。
ArduinoUno操控器担任读取LabVIEW上位机发来的间隔丈量和温度收集指令,并经过HC-SR04超声波传感器和DS18B20传感器获取超声波往复时刻和温度数据,经过串口发送回上位机LabVIEW软件。ArduinoUno操控器的程序代码如下所示:
#include#include????//Datawireispluggedintoport2ontheArduino#defineONE_WIRE_BUS2//SetupaoneWireinstancetocommunicatewithanyOneWiredevices(notjustMaxim/DallastemperatureICs)OneWireoneWire(ONE_WIRE_BUS);//PassouroneWirereferencetoDallasTemperature.DallasTemperaturesensors(&oneWire);bytecomdata[3]={0};//定义数组数据,寄存串口指令数据intLED=13;//定义LED衔接的管脚constintTrigPin=2;constintEchoPin=3;floatdistance;voidreceive_data(void);//承受串口数据voidtest_do_data(void);//测试串口数据是否正确,并更新数据voidsetup(){Serial.begin(9600);pinMode(LED,OUTPUT);//Startupthelibrarysensors.begin();}voidloop(){while(Serial.available()>0)//不断检测串口是否有数据{receive_data();//承受串口数据test_do_data();//测试数据是否正确并更新数据}}voiddistance_time(void){digitalWrite(TrigPin,LOW);delayMicroseconds(2);digitalWrite(TrigPin,HIGH);//发送10μS的高电平触发信号delayMicroseconds(10);digitalWrite(TrigPin,LOW);distance=pulseIn(EchoPin,HIGH);//检测脉冲宽度,即为超声波往复时刻}voidreceive_data(void){inti;for(i=0;i<3;i++){comdata[i]=Serial.read();//延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢掉,delay(2);}}voidtest_do_data(void){if(comdata[0]==0x55)//0x55和0xAA均为判别是否为有效指令{if(comdata[1]==0xAA){switch(comdata[2]){case0x01:sensors.requestTemperatures();//SendthecommandtogettemperaturesSerial.print(sensors.getTempCByIndex(0));break;case0x02:distance_time();Serial.print(distance);break;}}}}
LabVIEW功用设计
LabVIEW上位机部分需求完结以下功用:
1、向下位机Arduino操控器发送收集温度的指令,Arduino操控器经过串口接纳上位机指令,完结温度的收集之后并将数据回传,LabVIEW软件将回传的温度数据显示在前面板上。
2、向下位机Arduino操控器发送丈量间隔的指令,Arduino操控器经过串口接纳上位机指令,完结间隔的丈量之后并将超声波往复时回传,LabVIEW软件将回传的超声波往复时刻、温度与音速公式:u=331.3+(0.606xt)m/s(t为摄氏温度)核算得到所丈量的间隔,显示在前面板上。
3、当处于主动测温形式时,且LabVIEW软件超时1秒时,向下位机Arduino操控器发送收集温度的指令,并将回传的温度数据显示在前面板上,实时更新温度,以确保测距尽可能准确。
5.1、前面板设计
LabVIEW上位机前面板主要有当前温度值和丈量间隔的显示表盘,以及主动丈量选框和手动测温的按钮,如下图所示:
5.2、程序框图设计
LabVIEW程序首先经过选择的ArduinoUno操控器的串口号来初始化串口通讯,然后进入内嵌事件结构的While循环中,当”温度丈量”按钮被按下时,则向ArduinoUno操控器发送温度丈量的指令码,等待1秒之后读取ArduinoUno操控器回来的温度数据并显示出来。
当“间隔丈量”按钮被按下时,则向ArduinoUno操控器发送间隔丈量的指令码,等待1秒之后读取ArduinoUno操控器回来的超声波往复时刻,并经过温度与音速公式u=331.3+(0.606xt)m/s(t为摄氏温度),核算得到所丈量的间隔数据显示出来。
当“温度丈量”和“间隔丈量”按钮在1秒内都没被按下时,LabVIEW程序进入“超时””,且当主动丈量选项被使能后,则向ArduinoUno操控器发送温度丈量的指令码,等待1秒之后读取ArduinoUno操控器回来的温度数据并显示出来,以实时更新当前的温度。最后关闭串口通讯。
LabVIEW操控Arduino完成超声波测距
未经允许不得转载:迅闻网 » LabVIEW操控Arduino完成超声波测距
评论前必须登录!
注册