文献标识码:A
文章编号: 0258-7998(2015)04-0073-04
0 引言
我国是一个农业大国,传统农业模式多采用粗放式管理,主要依靠个人感知来管理农作物周围的环境参数,无法做到对影响农业环境参数的精确控制,从而很难做到投入产出比的最优化[1]。智能农业作为农业科技的最新发展方向,通过对农作信息的智能化采集,并对采集后的信息通过科学地分析,从而制定出高效集约的可持续性发展方式,高效利用农业资源,实现可观的经济效益。
信息采集作为智能农业的起点,主要通过对农作物生长环境系统中大气温湿度、光照强度、土壤湿度、二氧化碳浓度、土壤pH值等参数进行测量与汇总,为技术人员提供分析与决策的依据。虽然目前的研究主要都是基于无线传感器网络的农业检测系统[2],但是在应用中由于专业传感器模块价格昂贵,导致节点成本偏高。本文提出一种基于开源硬件的智能农业监测系统,以高性价比的开源硬件Arduino为核心控制器,采用ZigBee技术无线连接上位机LabVIEW,实现数据的可视化。同时由于Arduino的强扩展性,可以根据使用需求增加传感器模块,以及采用有线串口连接Arduino控制板与上位机。
1 系统硬件组成
监测系统的数据采集部分主要使用Arduino作为核心控制器,配合BH1750光照传感器、YL-69土壤水分传感器、DHT22温湿度传感器以及CO2浓度传感器采集农作物生长环境参数后,采用接口扩展板连接Xbee,通过无线(也可采用RS-485总线)与上位机的虚拟仪器Lab-VIEW软件通信。
1.1 Arduino控制器
Arduino作为一个开源的电子平台,其不仅是一种基于Atmel AVR单片机的控制器,也是包含Arduino IDE以及开源社区的一个开源系统。Arduino控制器采用了多样的硬件配置,其中应用最为广泛的Arduino Uno采用ATmega 328作为核心处理器,包括14通道数字输入/输出,其中包括6通道PWM输出、6通道10 bit ADC模拟输入/输出通道,电源电压主要有5 V和3.3 V[3]。在核心控制板的外围,有开关量输入输出模块、各种模拟量传感器输入模块、总线类传感器的输入模块,还有网络通信模块[4]。使用者通过编程与输入和输出信号做出各种交互。由于Arduino采用开源协议,任何人和公司都可以利用开源公布的文档生产兼容的Arduino控制器。Arduino兼容控制器的低廉价格,受到广大极客的热捧。
1.2 光照传感器
BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。其内部结构如图1所示。
光敏二极管PD的信号通过集成运算放大器将电流转化为电压,之后通过ADC进行数模转换为16 bit数字信号,转换后的数字信号通过逻辑芯片输出为I2C信号。BH1750FVI的地址模式分为高位和低位两种,当ADD接VCC时为高地址模式,当ADD接GND时为低地址模式。
1.3 土壤水分传感器
在监测系统中,采用了价格低廉的电阻式水分传感器。可以根据使用需要更换为抗电离腐蚀的专用数字土壤水分传感器。
如图2所示,当传感器探头插入土壤中时,由于土壤水分含量影响土壤电阻值的大小,从而影响三极管基极的导通电流的大小。基极电流放大为发射极电流后经下拉电阻转化为电压形式输入Arduino控制板。
1.4 温湿度传感器
本监测系统采用DHT22作为温湿度传感器,它采用了电容式感湿元件与NTC测温元件,并集成了一个微型8位单片机。DHT22将在湿度实验室中校准的系数存储在OTP内存中,检测信号需要通过校准系数进行处理。
DHT22采用单总线数据结构进行通信和同步。每次通信发送数据量为40 bit,其中湿度数据为16 bit,温度数据为16 bit,校验和为8 bit。一般采用高速模式通信,每次通信发送时间约为5 ms。DHT22在收到Arduino所发出开始信号后才开始一次温湿度的测量,平时不会主动收集数据。
1.5 CO2浓度传感器
CO2浓度传感器主要采用了MG-811 CO2探头,对CO2极为敏感,同时还能排除酒精和CO的干扰。其内部结构如图3所示。
当传感器在CO2的环境中,电极将会发生如下反应:
负极:2Li++CO2+1/2O2+2e-=Li2CO3
正极:2Na++1/2O2+2e-=Na2O
总电极反应:Li2CO3+2Na+=Na2O+2Li++CO2
传感器敏感电极与参考电极间的电势差(EMF)符合能斯特方程:
EMF=Ec-(RxT)/(2F)ln(P(CO2))
当探头内部通过外电路提供的电压加热时,探头就相当于一个固体电解质电池,其两端对应输出电压信号,其值符合能斯特方程。故可将空气中的CO2以电压的形式输出。
1.6 ZigBee通信模块
ZigBee是基于IEEE 802.15.4标准的低功耗个域网协议。其特点是近距离、自组织、低功耗、相对成本低。ZigBee工作在2.4 GHz、868 MHz和915 MHz频段上,可靠传输距离为75 m以内,一般室内为30 m。ZigBee的网络层采用了星型、树型和网状网3种网络拓扑结构,每个ZigBee网络最多可以支持65 000个节点[5],广泛地使用于自动控制和远程控制领域。
在Arduino系统中主要采用的是美国MaxStream公司生产的Xbee模块。该模块使用方便,只需将数据输入一个XBee模块,它就能自动地将数据发送到另一个匹配好的XBee模块。
采用XBee扩展板可以将XBee模块连接至Arduino,USB 适配器则可将XBee模块通过USB口与计算机连接,从而实现Arduino与计算机的数据通信。并可采用串口指令或X-CTU软件对XBee参数进行配置。
1.7 RS-485串口通信模块
虽然Arduino与上位机可以采用ZigBee技术进行无线连接,但是XBee相对其他传感器模块来说成本比较高,不适合大规模使用。Arduino作为开源硬件有着丰富的扩展性,可以根据使用需求与LabVIEW采用有线串口通信。并且只需要使用LabVIEW Interface for Arduino的库函数,并不需要了解具体的底层实现。
RS-485作为串口通信的标准之一,采用平衡传输方式。当采用二线制时,可以实现多点双向通信,总线上最多可接32个设备,最大传输距离约为1 200 m。
在使用RS-485时,Arduino端主要采用MAX485接口芯片模块完成RS-485与TTL电平的转换。由于上位机通常只带有USB接口,可以通过USB/RS-485转换电路,先将USB信号转化为TTL信号,再由TTL信号转化为RS-485信号。
2 虚拟仪器与LabVIEW
虚拟仪器是采用计算机为控制器,以软件方式实现数据测量的技术。虚拟仪器将采集的数据通过计算机传输、分析、处理、存储后,在虚拟面板显示测量结果。即通过编程实现真实仪器的功能,而通过虚拟面板显示。
2.1 LabVIEW
LabVIEW是由美国NI公司开发的图形化程序开发平台,早期用于自动控制设计,现已成为成熟的高级编程语言,广泛被工业界以及学术界所使用,作为标准的数据采集与设备控制软件[6]。
LabVIEW作为可视化的图形编程软件编写仪器软面板,界面友好,操作方便,具有以下特点[7]:(1)函数封装于可视化的模块之中,采用连线表示功能模块间的数据传递;(2)可采用高亮执行调试,直观显示运行中的问题;(3)多操作系统平台支持;(4)通信接口建立方便,可采用多种形式与下位机连接;(5)提供丰富的库函数供用户使用。
2.2 LabVIEW与Arduino的连接
LabVIEW与Arduino的连接方式包括了LabVIEW Interface for Arduino,有线串口、无线串口以及网络接口。LabVIEW Interface for Arduino由于实际上并不涉及Arduino编程,只能采用官方的Arduino函数库在LabVIEW端完全控制,所以可用传感器非常有限,扩展性差。网络接口的方式虽然是只需要Arduino与LabVIEW联入互联网就能实现方便地通信,但是对于农用耕地要实现互联网的覆盖和接入,在现阶段很难做到。所以,在农业监测系统中采用串口连接Arduino与LabVIEW。
在使用串口连接Arduino与LabVIEW之前,LabVIEW需要先安装VISA。VISA是虚拟仪器软件体系结构的缩写,主要应用于仪器编程的标准I/O应用程序接口。在LabVIEW采用VISA节点进行串口通信,配置好VISA是实现串口通信的首要步骤。
当采用无线串口,即设计方案中的ZigBee方式连接Arduino与上位机时,由于需要实现2个或者以上的XBee模块来实现通信,所以需要使用X-CTU软件每个XBee模块的参数进行配置[8]。XBee模块具有64 bit的长地址与16 bit的短地址,其中64 bit长地址为出厂时写入,不能修改,16 bit短地址需要进行人工配置。当采用长地址作为寻址方式时就需要将接收模块的64 bit地址设置为发送模块的目标地址高位(Destination Address High,DH)+目标地址低位(Destination Address Low,DL)。若采用短地址作为寻址方式则需将接收模块的16 bit地址设置为发送模块的目标地址低32 bit(DL),并将发送模块的DH置零。
3 Arduino与LabVIEW系统整合设计
3.1 传感器设置
Arduino语言建立在C/C++基础上,其基本程序框架由setup()和loop()两部分组成。Arduino程序首先执行setup()函数,并且只运行一次。因此,setup()函数一般用于初始化,例如设置引脚类型、配置串口、引入类库文件、外围器件的初始化等。初始化之后执行loop()函数,而且loop()函数将会不断循环执行,故所有的执行语句都放在loop()函数中,完成指定的输入/输出。
在本设计中,采用光照传感器、土壤水分传感器、温湿度传感器以及CO2浓度传感器采集农作物生长环境参数。其中土壤水分传感器与温湿度传感器的数据可以通过模拟输入口直接被Arduino读取。
对于光照传感器由于采用I2C总线传输,在配置完总线参数后,自定义读取数据函数如下:
int BH1750_Read(int address)
{ int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available())
{buff[i] = Wire.receive(); // receive one byte
i++;}
Wire.endTransmission();
return i; }
对于CO2浓度传感器,虽然输出电压可以通过模拟输入端直接读取,但是为了防止浓度的不均匀引起的突发误差,还需要对采样数据做平滑处理并转化为ppm浓度。
3.2 LabVIEW配置
LabVIEW的主要功能为:向Arduino控制板发送采集光照、温度、湿度、水分、二氧化碳的命令,Arduino在接收到LabVIEW的命令后,通过传感器模块接收相应的数据(并将二氧化碳传感器采集的电压数据转化的二氧化碳浓度)传送回LabVIEW,LabVIEW将收到的数据显示在前面板。
LabVIEW的前面板如图4所示,主要通过仪表盘表示了光照、温度、湿度、水分以及二氧化碳浓度的状态。
LabVIEW的主程序采用状态机实现。主程序分为6个状态:0状态初始化串口,1状态光照测量,2状态温度测量,3状态湿度测量,4状态水分测量,5状态二氧化碳测量。初始为0状态。程序框图如图5所示(以二氧化碳浓度采集环节为例)。
4 总结
基于开源硬件的智能农业监测系统,充分利用了开源硬件价格低廉、扩展性强的特点,并结合ZigBee低功耗、自组网的优势,使得整个系统可以基于虚拟仪器方便地对农业环境中的各个参数进行可视化监控,从而做到对环境的智能监测,以实现农作物的优质高产。而且本系统可以根据环境监测需要扩展新的传感器,并可在有线与无线组网间进行切换,在智能农业领域有着较强的实践性和可操作性。
参考文献
[1] 李圣华,肖传辉.基于物联网技术的智能农业系统设计[J].科技广场,2011(7):73-75.
[2] 张佐经,张海辉,翟长远,等.设施农业环境因子无线监测及预警系统设计[J].农机化研究,2010,32(11):78-82.
[3] Jonathan Oxer,Hugh Blemings.Practical Arduino:Cool Pro-jects for Open Source Hardware[M].New York:Springer-Verlag,2009:1-10.
[4] 米歇尔·麦克罗伯茨.Arduino从基础到实践[M].北京:电子工业出版社,2013.
[5] 韩廷阁,李书琴.基于ZigBee的土壤湿度无线采集系统节点设计[J].农机化研究,2010,32(12):154-159.
[6] 刘君华.基于LabVIEW的虚拟仪器设计[M].北京:电子工业出版社,2003.
[7] 李江全.LabVIEW虚拟仪器数据采集与串口通信测控应用实战[M].北京:人民邮电出版社,2010.
[8] 王静霞.一种与ZigBee/802.15.4协议兼容的RF模块XBee/XBee Pro及其应用[J].电子工程师,2007,33(3):24-27.