文献标识码: A
文章编号: 0258-7998(2014)12-0082-04
0 引言
随着人民生活水平的逐步提高,绿色健康成为人们所倡导的生活方式。但是近年来空气质量令人担忧,国内大部分城市都出现过严重的雾霾天气。空气质量消息成为人们关注的重点,也是逐渐通过网络更新发布,参考文献[1-2]中提出了针对空气质量监测的专门的仪器装置。一般情况下,虽然有专门仪器检测空气中的有害气体,但普遍价格偏贵,测量耗费时间,便携性不佳,某些仪器还需要专业人员操作,并且这些装置的数据无法通过网络在线查看。
基于人们对健康生活的要求,需要一种人机交互简单、携带方便、方便查看数据的空气质量监测装置,本文提出一种小巧方便的基于开源硬件的在线空气质量监测系统。以开源硬件Arduino为核心,采用灰尘传感器、有机物挥发气体传感器以及温湿度传感器作为数据采集,通过LCD模块实现现场数据的显示,并且通过以太网模块将数据上传至开放物联网接入平台,从而实现通过网页或者手机端对空气质量数据的实时查看。
1 系统硬件设计
本系统采用开源硬件Arduino为系统核心,配合DSM501灰尘传感器、MS1100有机物挥发气体传感器、DHT22温湿度传感器、 ENC28J60以太网控制器、1602字符型液晶模块实现了整个硬件系统的搭建。其硬件构成如图1所示。
1.1 Arduino主控板
Arduino是源自意大利的一个教学用开源硬件项目,其硬件系统是高度模块化的,通过USB接口与计算机连接,包括14通道数字输入/输出,其中包括6通道PWM输出、6通道10位ADC模拟输入/输出通道,电源电压主要有5 V和3.3 V[3]。
Arduino主控板采用ATMEGA328P-PU微处理控制器。ATmega328P是一款8位的AVR处理器,具有功耗低、性能高的特点。在核心控制板的外围,有开关量输入输出模块、各种模拟量传感器输入模块、总线类传感器的输入模块,还有网络通信模块。Arduino系统是基于单片机开发的,已有大量应用通用和标准的电子元器件,包括硬件和软件在内的整个设计,代码均采用开源方式发布[4]。并且Arduino还提供了自己的开发语言,IDE开发环境支持Windows、Linux、Mac OS等主流操作系统。
Arduino的硬件和软件都是开源的,这就意味着任何人都可以自由地获取代码、图表、设计。利用开源的设计方案,任何人也可以制作克隆板,并且可以根据自己的需求精简系统控制成本。这种开放的精神促进了Arduino的蓬勃发展,有着大量的爱好者为其开发新的扩展板,并维护着丰富的第三方库。
1.2 灰尘传感器
空气中的悬浮颗粒浓度是现今环境下影响空气质量的重要指标,灰尘传感器的主要工作原理为在暗室中的空气灰尘物质被激光照射后,灰尘的浓度与光线散射强度成正比关系,通过光电感应传感器即可将光强转化为电流。
本设计选用DSM501灰尘传感器,该传感器的测量精度可达到1 ?滋m,并可自动吸入空气。其具体原理结构如图2所示。
在灰尘传感器内部通过设置加热板使气流上升从而促进外部空气流入模块内部,如有灰尘等粒子通过时,在透镜的放大作用下阻断发光二极管光源使得光电传感器检测不到光线,从而实现粒子计数。如果光电传感器检测不到光线,输出低电平信号,反之输出高电平信号,形成如图3所示的PMW脉冲宽度调制信号。通过计算一定时间内低电平脉冲的比例,参照特征曲线,即可以计算出空气中的粒子数以及PM2.5的参数。
1.3 挥发性有机化合物气体传感器
挥发性有机化合物是指能参加大气光化学反应的有机化合物。这种化合物对人体健康有着非常重大的影响,达到一定浓度时会直接伤害人体内脏以及大脑与神经系统,所以是空气质量监测的重要参数。
MS1100采用了半导体式的挥发性有机化合物气体传感器,可直接输出电平数据或者模拟信号,本设计中采用模拟信号输出至Arduino。
1.4 温湿度传感器
为了提高测试的精确度,减少使用代码校准,本设计使用了DHT22温湿度传感器。DHT22传感器采用电容式感湿原件与NTC测温元件并含有一个小型的8位单片机。传感器在检测信号处理过程中调用储存在OTP内存中的校准参数,以单线制串行接口输出已校准信号。
DHT22与Arduino之间采用的进行通信和同步的数据格式为单总线型,在每次5 ms左右的通信时间内,发送数据量为40 bit,其中湿度数据为16 bit,温度数据为16 bit,校验和为8 bit。当Arduino发送一次开始信号后,本为节能模式的DHT22变为高速模式,Arduino发送完开始信号后,进入拉高等待状态,而DHT22收到Arduino发出的开始信号后则首先发出响应信号,在一段拉高时延后送出40 bit数据,随后开始新的一次数据采集。故Arduino收到的并不是实时的数据,所以一般在程序中还需要刷新后再获取数据。DHT22与Arduino通信的具体过程如图4所示。
1.5 以太网控制器
相对于传统的空气质量检测装置,本设计的重点是数据的网络化,即如何在线查看空气质量情况。Arduino官方的以太网模块为Wiznet W5100,对于Arduino的IDE所提供的Ethernet库也是基于这个芯片。但是还有一种广泛使用的以太网微型控制器,这种控制器体积更小,价格相对便宜,有着广泛的第三方库支持,ENC28J60与W5100的比较如图5所示。不过W5100芯片集成了成熟的TCP/IP协议栈,节省了MCU资源。在本设计中考虑到成本与体积问题,采用了ENC28J60芯片。
ENC28J60是一款常见的带SPI接口的以太网控制器,符合IEEE802.3规范,采用包过滤机制以对传入数据包进行限制,集成MAC和10BASE-T端口。ENC28J60通过内部的直接存储模块实现对数据的快速吞吐并且可以对IP校验和进行硬件支持。
1.6 LCD显示模块
虽然在线空气质量监测系统的所有传感器数据都可以通过网页或者客户端实时查看。但是在网络故障的情况下,还有着本地查看的需求。在本设计中采用了LCD1602模块。该模块价格低廉,采用点阵式LCD,可以显示数字、英文字符、符号。一共可以显示16×2个字符,基本满足本设计需要。
2 开放物联网接入平台
物联网作为近些年的信息技术的重要组成部分,其包含了两层意思。一方面,物联网只是传统互联网的延伸和扩展,其核心部分还是互联网;另一方面,物联网把传统互联网的终端从电脑、手机等延伸到了任何可以进行信息通信的物品。
物联网虽然发展迅速,但是却没有统一的融合管理平台。因此涌现出了众多物联网的接入平台,可以使用户不再关注部署和运营互联网,而是可以利用工具包直接处理传感器数据,支持用户使用多种协议方式上传符合标准格式的传感器数据,并且通过socket还能实现对传感器设备的反向控制。
本设计中选择了Yeelink开放物联网接入平台。除了上述功能,Yeelink还实现了仪表盘交互、事件触发、移动APP、社交等众多功能,使整个系统有着强大的扩展性。
3 系统整合设计
Arduino语言建立在C/C++基础上,类似基础的C语言,Arduino语言把AVR单片机相关的一些参数设置都函数化,使用户不用去了解底层,而专心于解决问题[5]。
本设计采用灰尘传感器、有机物挥发气体传感器、温湿度传感器对室内环境进行监测,并将监测信号发送至Arduino控制板;Arduino对数据进行处理之后通过LCD进行显示,并通过以太网控制器模块将数据上传至物联网平台。
Arduino程序必须包括setup()和loop()两个函数,其中setup()函数只在程序开始时使用,这个函数可以在主循环开始前为程序设定一些通用的规则,如初始化变量、管脚模式、调用库函数等。loop()在setup()函数之后,即初始化之后,每一条loop()函数中的代码都要执行,并且按顺序逐个执行,直到函数的最后。然后loop()函数再次开始从顶部执行,一直循环下去,主要使用它来运转Arduino。
3.1 传感器数据处理
DSM501灰尘传感器将测量的数据转化为PWM信号,但是该信号并不代表实际的空气中的微型颗粒浓度,所以还需要对得到的低脉冲信号进行转化。其中低脉冲率为总的低脉冲时间与单位采样时间的比值。根据DSM501的特性曲线可以得到对应的粒子数为:
Y=0.1776X3+0.24X2+94.003X(1)
其中Y为粒子数,X为低脉冲百分率。
PM1.0的计算实现代码为:
float dsmTemp0=(sumTimeofLow10*100.0)/dsmStatTimes10;
float dsmTemp10=0.1776*pow(dsmTemp0,3) - 0.24*pow
(dsmTemp0,2) + 94.003*dsmTemp0;
PM2.5的计算实现代码为:
dsmTemp0=(sumTimeofLow25*100.0)/dsmStatTimes25;
dsmTemp25=0.1776*pow(dsmTemp0,3) - 0.24*pow
(dsmTemp0,2) + 94.003*dsmTemp0;
dsmTemp25=dsmTemp10-dsmTemp25;
为了减小外部环境的干扰,本设计对计算得到的粒子数进行数字滤波处理。常用的滤波算法很多,但是由于系统资源有限,在设计中采用了算法简单、运算速度快的递推平均滤波算法。
递推平均滤波属于平滑滤波,它将N个测量值放入暂存队列区域,当获取新的数据时,新测量的数据会插入队尾并同时舍弃队首的数据,之后对新得到的N个数据做算术平均值。采用这种方式做N次的滤波运算比普通的算术平均值计算方法快N-1倍,其具体算法为:
y(k)=[x(k)+x(k-1)+x(k-2)+…+x(k-N+1)]/N(2)
其中y(k)为经过平均滤波处理后的数据,x(n)为第n次测量后得到的数据。
Arduino的实现关键代码为:
uint16_t filteringDsm(uint8_t l,uint16_t _dsmData){
filtSum[l] =filtSum[l]- filtDsm[l][filtI[l]];
filtSum[l] =filtSum[l]+ _dsmData;
filtDsm[l][filtI[l]] = _dsmData;
filtI[l]=filtI[l]+1;
if (filtI[l] >= FILT_N) filtI[l] = 0;
return filtSum[l]/FILT_N;}
其中N设置为10,数组元素的初始值均为0。
3.2 数据在线监测集成
物联网的构架一般分为三个层次。最底层为可以采集、测量数据及被控制的仪器或设备,在本设计中为各种传感器;上一层为将底层采集数据发给云端服务器或将控制信号发给底层的设备,在本设计中为Arduino控制板配合ENC28J60以太网控制器。该层的设备一方面要能与底层测量设备进行通信,另一方面要具备网络功能;最上层为云端服务器,云端服务器可以存储与分析数据,并且用户可以通过各种终端设备访问数据库,以实现基于数据的各种应用。
物联网平台一般采用开放的API将传感器及测量设备接入平台。当用户在物联网平台注册后将会得到一个APIKey。在用户管理界面还能添加新的设备与传感器ID,物联网平台通过这些参数将传感器的数据存储到对应的云端数据库之中。
根据不同的物联网平台进行相应的数据格式化之后,通过ENC28J60传感器的Ethercard库的Stash函数实现数据的上传。
当传感器数据成功上传至云端服务器后,即可通过网页查看实时数据,实现对空气质量的在线监测。
4 总结
经实验证明,基于开源硬件的在线空气质量监测系统运行稳定。本文采用灰尘传感器、有机物挥发气体传感器、温湿度传感器、Arduino控制板、LCD液晶显示模块、以太网控制模块等共同构建了监测系统。该系统一方面可以通过LCD模块在本地实时查看空气质量状态,另一方面可以通过网络进行远程查看。该系统小巧紧凑,操作方便,适合现代人们生活需求,具有市场潜力和开发价值。
参考文献
[1] 邓桂昌.室内便携式智能空气品质监测仪的研究与设计[D].长春:吉林大学,2009.
[2] 杜娟.便携式现场甲醛检测仪的设计[D].郑州:郑州大学, 2010.
[3] OXER J,BLEMINGS H.Practical Arduino:cool projects foropen source hardware[M].New York:SpringerVerlag,2009:1-10.
[4] 杨继志,杨宇环.基于Arduino的网络互动产品创新设计[J].机电产品开发与创新,2012,25(1):99-100,60.
[5] 蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012,(16):155-157.