郑文君 罗 倩 罗 森
(1.福建省灾害天气重点实验室,福建 福州 350003;2.福建省三明市气象局,福建 三明 365000;3.河南省固始县气象局,河南 信阳 354500)
普及气象科学知识,提高全民科学素质,是实施国家创新驱动发展战略的必然要求。近年来,气象部门与学校共同努力,将气象科普工作融入校园教学,依托校园气象站和气象探测装备展馆广泛组织开展了气象观测和探测仪器装备实操教育活动,全国已建立校园气象站2000多个,全年参加气象科普100万人次。学生在校园气象站科普教育活动中动手操作观测设备,体验气象数据观测的过程。达月珍等针对校园气象站功效进行分析,指出了完善校园气象站软件和硬件,能够真正实现气象科学知识宣传平台的科普功效[1]。在现阶段,大部分校园气象站通常采用的是人工气象观测仪器(温、湿度计,自记纸等)或者由华云公司生产的自动气象站(CAWS系列),但是此类设备存在以下几方面问题:一是不易维护保养,缺少备用的零部件,仪器设备价格昂贵;二是配套要求高,需要配备电脑采集数据,要有一定面积的活动场地;三是部分仪器有一定危险性(220V交流供电、水银温度计碎裂中毒)等问题。随着微机电系统技术、传感器技术、无线通信技术的进步,物联网得到了极大的普及应用,如在科研、教育方面将物联网和气象站进行融合应用。实际应用成果中有很多基于STM 32、51单片机等技术的小型自动气象站,如黄飞龙等设计的ZigBee、WiFi和5G等物联网技术深度融合的自动气象站[2],张李元等基于NB-IoT技术设计的小型自动气象站监测系统[3],但是还没有针对物联网校园气象教育需求开发的科普产品。本文提出了一种使用Arduino平台搭建的小型物联网气象站系统,硬件方面包含了核心单片机、风向、风速、雨量、温度、湿度、气压传感器,软件方面包含了Arduino程序开发、HTML网页编写,能够解决普通气象站在气象科普教育工作中面临的困境和问题。
针对气象科普教育的需求,本系统核心单片机采用的是Arduino平台系统,包含硬件(各种型号的Arduino板)和软件(Arduino IDE),选择该单片机系统主要有以下原因:仅需具有基础的电路知识及简单的C语言即可;Arduino的开源理念让很多常用的I/O 设备都已经带有成熟稳定的库文件或者样例程序,在此基础上进行简单的修改,即可编写出比较复杂的程序,完成功能多样化的作品; Arduino 及周边产品功能齐全、质廉价优,开发成本低[4]。
本系统架构使用结构化程序设计,将其分成了链路层、核心层、应用层,如图1所示。具体功能设计如下:
图1 气象科普小型物联网气象站系统总体架构
应用层设计:采集气象要素节点实时数据,包括温度、湿度、气压、风向、风速、雨量、电池电压,与核心单片机Uno R3进行数据交互。
核心层设计:检查气象要素实时数据,对数据进行过滤、筛选,异常数据告警采集,生成统一的格式化数据。
链路层设计:Uno R3通过UART异步传输串口通道向ESP 8266发送数据,在ESP 8266和客户端之间提供了Web文档和数据的请求与传送,将格式化的实时数据呈现在Web页面上,展示当前环境的气象状况。
由于科普教育面向的主体是学生,本系统的核心单片机选择了Arduino平台的ESP 8266和Uno R3两块开发板,具体功能如下。
Uno R3开发板是基于ATmega328P的微控制器板,具有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入,16MHz晶振时钟,USB连接,电源插孔,ICSP接头和复位按钮,支持在线串行编程和复位按键[5]。本系统中需要使用到Uno R3的I2C接口,连接温、湿、气压传感器模组,4个PWM引脚连接雨量、风向、风速传感器及5号电池组,实现温度、湿度、雨量、风向、风速、气压、电池电量等数据的采集,并且根据科普教育的需要拓展连接土壤水分、日照、地面温度等气象要素传感器。
ESP 8266开发板是乐鑫推出的集成了WiFi功能并内置有32bit MCU的SoC 芯片,是一款超低功耗的UART-WiFi的透传模块,具有微型的封装尺寸和超低能耗技术,本系统将ESP 8266作为一个可以实现基本网络服务功能的服务器,将程序、网页文件及系统配置等文件存储在开发板上的25Q32 4M(32mbit)闪存芯片中,用户通过终端设备上的浏览器连接访问Arduino系统所建立的网页,实现对实时气象要素数据的访问。
温度、湿度、气压数据采集节点:采用由奥松新型数字温湿度传感器与AHT20和博世BPM280传感器组成的模块,利用I2C输出,供电电压为2.8~5V(DC),其中,AHT20模块配有一个ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件[6],具有电路简单、温测点准确、传输速度稳定快速等优点。
风向、风速数据采集节点:采用由聚碳酸酯复合材料外壳和内部高性能进口轴承组成的模拟量型传感器,具有体积小、重量轻、精度高、量程宽、抗干扰等优点。风向、风速供电电压均使用10~30V(DC),输出传统模拟量电压信号0~5V,风速传感器的量程为0~30m/s,风向传感器的量程为8个指示方向,标配两路独立的模拟量输出,同时适应三线制与四线制。
雨量采集节点:采用高品质50mm×40mm的FR-04双面复合材料的雨滴传感器模块,表面使用镀镍处理,具有对抗氧化、导电性及寿命方面更优越的性能等优点。输出模拟量电压信号0~5V。
供电模块节点:Uno R3和ESP 8266采用4节5号镍氢充电电池(6V)供电,风向、风速传感器使用4节18650电池(16V)供电,两套电池组具有体积小、重量轻、容量适中、寿命长、安全性能高等优点,本系统在实际应用中能够保证稳定运行2天以上,系统硬件接线情况如图2所示。
图2 硬件接线图
2.3.1 Uno R3单片机采集程序设计
使用Arduino开发软件环境(IDE)进行程序的编译、调试和下载等操作,导入
图3 Uno R3流程图
2.3.2 ESP 8266单片机程序设计
程序设计思路:将ESP 8266设置为服务器端,路由器设为网关,终端设备设为客户端,ESP 8266和终端设备接入同一个WiFi路由,建立二者之间的TCP通信,详细流程如图4所示。在Arduino IDE中,导入
图4 ESP 8266流程图
2.3.3 Web设计
气象站系统的Web网页设计开发使用了HTML、CSS、JavaScript三种前端语言,设计完成的网页效果如图5所示,网页的基本布局使用了HTML语言设计,页面的图片、字体、颜色、背景和其他效果属性使用CSS语言进行美化设计[7],在CSS文件中使用“@media (max-width:320px){.widget-left {width:100%;}”语句,可以实现网页代码根据不同终端设备的分辨率条件做出不同样式尺寸的调整,方便用户使用不同终端设备查看气象站系统数据;使用JavaScript语言创建new Date()对象,从ESP 8266单片机获取当前时间,并且在设计中考虑到EPS8266单片机的性能较低,在JavaScript语言中采用AJAX异步交互技术,创建XMLHttpRequest函数对象,在游览器上无需刷新整个页面就能将当前时间戳和气象数据传输到网页中,有效减少客户端和服务器之间的流量传输,提高了用户访问网页的性能和速度。
图5 气象站Web网页
为验证本系统的可应用性,在福建省三元区气象观测站中安装了本系统进行测试,测试连接距离在10m左右的外网WiFi路由器,同时使用5台不同型号手机和电脑终端进行连接读取数据,测试时间为7天,每日随机4次连接测试及读取气象实时数据,测试结果表明,在测试期间小型物联网气象站系统运行稳定,5台终端设备均能够正常连接读取数据,采集的气象数据完整、准确。在2022年气象日活动中组织学生操作小型物联网气象站系统,通过组装设备,观测气象数据,较好完成了气象知识科普,在活动结束后有80%以上使用者表达了对学习开发小型物联网气象站系统的兴趣,整体反映良好,在实际应用中验证了本系统的可靠性与实用性。
小型物联网气象站在校园科普教育活动中,可以让参与者学习物联网和气象科普知识,参与“基础知识+模块实验+项目实战”的科普教学,通过学生自己动手组装、连接设备,操作气象站,将动手与动脑、知识与实践、学习与实操结合起来,让科普活动充满知识性、科学性、趣味性,激发学生探索气象奥秘的兴趣,提高科普教学的效果,树立起科学思想和精神。