新型コロナウイルスの影響で、ここ最近は自宅にこもって作業する日々が続いています。
この機会に作業環境周りを少しずつ見直したりしているんですが、その一つとして、ラズベリーパイにセンサーを付けて部屋の CO2 濃度を測定し始めました。
厚生労働省の建築物環境衛生管理基準についてのページによると、空気環境の基準としてCO2濃度は「1000 ppm以下」という値が提示されています。
実際に測ってみるとよく分かるんですが、一人で部屋にいて何時間か作業を続けているだけで、結構簡単に 1,000ppm を超えてしまうみたいです。
頭がぼんやりして効率上がらないなあ・・・と今まで感じていた時、もしかしたら部屋の空気が悪くなっていたことが影響していたのかもしれませんよね。やってみるもんです。
ラズベリーパイにCO2センサーを取り付ける
CO2センサーは MH-Z19 という型番のものを買いました。
自分が買った時は2,500円くらいでしたが、今見たらちょっと価格上がってますね…。
MH-Z19 の見た目はこんな感じです。
この MH-Z19 とラズベリーパイをジャンパーワイヤーで接続します。(なお、今回使用しているラズベリーパイは Raspberry Pi 4 Model B です。)
配線は下記の通りです。
- Vin(MH-Z19側) ー 5V power(ラズベリーパイ側の4番ピン)
- GND ー Power Ground(6番)
- RXD ー TXD(8番)
- TXD ー RXD(10番)
CO2濃度を測定する
ここからは、ラズベリーパイに SSH でログインして作業します。
下記に MH-Z19 の python パッケージが公開されているので、今回こちらをありがたく使わせていただきます。
まず、sudo pip3 install 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 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)
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)
Installing collected packages: getrpimodel, argparse, mh-z19
Successfully installed argparse-1.4.0 getrpimodel-0.1.15 mh-z19-0.4.1
パッケージがインストールできました。
さっそく CO2 濃度を取得するコマンドをたたいてみましょう。
$ sudo python3 -m mh_z19
{"co2": 410}
410
と値が取得できました!
--all
オプションを付けると、CO2濃度以外の値も取得できるようです。
$ sudo python3 -m mh_z19 --all
{"co2": 410, "temperature": 21, "TT": 61, "SS": 0, "UhUl": 0}
mh-z19 パッケージのおかげで、こんな簡単に計測できました。素晴らしいですね。
シェルスクリプトでCO2濃度を記録する
計測した CO2 濃度を記録しておけるようにしてみます。
先述のようにコマンドの実行結果は json 形式のデータで返ってくるので、jq をインストールして json をいじれるようにしておきます。
$ sudo apt-get install jq
続いて、次のようなシェルスクリプトを書きました。ファイル名は log.sh
としておきます。
#!/bin/sh
date=`date '+%Y-%m-%d %H:%M:%S'`
result=`sudo python3 -m mh_z19 | jq '.co2'`
if [ $? -gt 0 ]; then
echo "${date},0"
exit 1;
fi
echo "${date},${result}"
このスクリプトを実行すると、日時とCO2濃度がカンマ区切りで出力されます。
$ ./log.sh
2020-04-28 21:11:04,937
スクリプトが1分おきに実行されるように、cron に登録しておきます。
* * * * * cd /path/to/script; /bin/sh log.sh >>log.csv
ファイルに計測結果のデータが記録されるようになりました。
$ tail -10 log.csv
2020-04-28 21:06:01,931
2020-04-28 21:07:01,934
2020-04-28 21:08:01,933
2020-04-28 21:09:01,931
2020-04-28 21:10:01,933
2020-04-28 21:11:01,936
2020-04-28 21:12:01,944
2020-04-28 21:13:01,943
2020-04-28 21:14:01,948
2020-04-28 21:15:01,951
当記事の冒頭のツイートに添付されていたグラフも、記録したデータからグラフ化したものです。データから様々なことも分かるので眺めていて楽しいですね。
おわりに
データが残せるようになると、常に見える化しておきたくなりますね。
次は、引き続きその辺りをいじってみたいと思います!
追記
その後、CO2 の測定結果を Google スプレッドシートに送信してグラフ化する記事も書いたので、よろしければ合わせてご覧ください!