如何使用 Raspberry Pi 测量颗粒物

使用这两个简单的硬件设备和几行代码构建一个空气质量传感器。
366 位读者喜欢这篇文章。
Bubble hands

Opensource.com

我们定期测量东南亚学校的空气中的颗粒物。这里的数值非常高,尤其是在 2 月到 5 月之间,那时天气非常干燥炎热,并且许多田地都在燃烧。这些因素对空气质量产生负面影响。在本文中,我将向您展示如何使用 Raspberry Pi 测量颗粒物。

什么是颗粒物?

颗粒物是空气中细小的灰尘或非常小的颗粒。颗粒物分为 PM10 和 PM2.5:PM10 指的是小于 10µm 的颗粒;PM2.5 指的是小于 2.5µm 的颗粒。颗粒越小——即任何小于 2.5µm 的颗粒——对健康越危险,因为它们可以渗透到肺泡并影响呼吸系统。

世界卫生组织建议限制颗粒物到以下数值

  • 年平均 PM10 20 微克/立方米
  • 年平均 PM2.5 10 微克/立方米 每年
  • 日平均 PM10 50 微克/立方米,不允许超标日。
  • 日平均 PM2.5 25 微克/立方米,不允许超标日。

这些数值低于大多数国家设定的限值。在欧盟,PM10 的年平均值允许为 40 微克/立方米。

什么是空气质量指数 (AQI)?

空气质量指数表明空气基于其颗粒物测量结果的“好”或“坏”程度。不幸的是,AQI 没有统一的标准,因为并非所有国家都以相同的方式计算它。《维基百科》关于空气质量指数的文章提供了一个有用的概述。在我们的学校,我们以美国环境保护署制定的分类为指导。

Air quality index

空气质量指数

我们需要什么来测量颗粒物?

测量颗粒物只需要两样东西

  • Raspberry Pi(所有型号均可;最好是带有 WiFi 的型号)
  • 颗粒物传感器 SDS011

Particulate sensor

颗粒物传感器

如果您使用的是 Raspberry Pi Zero W,您还需要一个适配器电缆连接到标准 USB 端口,因为 Zero 只有 Micro USB。这些适配器电缆的价格约为 20 美元。传感器附带一个用于串行接口的 USB 适配器。

安装

对于我们的 Raspberry Pi,我们下载相应的 Raspbian Lite 镜像并将其写入 Micro SD 卡。(我不会详细介绍设置 WLAN 连接;网上有很多教程)。

如果您希望在启动后启用 SSH,您需要在启动分区中创建一个名为 ssh 的空文件。Raspberry Pi 的 IP 可以最好地通过您自己的路由器/DHCP 服务器获得。然后您可以通过 SSH 登录(默认密码是 raspberry

$ ssh pi@192.168.1.5

首先我们需要在 Pi 上安装一些软件包

$ sudo apt install git-core python-serial python-enum lighttpd

在我们可以开始之前,我们需要知道 USB 适配器连接到哪个串口。dmesg 可以帮助我们

$ dmesg 
[ 5.559802] usbcore: registered new interface driver usbserial 
[ 5.559930] usbcore: registered new interface driver usbserial_generic 
[ 5.560049] usbserial: USB Serial support registered for generic 
[ 5.569938] usbcore: registered new interface driver ch341 
[ 5.570079] usbserial: USB Serial support registered for ch341-uart 
[ 5.570217] ch341 1–1.4:1.0: ch341-uart converter detected 
[ 5.575686] usb 1–1.4: ch341-uart converter now attached to ttyUSB0

在最后一行,您可以看到我们的接口:ttyUSB0。我们现在需要一个小型的 Python 脚本来读取数据并将其保存在 JSON 文件中,然后我们将创建一个小型 HTML 页面来读取和显示数据。

在 Raspberry Pi 上读取数据

我们首先创建一个传感器实例,然后每 5 分钟读取一次传感器,持续 30 秒。这些值当然可以调整。在测量间隔之间,我们将传感器置于睡眠模式,以延长其寿命(根据制造商的说法,寿命总计约为 8000 小时)。

我们可以使用此命令下载脚本

$ wget -O /home/pi/aqi.py https://raw.githubusercontent.com/zefanja/aqi/master/python/aqi.py

为了使脚本无错误运行,还需要做两件小事

$ sudo chown pi:pi /var/www/html/ 
$ echo [] > /var/www/html/aqi.json

现在您可以启动脚本了

$ chmod +x aqi.py
$ ./aqi.py
PM2.5:55.3, PM10:47.5
PM2.5:55.5, PM10:47.7
PM2.5:55.7, PM10:47.8
PM2.5:53.9, PM10:47.6
PM2.5:53.6, PM10:47.4
PM2.5:54.2, PM10:47.3
…

自动运行脚本

为了不必每次都手动启动脚本,我们可以让它在 cronjob 中启动,例如,在每次 Raspberry Pi 重启时启动。为此,打开 crontab 文件

$ crontab -e

并在末尾添加以下行

@reboot cd /home/pi/ && ./aqi.py

现在我们的脚本将在每次重启时自动启动。

用于显示测量值和 AQI 的 HTML 页面

我们已经安装了一个轻量级 Web 服务器 lighttpd。因此,我们需要将我们的 HTML、JavaScript 和 CSS 文件保存在目录 /var/www/html/ 中,以便我们可以从另一台计算机或智能手机访问数据。使用接下来的三个命令,我们只需下载相应的文件

$ wget -O /var/www/html/index.html https://raw.githubusercontent.com/zefanja/aqi/master/html/index.html
$ wget -O /var/www/html/aqi.js https://raw.githubusercontent.com/zefanja/aqi/master/html/aqi.js
$ wget -O /var/www/html/style.css https://raw.githubusercontent.com/zefanja/aqi/master/html/style.css

主要工作是在 JavaScript 文件中完成的,该文件打开我们的 JSON 文件,获取最后一个值,并基于该值计算 AQI。然后,背景颜色根据 EPA 的等级进行调整。

现在您只需在浏览器中打开 Raspberry Pi 的地址,即可查看当前的颗粒物值,例如,http://192.168.1.5:

AQI

该页面非常简单,可以扩展,例如,添加一个图表来显示过去几个小时的历史记录等等。欢迎提交 Pull Request。

完整的源代码可在 Github 上获得

[参加我们的Raspberry Pi 周赠品活动,有机会获得这款街机游戏套件。]

总结

用相对较少的钱,我们可以使用 Raspberry Pi 测量颗粒物。有很多可能的应用,从永久性户外安装到移动测量设备。在我们的学校,我们两者都使用:有一个传感器日夜测量室外值,还有一个移动传感器检查我们教室中空调过滤器的有效性。

Luftdaten.info 提供了构建类似传感器的指南。该软件已交付即可使用,并且测量设备更加紧凑,因为它不使用 Raspberry Pi。很棒的项目!

创建一个颗粒物传感器是一个非常适合在计算机科学课程或研讨会中与学生一起完成的项目。

您使用Raspberry Pi做什么?

标签
author
我是一名在东南亚国际学校的教师和 IT 系统管理员。我热爱开源软件,并在我的私人和工作生活中使用了十多年。我的热情是用开源软件解决问题!我在 https://openschoolsolutions.org 上写博客。在 Medium 或 Twitter 上关注我

6 条评论

很棒的文章!Raspberry Pi 的用途真是令人惊叹。

我认为您需要更新您的源 (sudo apt update),如果这不起作用,请下载最新的 raspian 镜像并将其写入 SD 卡。

回复 作者 Joe H (未验证)

大家好,

感谢这份非常好的指南。我在家里让它工作了,但需要澄清一下如何理解数据。“大”数字是当前状态,对吗(或者不是)?下面的小数字(那些 µg/m³)是我必须与官方 AQI 表格进行比较的实际信息吗?
来自网页可视化的当前示例
AQI (PM2.5) - 大 91;小 31.3 微克/立方米 ;;; AQI (PM10) - 大 59;小 72.7 微克/立方米。

所以当我比较它们时 - 黄色是代码,对吗?

提前感谢。

有人知道如何进一步改进以记录数据并显示历史数据吗?

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.