気象庁 二酸化炭素濃度の経年変化 によると、2018年の世界のCO2平均濃度は、前年と比べて2.3ppm増えて407.8ppm となっているそうです。
地球温暖化によってCO2濃度が増え続けていることは懸念すべきことではありますが、新型コロナウィルスが流行している今現在の目の前の心配は、「密閉」「密集」「密接」の三密のうち「密閉」のリスクを回避するためにちゃんと部屋の換気が出来ているか、ということです。
室内のCO2濃度について、
厚生労働省 建築物環境衛生管理基準 では 1,000 ppm 以下
文部科学省 学校環境衛生の基準 では 1,500 ppm 以下
を管理基準としています。
また、CHC GROUP さん がまとめて下さっているこの図も参考になりそうです。
(出典:http://group.chcsys.net/jp/chcgroup/)
基準と照らし合わせて、自分の居場所のCO2濃度がどの程度なのか、ちゃんとしたデータを持っておきたかったので、センサを用いて計測することにしました。
####用意したもの
Raspberry Pi 3 Model B
CO2センサー MH-Z19B
####OS
Debian GNU/Linux
Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l
[Raspberry Pi の設定] - [インターフェイス] で Serial Port を有効にします。
Serial Port 有効後に Raspberry Pi を再起動します。
####配線
GND, Vin, TxD, RxD それぞれに配線はんだ付けを行います。
(配線図 https://pypi.org/project/mh-z19/ より)
配線図にしたがって Raspberry Pi と CO2センサーを接続します。
####パッケージのインストール
https://pypi.org/project/mh-z19/ の情報をもとにしました。
パッケージのインストール
$ sudo pip3 install mh-z19
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting mh-z19
Downloading https://www.piwheels.org/simple/mh-z19/mh_z19-0.4.1-py3-none-any.whl
Collecting argparse (from mh-z19)
Downloading https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from mh-z19) (3.4)
Collecting getrpimodel (from mh-z19)
Downloading https://www.piwheels.org/simple/getrpimodel/getrpimodel-0.1.15-py3-none-any.whl
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from mh-z19) (2.21.0)
Installing collected packages: argparse, getrpimodel, mh-z19
Successfully installed argparse-1.4.0 getrpimodel-0.1.15 mh-z19-0.4.1
####計測値の取得テスト
モジュール mh_z19 はディクショナリ型で結果を出力しているようです。
モジュール mh_z19 は JSON で結果を出力しているようです。
(@UedaTakeyuki さんから編集リクエストをいただきました。ありがとうございます。)
$ sudo python3 -m mh_z19
{"co2": 1456}
####プログラムを作成
日時とセットで計測値を出力します。
import datetime
import mh_z19
now = datetime.datetime.now()
now = "{0:%Y-%m-%d %H:%M:%S}".format(now)
value = mh_z19.read().get("co2") # ex: {"co2": 1456}
out = now + ',' + str(value)
print(out) # コンソールに出力
出力結果
2020-04-15 19:34:01,1950
####シェルスクリプトの作成
標準出力の結果をログファイルにリダイレクトします。
do.sh
#!/bin/sh
cd /home/pi/mh-z19
sudo python3 MeasureAndOutput.py >> ./log/logfile.csv
シェルスクリプトを実行可能モードにします。
$ chmod +x do.sh
####定期実行の設定
$ crontab -e
エディターが起動するので、毎分計測してログを出力するように設定します。
# m h dom mon dow command
* * * * * mh-z19/do.sh
設定が有効となるように、cronを再起動します。
$ sudo /etc/init.d/cron restart
[ ok ] Restarting cron (via systemctl): cron.service.
数分後に確認したところ、シナリオ通りにログが出力されていました。
$ cat logfile.csv
2020-04-15 19:34:01,1950
2020-04-15 19:35:02,1957
2020-04-15 19:36:01,1965
2020-04-15 19:37:01,1976
2020-04-15 19:38:02,1983
2020-04-15 19:39:01,1996
2020-04-15 19:40:01,2032
####グラフを作ってみる
出力されたログファイルをもとに、とりあえず手動でグラフを作ってみました。
####このあとやりたいこと
・一定の濃度以上になったときにLINE Bot へアラート
・スマートスピーカーによる音声でのアラート
####参考にさせていただいたQiitaの先輩
@revsystem さん https://qiita.com/revsystem/items/76ab1e21d386c5977892
@tororu さん https://qiita.com/tororu/items/20e8625d3fb24f3e06da
@UedaTakeyuki さん https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f