资讯详情

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

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温度值-单片机文档资源

标签: 3aa0电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台