APP下载

面向局部定点区域的微型气象监测系统设计与试验研究

2021-12-02傅桂霞姜殿波宿宝臣

科学技术与工程 2021年33期
关键词:服务端树莓线程

傅桂霞,万 隆,宋 恺,姜殿波,宿宝臣

(1.山东理工大学电气与电子工程学院,淄博 255049;2.南京邮电大学物联网学院,南京 210023)

气象数据作为人类日常生活的重要因素,与人类生产和生活的相关性越来越密切[1-2]。目前,气象数据获取的主渠道是气象预报网或媒体周期性发布的监测信息,但国家气象监测站点建设成本高、覆盖范围有限、数据采集灵活性差,且监测和预报具有区域性和滞后性。因此,作为大型气象监测站点的有效补充,局部定点区域的智能化、小型化气象监测系统研究越来越受到关注[3],成为气象数据精细化监测和预报研究领域的热点。

近年来,传感器技术、信息处理技术和云计算的发展为局部定点区域的实时气象监测系统开发提供了新思路。文献[4]基于51单片机设计了一种小型综合气象系统,用于温湿度、气压和风速检测。文献[5]设计了一套适用于多类监测站点的海洋信息自动监测数据采集系统,能兼容连接水文、气象、浪流等检测仪表,实现多类数据信息的集中存储管理及系统状态监控。文献[6]基于ZigBee技术设计了一种无线组网的微型气象站,实现温湿度、降雨、风力、风向等环境参数监测。文献[7]提出基于LoRa的远程温室大棚环境监测系统设计方案,可用于多个农业大棚环境监测数据的智能化和集约化管理。文献[8]设计了基于云平台的智慧农业大棚监控系统,实现大棚气象参数和土壤状态的检测与控制。文献[9]设计了针对架空输电线路的环境气象监测装置,为电力生产运行管理和调度提供气象信息支持。文献[10]针对空气质量监测网络精细化水平较低的问题,设计了开放式空气质量监测系统,并提出基于距离权重因子的空气质量信息融合算法,实现空气质量参数预报。

综上分析,小型化智能气象监测系统在海洋气象监测、智慧农业、智慧电网等领域应用广泛,但其功能相对单一,且不具备气象大数据的综合管理和图形化显示功能。因此,针对现有小型气象监测系统的不足,现提出一种基于树莓派的微型气象监测系统设计方案。该系统由前端气象信息采集系统和后端数据管理系统组成。前端采集系统是基于树莓派搭建的平台,主要实现温度、湿度、气压、海拔、风速、风向、紫外线、降雨等多个参数的实时监测和无线传输。后端管理系统是基于Qt框架开发的运行于PC机上的图形化界面显示系统,主要实现气象数据收集、存储、管理和图形化显示。该系统将气象数据采用图形化方式显示,提高气象数据的可读性和系统美观度。另外,设计气象大数据的存储和管理模块,为数据共享、联合分析和未来气象数据的预测提供基础数据源。

1 系统整体架构设计

微型气象监测系统设计包括前端采集系统和后端管理系统。前端采集系统是以树莓派为核心的微型气象站数据采集端,主要涉及前端硬件采集装置设计,以及与硬件匹配的软件功能开发,实现气象数据的采集、处理、打包发送和简要显示。后端管理系统是实现气象数据接收、存储、管理和图形化显示的服务端。系统总体框架如图1所示。

图1 微型气象监测系统总体框架Fig.1 The general framework of micro meteorological monitoring system

2 前端采集系统设计

前端数据采集系统选择树莓派Raspberry Pi 4B作为主控芯片,其他硬件包括气象参数检测传感器、辅助芯片、供电电路和外壳辅助材料等,系统硬件电路关系如图2所示。前端采集系统的软件设计是基于Raspbian Linux操作系统,采用C语言开发的各功能程序。

图2 前端采集系统硬件结构关系图Fig.2 Hardware structure diagram of front-end acquisition system

树莓派Raspberry Pi 4B的规格信息如表1所示。其他检测传感器模块包括DHT11温湿度传感器、BMP180气压传感器、模拟量风速传感器、自制风向传感器、GY-ML8511紫外线传感器、自制降雨传感器模块,以及PCF8591模数转换器(analog-digital converter,ADC),前端简易数据显示采用SSD1306-I2C 有机发光二极管(organic light-emitting diode,OLED)显示屏。Raspberry Pi 4B可通过I2C数字总线与各类数字传感器进行通信;对于模拟传感器的检测数据,则需要通过ADC转换后传输至树莓派。树莓派接收气象数据后,经过进一步处理和打包,通过Wi-Fi网络,采用用户数据报协议(user datagram protocol,UDP)将数据实时发送至服务端。

表1 Raspberry Pi 4B规格信息Table 1 Specifications for the Raspberry Pi 4B

2.1 功能电路设计

(1)插线板设计。由于各传感器工作时需共用Raspberry Pi 4B某些接口,如3.3 V接口、电线接地端(ground,GND)接口、I2C通信的串行数据线(serial data line,SDA)和串行时钟线(serial clock line,SCL)接口等,仅用树莓派自带接口难以满足共用需求。因此,在硬件设计过程中,焊接制作了一个包含多排排针的插线板,其中每排排针与树莓派常用接口连接在一起。该设计不仅达到扩展共用接口的目的,也使系统后续维护和改进更加便捷。

(2)DHT11温湿度传感器电路设计。DHT11是一款数字式温湿度复合传感器,可同时实现温度和湿度检测。其测量精度如下:相对湿度±5%,温度±2 ℃;量程范围:相对湿度5%~95%,温度-20~60 ℃,满足气象站设计需求。DHT11模块包含3个端口,供电电压(volt current condenser,VCC)、GND端口分别与插线板3.3 V和GND接口连接,串行半双工数字通信接口SIG输出已校准数字信号,连接至树莓派的GPIO-0端口。

(3)BMP180气压传感器电路设计。BMP180是一款多功能、超小体积高精度数字气压传感器,可同时实现气压、海拔、温度检测,该模块功耗低,转换速度快,可通过I2C接口与树莓派主控单元实现集成。BMP180输出气压(海拔高度)的测量分辨率为0.03 hPa(0.25 m),在低功耗模式下的分辨率为0.06 hPa(0.5 m)。BMP180气压检测电路原理如图3所示,其中时钟接口SCL、数据接口SDA通过I2C总线与树莓派连接,BMP180的I2C地址在芯片内部固化为0x77(十六进制),无法通过外接电路改变。该模块可通过外接3.3 V电源直接供电;也可外接5 V电源,采用模块自带稳压电路产生3.3 V的稳压直流电源,供BMP180工作。采用了直接接入3.3 V电源的统一供电方式。

图3 BMP180大气压检测传感器模块原理图Fig.3 Schematic diagram of BMP180 air pressure detection sensor module

(4)PCF8591模数转换器电路设计。PCF8591是8位CMOS模数/数模转换器,具有4个模拟量输入接口、一个模拟量输出接口和一组串行I2C总线接口,电路原理如图4所示。本设计使用了模数转换器的4个模拟输入接口AIN0~AIN3,分别连接风速传感器、风向传感器、紫外线辐射传感器和降雨传感器的模拟输出端;3个地址引脚A0、A1和A2用于对I2C硬件地址进行编程,在本模块电路板上已全部接地,使其I2C地址为0x48;模数转换参考电压VREF为3.3 V。供电接口VCC、GND和I2C总线接口SCL、SDA可接入插线板相应位置,与树莓派相连。

图4 PCF8591模数转换器模块原理图Fig.4 Schematic diagram of PCF8591 analog-to-digital converter module

(5)风速传感器电路设计。采用小型直流有刷电机与三杯式旋转风杯自制了一款风速传感器。当环境有水平流动风时,旋转风杯产生旋转,带动小型电机产生输出电压,该电压与旋转速度成正比。利用此信号电压,可实现对环境风速的测量。风速传感器的启动风速:<0.7 m/s;测量范围:0~56 m/s,对应0~16级风,对应输出信号电压为0~2 V,在ADC的测量范围0~3.3 V。风速传感器的正极连接ADC模块模拟输入接口AIN1、负极连接插线板GND接口。

(6)风向传感器电路设计。使用的风向传感器由旋转电位器与自制风向标组合而成。旋转电位器可测量旋转角的范围为0°~333°,对应电压输出范围为0~3.3 V。自制风向标与旋转电位器相连,风向标旋转带动电位器转动,输出相应的电压值,实现对水平流动风的风向指示。电路连接关系:电位器的电压输出端Vout接入ADC模块的模拟输入接口AIN2,供电接口GND、VCC连接插线板GND和3.3V。

(7)ML8511紫外线传感器电路设计。ML8511是一种适用于室内和室外的紫外线密度检测传感器。ML8511的内部放大器可根据紫外线强度将光电流转换为电压。ML8511的接口OUT输出模拟电压值,该接口与ADC模块的模拟输入接口AIN3连接,供电接口接入插线板3.3 V和GND接口。另外,ML8511具有高电平使能端口EN,该端口与树莓派GPIO-2端口相连,用于控制模块使能与失能。

(8)降雨传感器电路设计。自制的降雨传感器由雨滴检测板和电压比较模块组合而成,电路原理如图5所示。该模块的P2端子连接雨滴检测板。电压比较器模块中LM393的1IN-接口连接电位器R3,通过调节R3改变1IN-接口的电压比较参考电压,实现降雨检测阈值设置。初始状态下,模拟输出接口AO(即LM393的1IN+口)是雨滴检测板的高电平一端,电压值初始为3.3 V。当有降雨时,雨滴检测板连通性增强,1IN+端口的电位从3.3 V不断下降,当下降到小于等于参考电压后,电压比较的DO接口输出低电平。数字输出接口DO与树莓派的GPIO-1端口相连,有高电平“1”和低电平“0”两个状态,用于指示是否降雨。模拟输出端口AO的电压值变化范围为0~3.3 V,与ADC模块的模拟输入接口AIN0相连,用于指示降雨参考值。

图5 降雨传感器模块原理图Fig.5 Schematic diagram of rainfall sensor module

(9)OLED显示屏电路设计。有机发光二极管(organic light-emitting diode,OLED)显示屏为0.96英寸、分辨率为128×64,驱动芯片为单芯片CMOS OLED/PLED驱动器SSD1306,通过I2C总线与树莓派通信,具有固定I2C硬件地址0x3C。本设计中,OLED用于简要显示气象信息。

(10)供电电源部分设计。前端数据采集系统使用了自制内置电源供电。供电电源的电池组由六块18650 3.7 V 1 500 mA·h充电锂电池组成,每两块电池并联为一个额定电压3.7 V(最高电压4.2 V)的小单元,3个小单元通过保护板串联在一起组成额定电压11.1 V(最高电圧12.6 V)的电池组。在保护板的电池组接口P+、P-处焊接导线,经过双刀双掷开关与DC-DC降压模块相连。降压模块实现了直流6~24 V到直流5.1~5.2 V的降压转换,输出电流最高可达3 A,满足采集系统对大电流的需求。DC-DC降压模块的输出端为USB接口,通过USB数据线连接树莓派,为树莓派提供稳定供电。

2.2 前端采集系统软件设计

前端采集系统的软件开发环境是Code::Blocks 17.12 Linux版,编程语言为C语言,编译器为gcc,并集成了第三方开源库。程序设计采用多线程技术,按照功能模块分为DHT11采集数据、BMP180采集数据、ADC模块采集数据、OLED显示、UDP网络传输数据共5个线程,程序整体架构如图6所示。

图6 前端采集系统软件整体架构Fig.6 Software architecture of front-end acquisition system

多线程设计使不同线程在宏观上并行运行,避免了线程间互相等待和干扰。通过设定不同延时,使各线程可同时处理自身与外部传感器的通信,提升了CPU的使用效率。在主函数中,首先调用树莓派初始化函数,实现GPIO初始化驱动,然后逐个创建并启动所有线程。最后运行阻塞函数使主函数进入阻塞状态,等待各线程运行。所有线程均处于循环运行状态,可实现微型气象站前端系统的数据采集、处理、传输任务的不间断执行。

为便于前端数据采集、数据包传输及服务端数据管理程序设计,定义了统一的数据结构存储气象信息,该数据结构的定义如表2所示。

表2 气象信息数据存储结构Table 2 Weather information data storage structure

(1)湿度数据采集线程设计。湿度数据采集是基于DHT11获取湿度数据的一个单独线程。DHT11传感器既能获取温度,也能获取湿度数据,但BMP180气压传感器附带采集温度功能,且效率更高,所以本设计中的温度采集通过BMP180实现,DHT11仅用于获取湿度数据。DHT11传输数据的格式如表3所示。一个完整数据传输包含40个bit位,前32个bit分别对应湿度和温度数据,最后8个bit是校验位,该校验和等于前4个8 bit数据相加所得结果的末8位。

表3 DHT11传输数据的格式Table 3 The format of the data transmitted by DHT11

在DHT11驱动函数中实现获取湿度数据,此线程中,数据采集每延时2 s执行一次,为DHT11做好下次采集数据和通信留出充分的恢复时间,避免产生较多无效数据。

(2)气压、海拔、温度数据采集线程设计。BMP180气压传感器使用开源库“BMP180”和“smbus”实现驱动。该线程中,首先调用BMP180的校准函数进行初始化校准操作,然后进入循环,循环体中分别调用BMP180驱动库中采集气压、海拔高度和温度数据的函数获取相应数据。由于温度、气压、海拔高度等数据随时间流逝变化不大,因此,两次数据采集可适当延时,程序中循环体设定每延时500 ms运行一次。

(3)风速、风向、紫外线和降雨采集线程设计。风速、风向、紫外线和降雨数据获取需要用到ADC,因此ADC的相关配置与获取风速、风向、紫外线和降雨数据的功能实现被设置在同一线程中。模数转换器PCF8591的I2C硬件地址为0x48,ADC基地址为120,即ADC的模拟输入口AIN0~3对应地址为120~123。线程执行过程中,首先设定ADC芯片的I2C硬件地址和基地址,然后运行传感器所需的初始化配置,延时18 ms以等待ADC完成初始化,之后进入循环体。每次循环时,获取风速、风向、紫外线和降雨数据的各功能程序顺序执行,两次数据采集延时间隔设置为0.2 s。

(4)OLED显示线程设计。OLED驱动使用“Linux_IIC_OLED_SSD1306”开源库以及相应字码头文件。在线程开始,调用OLED初始化函数实现初始化,进入无限循环体后实现屏幕上信息的循环显示。信息显示采用分屏模式,第一屏显示汉字“微型气象站”,以及“温度”“相对湿度”和“海拔高度”等中文提示以及相应数据;第二屏显示“气压”“风速”“风向角”和“UVI”的中英文提示以及相应数据。因屏幕尺寸限制,紫外线强度、降雨等气象数据未通过OLED显示。

(5)数据传输线程设计。使用UDP协议与服务端程序进行通信,实现气象数据传输。网络传输模块使用了Linux系统自带的“sys/socket.h”“netinet/in.h”和“arpa/inet.h”库。该模块为单独线程,保证了网络通信和数据传输的功能独立运行。在线程中,本程序首先作为UDP server(服务端)获取后端软件“Qt服务端”的地址信息;然后,在接收到Qt服务端发来的命令信息,并获得地址信息后,本程序作为UDP client(客户端)向Qt服务端发送气象数据。UDP发送数据的无限循环每延迟0.2 s执行一次,Qt服务端可不断地接收到前端采集数据。

3 服务端系统设计

后端服务端软件主要实现气象数据接收、数据库存储和图形化显示等功能,整体架构如图7所示。

图7 服务端系统整体功能架构Fig.7 The overall functional architecture of the server system

服务端软件开发基于Qt 5.13.1框架,编译器采用MinGW 7.3.0 32-bit for C++。系统设计中使用了多个Qt自带类库,如QGroupBox、QUdpSocket、QSqlDatabase、QMessageBox等,用于实现界面、自带窗体控件、网络通信、数据库、对话框等功能。

服务端软件主界面设计中,自定义了3个窗体类如下。

(1)myMainWindow类。主页面窗体,即图形化显示窗体,使用各种图表控件图形化显示接收到的气象数据,使用按钮调起其他窗体。

(2)dbManage类。数据库管理窗体,用于管理气象数据库,包括增加、删除、查询等。

(3)chartWidget类。走势图窗体,用于显示各个气象数据随时间变化的走势图。另外,结合第三方开源控件软件开发工具包(SDK)实现了温度计、风速刻度盘、风向仪、进度控件等气象数据图形化显示功能开发;使用QCustomPlot开源类库实现各种气象数据曲线图绘制,大大提升了系统软件的开发效率和美观度。

4 系统性能测试

4.1 前端软硬件的运行测试

前端采集系统运行测试。开启前端设备电源,等待设备开机并进入系统,约15 s后系统前端程序正常启动运行,OLED屏上将实时显示气象监测数据。与此同时,可在Linux系统终端输出调试信息。调试信息中包含各传感器和功能模块的输出气象参数。经试验测试,自制的电源供电稳定,正常工作输出电流保持在700 mA左右,表明树莓派及传感器整体功耗较低,供电功率充足。另外,风速、风向和降雨等多个自制采集模块工作性能良好,实现了气象数据的可靠采集。

4.2 服务端软件的运行测试

服务端软件运行测试。运行服务端程序,进入主窗体;然后点击“设定树莓派地址”按钮,输入前端树莓派端的地址并确定后,建立前后端通信。前端采集系统不断地向服务端发送数据,主窗体界面会实时显示最新的数据,如图8所示。当前端采集数据发生变化时,后端软件主窗体的图表显示也将实时更新。

图8 服务端软件运行测试Fig.8 Testing of the server software

数据库管理功能实现了对前端采集气象数据的收集、存储和管理,如图9所示。在数据库管理窗体中使用了“模型-视图”(model-view)结构,模型(model)负责与数据源通信,并为其他部件提供接口;视图(view)负责从模型中获取数据,作为一个控件显示出来。

走势图功能用于实时气象数据的可视化展示,如图10所示。走势图窗体由“温湿度”“气压与海拔高度”“风速风向”“紫外线”和“降雨”5个选项卡组成,该窗体可实时获取数据库中的最新数据,通过绘制曲线图的方式显示气象数据随着时间的变化趋势。

4.3 系统性能验证实验

为了验证系统性能的可靠性,进行了多次试验。首先,实测并记录了淄博市城区某一局部定点区域24 h的气象参数,与天气预报网公布的24 h气象数据进行比较。试验发现,微型气象监测系统实测的温湿度、气压、风向和降雨信息与天气预报网公布数据相近,误差可忽略不计,证明所设计的微型气象监测系统的性能是可靠的。但是,紫外线强度和风速信息与天气预报网公布数据相差较大,特别是风速误差最大时超过10%。分析发现,产生测量误差的主要因素是受到局部定点区域位置和周围环境的影响。这表明,天气预报网发布的气象数据是某个地区较大范围内的平均数据,存在一定的滞后性,而所设计的微型气象监测系统能实时准确地测量局部定点的气象信息,弥补前者的不足。

5 结论

设计实现了一套微型气象监测系统的开发与测试。前端采集系统由树莓派和各类传感器组成,后端服务端是基于Qt开发的图形显示界面软件。该微型气象站前端采集系统工作稳定,气象数据采集、处理、显示和传输实时性高、可靠性强;服务端软件实现了大规模气象数据的接收、存储、管理和可视化显示。该系统弥补了大型气象站成本高、监测覆盖范围小和信息发布滞后等不足,为优化和科学调控人们的生产生活提供了参考依据。在后续研究中,将在简易系统基础上,进一步增强系统可靠性和实用性,并与物联网云平台结合,实现多个微型气象站的联合数据采集、管理和共享,为智慧化生产提供更加完善的气象数据支持。

猜你喜欢

服务端树莓线程
山间“小精灵”
——树莓
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
基于树莓派的骑行智能头盔设计
新时期《移动Web服务端开发》课程教学改革的研究
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
黄金水果红树莓
年度睡姿大盘点(下)
计算机中的多线程问题