APP下载

基于树莓派的微型智能空气质量检测系统的实现技术研究

2018-10-16宋坤伟

太原学院学报(自然科学版) 2018年1期
关键词:数组树莓温湿度

杜 彬,宋坤伟

(山西职业技术学院,山西 太原 030006)

引言

当前在城市中因雾霾、尾气排放、室内装修而形成的各类污染成分在空气中的传播,都会对人体健康造成损害,而大型室内场馆密闭性高、通风不足、人员密度大等特点使室内空气污染的检测与治理显得尤为重要,而快速高效的实时空气质量信息检测并自动记录相关数据的工作在为制订与实施空气质量改善措施提供参考依据的同时,还可以为管理机构对场馆中的空气质量变化趋势分析与实施人员流量管控措施提供基础数据支持,有效预防公共安全事故的发生。

树莓派作为基于Debian Linux系统的单板机计算机[1],因其体积小、集成化程度高、扩展性强的优势被广泛使用在不同领域的物联网应用系统中,其低廉的硬件价格与开放式的软件架构为用户提供了极高的性价比,非常有利于产品的推广与普及。树莓派的第三代产品Raspberry Pi3 提供了种类丰富的传感器接口支持,通过编程调用Linux开源库实现对PM2.5、二氧化碳、甲醛等传感器的控制,能够可靠的完成空气质量的实时动态检测与数据上传,并具有设备体积小、实施成本低、实时性强和精度高等优点。

1 系统整体结构

如图1智能空气质量检测系统整体架构所示,系统划分为智能检测终端与云服务器端两部分,智能检测终端由部署在树莓派平台上的多种传感器构成,系统利用传感器模块按固定周期分别采集空气中的MP2.5、二氧化碳、温湿度以及用于反映甲醛浓度的HCHO数据值,并调用GPRS模块上传至在线云服务器进行存储。在向被监测场所的管理机构提供实时、准确的空气质量数据的同时,通过共享在云端服务器上存储的数据,也可以为更大范围、更深层次的城市环境质量检测与综合评估系统的开发与运行提供基础数据支持。

图1 智能空气质量检测系统整体架构

2 硬件设计

2.1 树莓派开发平台

本文选用的树莓派3平台搭载了ARM11 处理器(主频700MHz)、512M主存与40个GPIO接口[2]。该平台良好的运算/处理能力与大量的GPIO接口在为系统中现有的各个传感器数据采集功能的可靠运行提供保障的同时,还使系统具备了良好的扩展性,开发人员可以根据项目的实际需求向系统中补充其它传感器模块,使系统功能更加完善。此外,树莓派平台仅有一张磁卡大小的体积,也使得设备的安装部署非常简便,适于在大型场馆空间中多点部署,对于当前室内装修结构愈加复杂的发展现状,树莓派平台具备了非常优异的适应性与良好的性价比。

2.2 PM2.5检测模块

PM2.5数据检测使用Rirans PM2.5激光传感器,由于PM2.5主要由悬浮在空气中的微小颗粒组成,普通的基于化学反映原理工作的有害气体传感器难以检测[3],因此本系统选用了基于激光反射原理的传感器,通过对空气中直径超过3.03 μm的悬浮粉尘进行激光照射,当这些粉尘因受到光照而产生的散射光线被传感器上的光接受元件接收到后,会根据散射的强弱(即反映粉尘密度)自动转换为不同强度的电信号,并以电压的形式输出到树莓派平台上进行处理,准确获取当前空气中的PM2.5数据。Rirans模块在树莓派平台上的配置方案如表1所示。

表1 Rirans PM2.5传感器配置方案

2.3 二氧化碳检测模块

二氧化碳数据检测所采用的MH-Z14A属于非色散红外检测型传感器,该传感器以红外线作为测量介质,利用二氧化碳吸收波长4.26μm红外线的物理特征来有选择地准确测量二氧化碳的分量,红外辐射透过被测气体后,在二氧化碳气体的相应波长处会发生能量的衰减,传感器通过测量该谱线能量的衰减量即可获知被测气体浓度,并以串口数据方式输出检测结果,具有良好的稳定性与可靠性。MH-Z14A模块的连接配置方案如表2所示。

表2 MH-Z14A传感器配置方案

2.4 温湿度检测模块

系统选用DHT22传感器来获取空气中的温湿度变化情况,该传感器基于热敏电阻与感湿电阻进行工作,由于电阻的阻值会随着空气中的温湿度变化而发生改变,因此传感器可以通过电流的变化来获取相应的温湿度数据,并将最终结果以数字信号的形式输出至树莓派平台进一步处理。该模块配置方案如表3所示。

表3 DHT22传感器配置方案

2.5 甲醛检测(HCHO)模块

对于室内空间中因装修而产生的甲醛成分的检测,本系统使用Plantower DS传感器来完成,其原理是基于电化学方法将包含有甲醛成分的空气与电解质反应所产生的电流作为传感器的输出信号。Plantower DS作为最新型的数字输出式HCHO传感器,其精度与稳定性均达到了很高的水平,能够可靠地为系统提供空气中的实时甲醛含量数据。该模块的配置方案如表4所示。

表4 Plantower DS传感器配置方案

2.6 数据上传模块

系统在获取到各个传感器输出的检测数据并进行处理后,使用SIM800C模块将数据上传至云服务器完成存储,SIM800C是专用于树莓派平台的无线通信模块,支持短信、GPRS、HTTP等多种数据传输模式,系统通过MICRO SIM卡接入GPRS网络后将数据上传至云服务器上的WebService接口后,由服务器端程序完成向数据库的存储。SIM800C模块的配置方案如表5所示。

表5 SIM800C传感器配置方案

3 软件设计

系统运行过程中,树莓派主板上搭载的ARM处理器按固定间隔时间(5s)获取各个传感器模块所采集到的空气质量数据信息,然后将信息合并后再通过GPRS通信模块向云服务端上传数据。软件运行流程如图2所示。

图2 软件运行流程图

在集成了Debian Liunx环境的树莓派平台上,主流的编程开发语言是Python[4],因此本系统中各传感器数据采与上传集功能用Python编写的脚本程序实现,主程序通过定期调用该脚本实现对空气质量的循环检测。由于传感器引脚发送到树莓派主板的是一组由高低电平组成的脉冲信号,因此在编程处理时,首先需要根据传感器使用说明中阐述的信号位数来创建相应长度的数组,然后采用while循环语句检测其输出电平的变化(由低电平变为高电平后,再转变为低电平即为一个完整信号),并在数组中存储各信号的持续时间。然后根据持续时间的长度对数组中的数据转换为二进制的0或1,最后将二进制信号进行处理后以十进制数值并进行相应的处理后返回给主程序。数据处理步骤如图3所示。

图3 传感器数据处理步骤

在数据处理的环节上,需要根据各个传感器所发送的数据长度与格式进行有针对性的处理,下面对温湿度数据、甲醛数据采集模块以及数据上传模块的关键实现代码进行说明。

3.1 温湿度数据采集模块的关键实现代码

由于DHT22温湿度传感器的输出信号为40位数据,其中包含了两种数据(16位湿度数据与16位温度数据,其余8位为校验位),因此需要分别进行两次十进制的数值转换。最后根据每组最高位所记录的正负标识对数值进行最后处理。

#GPIO.setmode(GPIO.BOARD) //声明GPIO引脚编号模式为BOARD

import RPi.GPIO as GPIO //导入GPIO支持模块

import sys //导入系统支持模块

import time //导入时间对象支持模块

def handt() //温湿度数据采集函数

ht=15 //温湿度传感器数据输出引脚编号

htdata=[0,0,…,0]//创建长度为40的数组并将全部元素初始化为0,用于存储数据

GPIO.output(ht,1)//向传感器输出高电平

GPIO.setup(ht,GPIO.IN)//设置引脚为数据输入模式

n=0

while n<41://Python中循环语句块以相同缩进为标识

tm=time.time()*1000000//用于记录传感器所发送信号的时序

n+=1

while not GPIO.input(ht)://检测到高电平信号则停止循环,即等待高电平开始

pass

while GPIO.input(ht)://检测到低电平信号则停止循环,即等待高电平结束,一个完整信号结束

pass

htdata[n]=time.time()*1000000-tm//将信号数据存储至数组中

GPIO.setup(ht,GPIO.OUT) //数据获取完毕,将引脚重新复位

GPIO.output(ht,1)

for m in range(len(htdata))://将数据转换为 0、1

if htdata[m]>100: //数组中存储的是信号持续时间值,大于100则转换为1

htdata[m]=1

else:

htdata[m]=0

h-data=0//湿度值获取开始

j=24

while j<40://将数组25-39元素中存储的湿度值转换为10进制,最高位为正负标识

j+=1

h-data+=htdata[j]*pow(2,j-25)//第n位数据中的2进制值,乘以2的n-1次方,用于完成十进制的转换

if htdata[40]==1:

h-data=-1*h-data//最高位为1时,数据为负值

h-data=h-data/10//DHT22输出的数字比实际值高10倍,因此需要除以10

t-data=0//温度值获取开始

k=8

while k<24://将数组9-23元素中存储的湿度值转换为10进制,最高位为正负标识

k+=1

t-data+=htdata[k] *pow(2,k-9)//十进制转换

if htdata[24]==1:

t-data=-1*t-data//最高位为1时,数据为负值

t-data=t-data/10//除以10,获取最终数据

htstr=h-data+”/”+t-data

return htstr//返回温湿度数据

3.2 甲醛数据采集模块的关键实现代码

Plantower DS甲醛传感器的输出信号为80位数据,其中49-64位为气体检测数据。41-48位为被测气体当量。因此需要在完成十进制数值转换后,将监测数值除以气体当量数值以获取最终的实际数据。

def hcho ()//甲醛含量数据采集函数

nt=10 //甲醛传感器数据输出引脚编号

ntdata=[0,0,…,0]//创建长度为80的数组并将全部元素初始化为0,用于存储数据

GPIO.output(nt,1)//向传感器输出高电平

GPIO.setup(nt,GPIO.IN)//设置引脚为数据输入模式

n=0

while n<81://读入传感器数据

tm=time.time()*1000000

n+=1

while not GPIO.input(nt):

pass

while GPIO.input(nt):

pass

htdata[n]=time.time()*1000000-tm//将信号数据存储至数组中

GPIO.setup(nt,GPIO.OUT) //数据获取完毕,将引脚重新复位

GPIO.output(nt,1)

for m in range(len(ntdata)): //将数据转换为 0、1

if ntdata[m]>100:

ntdata[m]=1

else:

ntdata[m]=0

n-data=0//HCHO数值获取开始

j=48

while j<65://将数组49-64元素中存储的湿度值转换为10进制

j+=1

n-data+=ntdata[j]*pow(2,j-49)

v-data=0//气体当量数值获取开始

j=40

while j<49://将数组41-48元素中存储的气体当量值转换为10进制

j+=1

v-data+=ntdata[j]*pow(2,j-41)

hcstr=n-data/v-data//气体数值除以气体当量数值,获得最终数据

return hcstr

3.3 数据上传模块的关键实现代码

主程序在完成数据采集后,通过调用GPRS模块上传数据至云服务器。

#!/usr/bin/env python

import serial

import time

import datetime

while True:

time.sleep(5)//设置间隔时间为5s

try

mp=mp25()//获取mp2.5数据

co=co2()//获取二氧化碳数据

ht=handt()//获取温湿度数据

hc=hcho()//获取甲醛数据

gprs(“mp25=”+mp+”&co2=”+co+”&h-t=”+ht+”&hcco=”+hc)//调用数据上传函数

except continue

GPRS模块控制函数中包含了与服务器的连接、合法性验证、时间获取与格式化、信息合并以及数据提交等功能,这些功能主要通过向SIM800C发送模块中预置的命令来实现,关键代码如下:

def gprs(str1) //数据上传功能函数

ServerTok=”st=pi2017S00106”//向服务器提交数据时的认证口令,用于设备身份合法性验证

ClientId=”cid=cpr001”//设备唯一编号

sn=6//模块输入命令引脚编号

nowtime=datetime.datetime.now()

times=nowtime.strftime("%Y-%m-%d %H:%M:%S")//获得当前时间

datastr=”tm=”+times+”&”+str1+”&”+ServerTok+”&”+ClientId//组成向服务器提交的数据字符串

GPIO.pinMode(sn,OUTPUT)//设置GPIO6针脚模式为输出

GPIO.digitalWrite(sn,” AT+CGATT=1”)//向模块发送指令,使模块基于GPRS网络模式

GPIO.digitalWrite(sn,” AT+CIICR=1”)//向模块发送指令,激活移动场景,建立无线链路

GPIO.digitalWrite(sn, “AT+CIPSTART=’TCP’,’202.96.152.36’,’23158’”)//设置要连接的远端服务器类型,IP地址,端口号。

GPIO. digitalWrite (sn, “AT+DATA=”& datastr)//将待发送数据发送至模块

GPIO.digitalWrite(sn, “AT+CIPSEND=0”)//启动发送操作

retun

4 结语

本文所设计的空气质量检测系统基于树莓派3平台构建,使用多种传感器实现了对室内空气质量的多方位动态数据采集,并通过GPRS通信模块完成了数据的实时上传与存储。检测设备体积小巧,便于安装,并且采用无线数据传输模式,非常适合在结构复杂的大型室内空间中多点部署。所获取的检测数据具备良好的完整性、实时性与准确性,在大型室内空间的空气污染控制与治理工作中具备良好的实用价值。

猜你喜欢

数组树莓温湿度
JAVA稀疏矩阵算法
基于AT89C51的数字型蚕用温湿度计的设计
JAVA玩转数学之二维数组排序
基于树莓派的骑行智能头盔设计
基于温湿度控制的天气预测装置
基于DSP和μcos的温湿度检测系统的设计
基于树莓派的远程家居控制系统的设计
更高效用好 Excel的数组公式
PLC在计算机空调机房温湿度控制中的应用
欧盟:冷冻树莓进口增加45%