基于Arduino+LabVIEW的多路数据采集系统
本帖最后由 何处不江南 于 2013-11-20 16:49 编辑
Arduino也可以进入大学,Labview基本是现在每个自动化相关专业本科都会学习的编程软件,配合上Arduino,也可以做出像样的东西。注:本文转载于新浪博客:奔跑的成长之路 http://blog.sina.com.cn/shenjinxin2008 摘要:针对低速、低成本、快速搭建的特点,采用Arduino与LabVIEW来实现低成本上下位机数据采集系统。Arduino作为下位机,负责A/D转换以及数据传输;LabVIEW编写的数据采集软件作为上位机;上下位机利用RS-232串行接口实现通讯。 【注】一般认为上位机为主机,下位机为从机,上位机领导下位机按照上位机机的意愿工作为上位机服务;同时下位机也可以主动向上位机发出请求,上位机响应下位机并配合完成某个请求。数据采集,是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。相应能够完成数据采集的系统被称为数据采集系统。 数据采集系统的任务,就是采集传感器输出的模拟信号转换成计算机能识别的信号,并送入计算机,然后将计算得到的数据进行显示或打印,以便实现对某些物理量的监测,其中一些数据还将被生产过程中的计算机控制系统用来控制某些物理量。 【文献1】一、Arduino下位机部分数据采集系统中的Arduino下位机部分采用Arduino Leonardo实验板,如图1所示。 Arduino下位机部分需要完成两个功能:数据采集和数据传输,Arduino Leonardo控制板通过串口接受上位机命令,完成相应的数据采集,并将数据回传至上位机。 数据采集分为模拟量采集和数字量采集,设置采集路数各为2路,分别采用Arduino UNO上具有模拟量输入的管脚A0、A1和具有数字量输入的管脚2、3来实现。模拟量采用接至GND、3.3V和5V来实现不同电压值,数字量采用接至5V和GND实现高电平与低电平。【注】如果有电位器,可以用来测量分压值。由于手头没有电位器,我这里只是简单的实现。Arduino Leonardo代码清单:#define A0_COMMAND0x10 //A0采集命令字#define A1_COMMAND0x11 //A1采集命令字#define D0_COMMAND0x20 //D0采集命令字#define D1_COMMAND0x21 //D1采集命令字
byte comdata[3]={0}; //定义数组数据,存放串口接收数据int LED = 13; //定义LED连接的管脚int A0_mark=0; //定义A0的标志位int A1_mark=0; //定义A1的标志位int D0_mark=0; //定义D0的标志位int D1_mark=0; //定义D1的标志位
int AD_Value=0; //AD转换后的数字量float float_AD_Value; //数字量换算成浮点电压量int D_Value=0; //数字量测量的数据
void receive_data(void); //接受串口数据void test_data(void); //测试串口数据是否正确,并更新数据void do_command(void); //执行更新的数据
void setup(){Serial.begin(9600); pinMode(LED, OUTPUT);
}void loop(){while (Serial.available() > 0) //不断检测串口是否有数据 { receive_data(); //接受串口数据 test_data(); //测试数据是否正确并更新标志位 do_command(); //执行更新的数据 }}void receive_data(void) { int i ; for(i=0;i<3;i++) { comdata =Serial.read(); //延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失, delay(2); }}
void test_data(void){if(comdata[
图4 模拟量采集程序框图
图5 数字量采集程序框图三、实验与演示 通过将模拟量输入A0依次接入GND、3.3V和5V,然后点击“测量”按钮,观察面板上的仪表盘和数显框中数值的变化。 通过将数字量输入2依次接入GND和5V,然后点击“测量”按钮,观察面板上的LED灯的变化,LED亮代表高电平、LED灭代表低电平。
四、总结 在传感器等领域经常需要用到数据采集的功能,此应用实现了命令发送与数据回传功能,可以在此基础上扩展功能,对相关传感器的数据采集有一定的参考价值。参考文献:文献1:基于单片机的数据采集系统的控制器设计文献2:http://arduino.cc/