目录

1、项目概述

2、项目架构

3、硬件环境

4、Arduino功能设计

5、LabVIEW功能设计

5.1、前面板设计

5.2、程序框图设计


1、项目概述

超声波测距是一种传统而实用的非接触测量方法,与激光、涡流和无线电测距方法相比,具有不受外界光及电磁场等因素影响的优点,在比较恶劣的环境中也具有一定的适应能力,且结构简单、成本低,因此在工业控制、建筑测量、机器人定位方面有广泛的应用。

本节将介绍使用HC-SR04超声波传感器、DS18B20数字温度传感器、Arduino Uno和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控制器的程序代码如下所示:

#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 librarysensors.begin();}void loop()
{while (Serial.available() > 0)   //不断检测串口是否有数据{receive_data();            //接受串口数据test_do_data();               //测试数据是否正确并更新数据}
}
void distance_time(void)
{digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH);//发送10μS的高电平触发信号delayMicroseconds(10);digitalWrite(TrigPin, LOW);distance = pulseIn(EchoPin, HIGH); // 检测脉冲宽度,即为超声波往返时间
}void receive_data(void)
{int i ;for(i=0;i<3;i++){comdata[i] =Serial.read();//延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,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 temperaturesSerial.print(sensors.getTempCByIndex(0));  break;case 0x02:  distance_time();Serial.print(distance) ;  break ;}}}
}

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实现超声波测距-单片机文档类资源

LabVIEW控制Arduino实现超声波测距(进阶篇—5)相关推荐

  1. LabVIEW控制Arduino实现示波器(基础篇—7)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的模拟采样函数库,通过Arduino Uno控制板上的模拟输入端口采集模拟信号,并上传至LabVIEW界面上显 ...

  2. LabVIEW控制Arduino流水灯(基础篇—3)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的数字I/O函数库,通过LabVIEW控制Arduino Uno控制板上多个管脚上LED灯,实现依次点亮,依次 ...

  3. LabVIEW控制Arduino采集DHT11温湿度数值(进阶篇—4)

    目录 1.项目概述 2.项目架构 3.硬件环境 4.Arduino功能设计 5.LabVIEW功能设计 5.1.前面板设计 5.2.程序框图设计 1.项目概述 在多数情况下,测量温度的同时需要测量湿度 ...

  4. LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)

    目录 1.项目概述 2.项目架构 3.硬件环境 4.Arduino功能设计 5.LabVIEW功能设计 5.1.前面板设计 5.2.程序框图设计 1.项目概述 DS18B20是美国DALLAS半导体公 ...

  5. LabVIEW控制Arduino实现舵机联控(基础篇—9)

    目录 1.控制单个舵机 1.1.实验目的 1.2.实验环境 1.3.程序设计 1.4.实验演示 2.控制多个舵机 2.1.实验目的 2.2.实验环境 2.3.程序设计 2.4.实验演示 本篇博文将通过 ...

  6. LabVIEW控制Arduino实现RGB调色灯(基础篇—6)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的RGB函数库,通过LabVIEW控制Arduino Uno控制板实现RGB调色. 2.实验环境 将共阳RGB ...

  7. LabVIEW控制Arduino采集光敏电阻数值(基础篇—14)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用光敏电阻和LIAT中的光敏函数库,通过Arduino Uno控制板的模拟端口采集与光敏电阻串联电阻的分压值上传给LabV ...

  8. LabVIEW控制Arduino驱动数码管(基础篇—11)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的数码管显示函数库,通过LabVIEW软件控制Arduino Uno控制板,将特定的数据显示在单个数码管上,实 ...

  9. LabVIEW控制Arduino采集电位器电压(基础篇—4)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT函数库中模拟IO的功能,通过Arduino Uno控制板上模拟输入端口实现对电压的测量,并显示在LabVIEW前 ...

最新文章

  1. 【SLAM】卡尔曼滤波:究竟滤了谁?
  2. [NOI2015]品酒大会
  3. MavenMybatis可能会遇到的问题
  4. 项目: 打字母游戏【c++/c】
  5. Java中类、方法声明为静态的含义
  6. tp论坛 分页(三)
  7. wireshark-win64-3.4.0安装_万达讲堂轴承安装后易损坏的原因,点进来,告诉你!
  8. HDU3400(计算几何中的三分法利用)
  9. 让人迷糊的 socket udp 连接问题
  10. 设计模式6大原则简述
  11. LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
  12. @Autowired注解能用在static属性吗?autowired注入static属性上为null
  13. 统计学习方法笔记(李航)———第三章(k近邻法)
  14. java 蓝桥杯算法训练 特殊的数字四十
  15. 关于Microsoft Enterprise Library的介绍
  16. Halcon教程十三:图像预处理
  17. 中国各省份中英文,Json格式
  18. Android Notification使用
  19. python-分分钟入门—idea配置开发环境
  20. linux python3安装包_在 Linux 中安装 Python3

热门文章

  1. Java Agent 探针技术
  2. python怎么输出数组全部数据_Python打印输出数组中全部元素
  3. CSAPP缓冲区溢出攻击实验(上)
  4. Android中opensl架构,Android OpenSL ES详解
  5. uniapp 生命周期(onLoad跟onLoadonShow的区别)
  6. JavaScript 的三种书写位置,注释形式,变量的使用叙述
  7. 微信小游戏、three.js、真机调试,出现锯齿的解决办法
  8. python列表添加字典,在python中添加数据到字典
  9. flink的timeWindowAll流无法输出数据
  10. 如何实现弹性伸缩:实践指南及最佳实践