基于Flask的树莓派温湿度氧气浓度报警器

2020-06-30 10:07陈梓敏张子扬周贤中
科技创新导报 2020年8期
关键词:树莓派

陈梓敏 张子扬 周贤中

摘   要:基于实验室气体安全问题频出的情景,研发性能强大、架构轻便的报警器是一个值得研究的课题。在实验室中配置该报警器以检测环境中的温度、湿度、氧气浓度,当检测数值高于或低于安全范围时,将会由传感器发出警示信号。同时,通过轻量化Web框架Flask进行后端设计,经过树莓派进行数据处理后可以在浏览器网页端实时监控受检测指标变化,并且保存历史记录。

关键词:Flask  Python  树莓派  氧气浓度

中图分类号:TP273;U495                        文献标识码:A                       文章编号:1674-098X(2020)03(b)-0056-04

Abstract: Based on the situation of frequent gas safety problems in the laboratory, it is worth studying to develop a powerful and portable alarm. The alarm is equipped in the laboratory to detect the temperature, humidity and oxygen concentration in the environment. When the detection value is higher or lower than the safe range, the sensor will send out warning signals. At the same time, through the lightweight web framework flask for back-end design, after the raspberry pie data processing, it can real-time monitor the changes of detected indicators in the browser Web site, and save the history.

Key Words: Flask; Python; Raspberry Pi; Oxygen Concentration

在任何可能发生氧气不足的地方,都需要氧气警报。尽管大多数人都想到飞机或潜艇等封闭环境,但更常见的例子是频繁使用化学试剂和化学气体进行实验的密闭实验室环境。如果实验室中存储着的气体的钢瓶或储罐发生泄漏,氣体的快速流出会迅速降低封闭区域或室内的氧气含量,从而威胁人的生命安全。

随着实验室中的科研范围日渐扩大,实验环境的密封性要求逐渐提高,由缺氧导致的一系列安全事故频发,这一严峻问题引起了广大科研工作者的重视。为达到保障科研工作者的生命安全、创造安全的实验环境等目的,本项目意在开发一个功能强大、使用方便、能耗较低的温湿度氧气浓度报警器。

1  系统设计

本项目的硬件设计围绕树莓派3B+单片机及其外设展开。正常工作状态下,传感器持续读取外界环境中的目标数值,LED灯处于常亮状态,蜂鸣器处于低电平状态,不发出鸣叫声音。当传感器检测到相关目标数值未处于预设的标准范围之内时,蜂鸣器被置于高电平状态,开始持续鸣叫示警。

直至使用者连续按两次按钮,LED灯变至闪烁状态,蜂鸣器停止发出鸣叫警报声。此外,长按按钮可使LED灯处于熄灭状态,轻按一次则恢复正常工作状态。

1.1 硬件设计

如图1所示,硬件部分由树莓派3B+、Grove拓展板、温湿度传感器、氧气浓度传感器、蜂鸣器及LED按键组成,其中的外设统一使用Grove接口,达到便于整理、美观等效果。

其中,树莓派3B+是由英国树莓派基金会于2018年发行的单板计算机,相较此前的型号,具备更加丰富的拓展功能以及更加强大的性能,自身带有四个USB A端口、一个基于USB 2.0的千兆以太网端口、HDMI高清多媒体接口以及3.5mm音频接口,此外还有双频WiFi模块、蓝牙4.2模块。处理器基于ARM芯片,能够以1.4GHz的频率运行,以SD卡为内存硬盘,具备所有PC的基本功能。因此,其自身具备功耗低、性能强大、拓展丰富的特点,此外,其价格不足250元,价格低廉,采用其作为开发板能够节约经费。

拓展板Grove Base Hat通过GPIO拓展口连接在树莓派的IO口上,并使用铜柱固定。拓展板提供多个数字、模拟、I2C、PWM、UART端口,以满足使用者多样要求,并且端口皆为Grove接口。

DHT11是一款低成本的数字温度和湿度传感器,可产生校准的数字输出,并且具有很高的可靠性和长期稳定性。氧气浓度传感器选用了炜盛科技的ME2-O2-Φ20型电化学气体传感器,可对氧气进行定量测量,具有低功耗、高精度、高灵敏度、抗干扰能力强等优点。

以上两个传感器在使用前都需预热数分钟,否则将产生不稳定数据。

1.2 软件设计

该报警器需实现实时监控数据变化和查询历史数据的功能,并且当氧气浓度不在安全范围内时,蜂鸣器以及LED按钮开始工作,实现报警功能。为了达到降低功耗以及使用方便等目的,设计了在浏览器中查询相关数据的功能。

1.2.1 开发平台

根据需求,本项目软件设计后端部分使用了由Python编写的轻量级WEB应用框架——Flask框架[1-2],并使用HTML和JavaScript语言编写网页显示部分。Flask框架使用简单、功耗低、占用内存少,且具有很强的可拓展性,可快速搭建小型网站。在数据存储调用方面,选用了小型数据库SQLite3[3],通过创建pi_temp.db数据库文件,并在其中建立三个表分别存储温度、湿度和氧气浓度数值。使用者在浏览器中输入树莓派的IP地址以及预设的端口号,即可实时监控数据或查阅历史数据。

1.2.2 后端程序分析

如图2程序框架所示,后端设计部分主要由flask_sqlite3.py(构建flask框架)、deque_logger.py(读取并写入数据)、bbb.py(报警服务)三个Python程序构成,并由ZeroMQ[4-5]模块实现程序间的通讯。

在flask_sqlite3.py程序中,导入了flask包中的Flask、request、render_template模块构建flask框架,通过模板新建html文件并传递相关参数,分别由不同的使用条件建立live.html、no_sensor.html、history.html三个网页程序。

以上网页中,live页面直接显示温度、湿度、氧气浓度三项数据,从而达到实时监控的目的;在history页面中,通过调用time、datetime、arrow时间模块,使对应时间格式化,以便查询时调用,并通过json[5]模块格式化数据,使用plotly模块包绘制三项数据的折线变化图,当检测到数据库中相应的表中无数据更新时,在no_sensor页面中显示错误警告“Sorry, can't access the sensor!”。

deque_logger.py程序通过导入Seeed公司提供的grove.adc包中的读数方法读取传感器对应电压值,从而换算成对应的氧气浓度。另外,通过DHT公司提供的例程直接计算从DHT11温湿度传感器[6-7]得到的温度、湿度数据。

通过导入zmq模块,采用请求应答模式(Request-Reply)实现消息的双向传输,满足deque_logger.py和bbb.py程序的通讯需求。在deque_logger.py程序中,每当写入一次数据后,都将检测氧气浓度是否在安全范围内,若不在安全范围内,则发送警示消息‘bb至bbb.py程序。当bbb.py程序检测到该信息为‘bb且預设的alarm变量为真,将蜂鸣器置于高电平,蜂鸣器开始鸣叫。若alarm变量为假或接收到的信息不为‘bb,则蜂鸣器不发出鸣叫声。

在bbb.py 程序中,导入gpiozero包中的Buzzer模块控制蜂鸣器。LED按钮由Seeed公司提供的相应例程进行控制,其中的GroveLedButton类通过Button模块和Factory模块将按键的状态和LED灯的状态联系在一起,设计出三个事件,分别响应不同的动作。当单次按压按键时,LED灯亮起;当连续按压按键时,LED灯开始闪烁,蜂鸣器停止发出鸣叫声;当长按按键时,LED灯熄灭,蜂鸣器不再工作,LED按键也不再工作。

1.2.3 前端界面设计

如图3所示,live页面可实时显示当前外界环境中温度、湿度、氧气浓度的数值,为了达到简洁明了的目的,在层中键入文本,并且设定每10s刷新一次页面显示数据。通过Javascript脚本[8-9]制作名为Historic的控件,点击后可跳转至history页面。

如图4所示,history页面通过折线图中不同颜色的线条直接显示温度、湿度、氧气浓度的历史数据,通过控件可更改数据显示范围。此外,点击Live可跳转至实时显示页面。

2  实验验证

如图5所示,为了达到节省环保的目的,本项目使用生活中常用的物品来完成实验验证。首先,通过充电宝对树莓派进行供电,通电开机后程序开始运行,预热5min后,传感器开始稳定测量环境中的有关数据。将所有设备放入密闭性良好的保鲜盒,在其中放入合适用量的除氧剂用以降低氧气浓度。

如图6所示,密封一段时间后,当盒中氧气浓度低于预先设定的临界值,蜂鸣器开始报警,实现报警功能,完成验证。

3  结语

基于Flask的树莓派温湿度及氧气浓度报警器在硬件上,通过树莓派和多个grove接口传感器进行设计,实现了功能强大、接线简单、设计方便等目的。其中,温湿度传感器DHT11通过PWM接口连接树莓派,氧气浓度传感器通过Analog接口连接树莓派。

在软件设计方面,通过Python的Flask轻量级Web框架进行后端设计,降低了代码设计难度,提高了代码的简洁度和可读性,提高了完成项目的效率。

由于树莓派PWM方面的设计漏洞,导致当多个程序同时运行时,PWM时序会产生波动,从而导致温湿度传感器产生错误数据。在调试过程中,通过逐步尝试修改读数方法、更换传感器、更换接口等方法,最终决定通过collections模块中的deque.median()方法取中位数以消除错误数据,达到代码简便、经济节省的目的。

基于Flask的树莓派温湿度及氧气浓度报警器的开发可以提高实验室安全性,同时可以达到高性能、低功耗的目的,能够为实验室安全提供良好的服务。

参考文献

[1] 叶锋.Python最新Web编程框架Flask研究[J].电脑编程技巧与维护,2015(15):29-30.

[2] 牛作东,李捍东.基于Python与flask工具搭建可高效开发的实用型MVC框架[J].计算机应用与软件,2019, 36(7).

[3] Introduction to Sqlite and its usage with python[J]. 2015.

[4] 叶崧, 姚健东. 基于ZeroMQ & JSON的分布式测控系统消息通信架构设计[J].现代电子技术,2014,37(2):105-109.

[5] 方赓.基于ZeroMQ消息交换的充电站监控平台的设计与应用[J].电子世界,2019(11).

[6] 李德路,侯文宝.基于DHT11室内温/湿度监控系统设计[J].智能建筑与城市信息,2013(11):65-67.

[7] 潘继强.基于DHT11的空气温湿度监控系统的设计与实现[J].电脑知识与技术,2014(21):5105-5108.

[8] Halfacree G .JavaScript[M]// The Official BBC micro:bit?; User Guide. John Wiley & Sons, Inc. 2017.

[9] Dale, Kyran.Data Visualization With Python And Javascript[J].2016.

猜你喜欢
树莓派
智能安全防盗探测小车
基于嵌入式技术的农村医疗系统设计