LabVIEW控制Arduino实现红外测距(进阶篇—6)
时间:2022-12-13 00:00:00
目录
1、项目概述
2、项目架构
3、硬件环境
4、Arduino功能设计
5、LabVIEW功能设计
5.1.前面板设计
5.2、程序框图设计
1、项目概述
红外测距是一种非直接接触测量方法,由于其结构简单、抗干扰性强、成本低等优点,在测量测绘中得到了广泛的应用。
红外不易散射,穿透能力强,抗干扰能力强,易产生,对环境影响小,不会干扰附近的无线电设备。同时,红外光具有反射、折射、散射、干扰、吸收等特点,因此得到了广泛的应用。
本文将介绍夏普公司的使用情况GP2D红外传感器12,Arduino Uno和LabVIEW红外测距系统可用于机器人避障等场合的距离测量。
2、项目架构
红外测距系统框图如下图所示:
在整个系统中,Arduino Uno作为下位机,负责阅读GP2D红外传感器输出值及上传数据,LabVIEW作为上位机,该软件负责将测量的电压转换为距离值并显示,并使用上下位机USB-TTL接口通信。
请参见项目资源:LabVIEW控制Arduino红外测距-单片机文档资源
3、硬件环境
将GP2D12红外传感器VCC、GND、Vo分别接至Arduino Uno控制板上的 5V、GND、模拟端口A0。最好在VCC与GND之间并联100uF稳定的电解电容GP2D供电电压为12,使输出电压更加稳定。红外测距系统的硬件连接如下图所示:
4、Arduino功能设计
在基于Arduino与LabVIEW在上下位机红外测距系统中,Arduino Uno控制板需要完成以下功能:接收和判断命令、收集和传输GP2D12传感器输出的电压。ArduinoUno控制板通过串口接收上位机发出的命令,分析得到有效命令,并多次收集GP2D12传感器的电压输出值,GP2D上传12电压输出的平均值LabVIEW软件。
Arduino Uno控制器负责读取LabVIEW通过上位机发出的距离测量命令GP2D12红外传感器获取距离数据,并通过串口发送回上位机LabVIEW软件。Arduino Uno控制器的程序代码如下:
#define Infrared_COMMAND 0x10 //收集命令字 byte comdata[3]={0}; //定义数组数据,存储串口接收数据 void receive_data(void); //接受串口数据 void test_do_data(void); //测试串口数据是否正确,并更新数据 float SensorSum = 0; int SensorPin = A0; // select the input pin for the potentiometer void setup() { Serial.begin(9600); } void loop() { while (Serial.available() > 0) ///不断检测串口是否有数据 { receive_data(); //接受串口数据 test_do_data(); ///测试数据是否正确,更新标志位置 } } 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) { 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功能设计
LabVIEW上位机部分需要完成以下功能:
1、向下位机Arduino红外数据采集命令由控制器发送,Arduino控制器通过串口接收上位机命令,完成红外数据采集,并将采集的红外数据返回,LabVIEW该软件将红外数据转换为距离值并显示在前面板上。
2.通过红外传感器的电压和距离特性,拟合电压和测量距离的拟合曲线,以便更好地将电压转换为测量距离值LabVIEW计算能力远强于Arduino控制器的计算能力,电压和距离的转换LabVIEW只要其电压与距离的数值关系,软件就能提高测量精度,扩展其它红外测距传感器。
5.1.前面板设计
LabVIEW上位机前面板分为拟合和测量两部分,提供8个电压-距离的拟合点,提高系统的测量精度,提供多次测量显示,计算平均值,尽可能准确地获取距离数据。红外测距系统LabVIEW上位机前面板,如下图所示:
5.2.程序框图设计
为了LabVIEW上位机的程序结构更清晰,程序设计更方便。LabVIEW与Arduino串口通信的LabVIEW上位机部分设计为测量子程序,在主程序中调用,主要是方向Arduino Uno控制器发送命令码并获取Arduino Uno控制器返回的测量数据,实现测量功能。
如下图所示:
LabVIEW上位机主程序的结构是顺序结构 While循环 事件结构。首先,在顺序结构的第一帧中,使用的数组、中间变量和显示控件被初始化,在顺序结构的第二帧中,串口号被初始化。然后,程序进入While循环和事件结构,不断检测是否有事件得到响应和执行,事件结构有测距_测量,测距_计算平均值,和"曲线拟合。最后,关闭串口通信。如下图所示:初始化程序框图:
在“测距_测量"在事件结构中,通过测量子程序"读取Arduino Uno控制器返回的数据,用公式节点和5阶拟合系数计算测量距离,用计数器在测量数据中循环显示距离数据。_测量"变值事件程序框图(部分)如下图所示:
在"测距_计算平均值"在事件结构中,测量距离的平均值可以通过将测量数据数组的五个元素加并除以5来获得。这种多次测量方法可以提高测距精度,满足高精度测距的需要。_计算平均值的事件程序框图(部分)如下图所示:
曲线拟合"在事件结构中,通将距离数组和电压数组利用5阶广义多项式拟合方式,计算出拟合系数并显示在标定系数上。"曲线拟合”值改变事件程序框图如下图所示:
由于本节所采用的是普通红外测距传感器,通过广义多项式拟合方式可以较为精确地拟合出电压与距离之间的关系,使得测量精度有所提高。
项目资源请参见:LabVIEW控制Arduino实现红外测距-单片机文档类资源