LabVIEW 控制 Arduino 实现超声波测距(进阶篇—5)
1、项目概述
超声波测距是一种传统而实用的非接触测量方法,与激光、涡流和无线电测距方法相比,具有不受外界光及电磁场等因素影响的优点,在比较恶劣的环境中也具有一定的适应能力,且结构简单、成本低,因此在工业控制、建筑测量、机器人定位方面有广泛的应用。
本节将介绍使用 HC-SR04 超声波传感器、DS18B20 数字温度传感器、ArduinoUno 和 LabVIEW 组成带有温度补偿的超声波测距系统,可用于机器人避障等场合的距离测量。
超声波测距的原理:从超声波发射器发出的超声波(假设传播介质为气体),经气体介质的传播,遇到障碍物之后反射的超声波被超声波接收器所接收。将超声波发射与接收之间的时间与气体介质中的声速相乘,就是声波传输的距离,声波传输距离的一半便是所测距离。
拓展学习:LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)
2、项目架构
超声波测距系统总体框图如下图所示:
在整个系统中,Arduino Uno 作为下位机,负责读写 HC-SR04 超声波传感器、读取 DS18B20 温度传感器以及上传数据,LabVIEW 软件作为上位机,负责接收超声波时间、空气温度和计算超声波所测量的距离值并显示,上下位机利用 USB-TTL 接口实现通信。
项目详情请参见:LabVIEW控制Arduino实现超声波测距-单片机文档类资源
3、硬件环境
本项目将 HC-SR04 超声波模块的 VCC、GND、Trig、Echo 分别连接到 ACCrduinoUno 控制板的+5V、GND、数字端口 D2 和 D3 上。然后,将 DS18B20 温度传感器 VCC、GND、DQ 分别连接至 Arduino Uno 控制板的 3.3V、GND 和数字端口 D4 上,且在 DQ 与 3.3V 之间连接一个 1KΩ的上拉电阻。超声波测距系统硬件连接示意图如下图所示:
4、Arduino 功能设计
在基于 Arduino 与 LabVIEW 的上下位机超声波测距系统中,Arduino Uno 控制板需要完成以下功能:接收和判断命令、采集和传输温度与超声波往返时间。Arduino Uno 控制板通过串口接收上位机发来的命令,分析得到有效命令,读取 DS18B20 数字温度传感器,将气温数据上传给 LabVIEW 软件或控制超声波传感器发射超声波,并测量出超声波往返的时间,将超声波往返的时间上传至 LabVIEW 软件。
Arduino Uno 控制器负责读取 LabVIEW 上位机发来的距离测量和温度采集命令,并通过 HC-SR04 超声波传感器和 DS18B20 传感器获取超声波往返时间和温度数据,通过串口发送回上位机 LabVIEW 软件。Arduino Uno 控制器的程序代码如下所示:
5、LabVIEW 功能设计
LabVIEW 上位机部分需要完成以下功能:
1、向下位机 Arduino 控制器发送采集温度的命令,Arduino 控制器通过串口接收上位机命令,完成温度的采集之后并将数据回传,LabVIEW 软件将回传的温度数据显示在前面板上。
2、向下位机 Arduino 控制器发送测量距离的命令,Arduino 控制器通过串口接收上位机命令,完成距离的测量之后并将超声波往返时回传,LabVIEW 软件将回传的超声波往返时间、温度与音速公式:u=331.3+(0.606 x t)m/s (t 为摄氏温度)计算得到所测量的距离,显示在前面板上。
3、当处于自动测温模式时,且 LabVIEW 软件超时 1 秒时,向下位机 Arduino 控制器发送采集温度的命令,并将回传的温度数据显示在前面板上,实时更新温度,以保证测距尽可能精确。
5.1、前面板设计
LabVIEW 上位机前面板主要有当前温度值和测量距离的显示表盘,以及自动测量选框和手动测温的按钮,如下图所示:
5.2、程序框图设计
LabVIEW 程序首先通过选择的 Arduino Uno 控制器的串口号来初始化串口通信,然后进入内嵌事件结构的 While 循环中,当"温度测量"按钮被按下时,则向 Arduino Uno 控制器发送温度测量的命令码,等待 1 秒之后读取 Arduino Uno 控制器返回的温度数据并显示出来。
当“距离测量"按钮被按下时,则向 Arduino Uno 控制器发送距离测量的命令码,等待 1 秒之后读取 Arduino Uno 控制器返回的超声波往返时间,并通过温度与音速公式 u=331.3+(0.606 x t) m/s (t 为摄氏温度),计算得到所测量的距离数据显示出来。
当“温度测量"和“距离测量"按钮在 1 秒内都没被按下时,LabVIEW 程序进入“超时”",且当自动测量选项被使能后,则向 Arduino Uno 控制器发送温度测量的命令码,等待 1 秒之后读取 Arduino Uno 控制器返回的温度数据并显示出来,以实时更新当前的温度。最后关闭串口通信。
LabVIEW 上位机软件中的“温度测量”、“距离测量"和“超时"的程序框图如下所示:
项目详情请参见:LabVIEW控制Arduino实现超声波测距-单片机文档类资源
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/a9f5b396d29ccb4e72ebe7f48】。文章转载请联系作者。
评论