Raspberry Piにセンサーを付けてCO2濃度を測定してみる

新型コロナウイルスの影響で、ここ最近は自宅にこもって作業する日々が続いています。

この機会に作業環境周りを少しずつ見直したりしているんですが、その一つとして、ラズベリーパイにセンサーを付けて部屋の 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番)
MH-Z19 とラズベリーパイ
Jstrom99 / CC BY-SA

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 スプレッドシートに送信してグラフ化した記事も書いたので、合わせてご覧ください。

参考サイト

この記事を書いた人

ko31

岩手県出身、群馬県在住のフリーランスWeb系エンジニアです。
Webシステム・アプリ、Webサービス、WordPress開発等を雑多にこなしています。バンカラ応援好きの振り飛車党。
PHP / WordPress / 高校野球 / 将棋 / WordPress / ブログ / 食べること / 二児の父親

>>もっと詳しいプロフィールはこちら

お仕事のご相談・お問い合わせ

Gosign(ゴーサイン)という屋号でフリーランスの Web エンジニアとして活動しています。
当ブログでの掲載内容はもちろん、Web サイト制作や Web アプリケーション開発などのご相談・ご質問がありましたが、お気軽にお問い合わせください!

合わせて読みたい記事