1、项目概述
2、项目架构
3、硬件环境
4、Arduino功能设计
5、LabVIEW功能设计
5.1.前面板设计
5.2、程序框图设计
1、项目概述
DS18B20是美国DALLAS与传统的热敏电阻相比,半导体公司的数字单总线智能温度传感器可以直接读取被测温度,并根据实际要求通过简单的编程实现9~12位数字值读数法。DS18B读写信息或写入信息只需要一条线(单总线)读写,总线本身也可以没有额外电源的情况下向挂接的设备供电。
本博文将实现LabVIEW控制Arduino采集多路DS18B关于20温度值LabVIEW控制Arduino在基础文章中,解释了多种温度传感器的采集方法。详见以下链接:
LabVIEW控制Arduino采集LM35温度传感器值(基本篇-12)
LabVIEW控制Arduino采集热敏电阻温度值(基本篇-13)
2、项目架构
本项目将介绍使用2个项目DS18B20传感器、Arduino Uno和LabVIEW多路温度数字测量系统的框图如下图所示:
其中,2个DS18B将20温度传感器连接到单总线,Arduino Uno负责下位机DS18B读写和数据传输;LabVIEW作为上位机编写的显示软件,上下位机使用USB-TTL接口通信。
下载项目请参见:LabVIEW控制Arduino采集多路DS18B20温度值-单片机文档资源
3、硬件环境
将DS18B20温度传感器Vcc和GND分别连接至Arduino Uno控制器的 5V和GND,以给DS18B20提供电源,DS18B20的DQ引脚接至Arduino Uno数字引脚控制器D2,且连接4.7KΩ因为DS18B20的DQ正常工作引脚需要增加拉电阻。多路温度数字测量系统硬件连接图如下图所示:
4、Arduino功能设计
在基于Arduino与LabVIEW的上下位机温度监测系统中,Arduino Uno控制板需要完成以下功能:接收和判断命令,收集和传输温度数据,Arduino Uno控制板通过串口接收上位机发出的命令,分析有效命令,读写DS18B20传感器获取温度并上传温度数据LabVIEW软件。
Arduino Uno控制器负责读取LabVIEW上位机发来的温度采集命令,并读取对应的DS18B20传感器通过串口将温度数据发送回上位机LabVIEW软件。Arduino Uno控制器的程序代码如下:
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 //DS18B20接至Arduino数字口2 #define T1_COMMAND 0x80 //收集命令字 #define T2_COMMAND 0x81 //收集命令字 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); byte comdata[3]={0}; //定义数组数据,存储串口命令数据 void receive_data(void); //接收串口数据 void test_do_data(void); ///测试串口数据是否正确,执行命令 void setup() { Serial.begin(9600); // Start up the library sensors.begin(); } 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) { switch (comdata[2]) { case T1_COMMAND: sensors.requestTemperatures(); //ratures Serial.print(sensors.getTempCByIndex(0)); break; case T2_COMMAND: sensors.requestTemperatures(); // Set temperatures Serial.print(sensors.getTempCByIndex(1)); break; } } } }
5、LabVIEW功能设计
LabVIEW上位机部分需要完成以下功能:向下位机Arduino控制器发送温度采集命令,Arduino控制器通过串口接收上位机命令,收集温度数据后返回数据,LabVIEW软件在前面板上显示回传的温度数据。
5.1.前面板设计
LabVIEW前面板分为温度显示和传感器选择端。传感器选择端用于确定当前监测的传感器,波形数据用于显示温度数据的变化趋势。LabVIEW上位机前面板如下图所示:
5.2.程序框图设计
LabVIEW上位机主程序的结构是顺序结构 While循环。首先,在顺序结构的第帧中,通过设置的串口号初始化串口通信,并清空波形图。然后,程序进入While循环和平铺顺序结构Arduino Uno等待100ms,在收到返回的温度后,在前面板上显示温度波形。最后关闭串口通信。
选择需要测量的传感器,然后通过前面板上的单选按钮Arduino Uno传感器1命令码为0x55AA80传感器2命令码为0x55AA81延迟800毫秒,每秒采样一次。传感器1和传感器2对应的程序框图如下图所示:
下载项目请参见:LabVIEW控制Arduino采集多路DS18B20温度值-单片机文档资源