Raspberry Pi 4とMH-Z19Bで二酸化炭素濃度を計測してみた
はじめに
毎日家でリモートワークをしてて気になるのが、そう、二酸化炭素濃度です。ディスプレーや椅子、机、マイクやヘッドフォンなどのツール類とあわせて、人間が効率的に頭を働かせられる空気環境も、充実した時間を過ごすために大事な要素の一つです。
機材
Raspberry Pi 4 Model BとMH-Z19Bという、CO2センサーの中では安く入手でき、比較的情報が多くあるものを選択しました。
ゴール
- 現在の二酸化炭素濃度が、数値(ppm)で取得できる
やってみる
接続する
Raspberry Pi -> MH-Z19B
- 5V Power -> Vin
- Ground -> Gnd
- GPIO 14 (TXD) -> Vout
- GPIO 15 (RXD) -> RXD
こちらのcablingの図が分かりやすいです。
GPIO - Raspberry Pi Documentation
シリアル通信を有効にする
raspi-config から設定する
sudo raspi-config
5 Interfacing Option を選択
P6 Serial を選択
Would you like a login shell to be accessible over serial? No
を選択
Would you like the serial port hardware to be enabled? Yes
を選択
再起動して設定を有効化する
sodo reboot
ライブラリをインストールする
今回はPythonで動作させます。こちらのライブラリを使います。
pip3 install mh-z19
動作することを確認
sudo python3 -m mh_z19
おおっ、憧れの二酸化炭素濃度が取得できました?
屋外で計測してみると400-420ppmになったので、期待した値が取れてそうでした。気象庁 二酸化炭素濃度の経年変化 より
Pythonスクリプトの中で使う
MH-Z19センサーはシリアル通信を利用して読み込むため、デフォルトの設定ではroot権限が必要になるようです。
Python上で権限を変更しないで考えられる使い方は2つ。
1 一般ユーザーとして実行し、値の取得のみを subprocess として一時的に root 権限で実行する。
python3 normal_user.py
import subprocess out = subprocess.check_output([‘sudo’, ‘python3’, ‘-m’, ‘mh_z19’]) print(out)
2 Python自体をrootユーザーとして実行する。
sudo python3 root_user.py
import mh_z19 out = mh_z19.read() print(out)
さいごに
センサーの入手に1ヶ月以上かかりましたが、情報量とライブラリのおかげで、センサーが到着してから、接続/表示まではスムーズに行えました。
(グラフにしてみた)
数日間、計測してますが、マンションの締め切った六畳程度の部屋だと、1時間あれば厚生労働省が換気の目安となる基準と言っている1000ppmを超えてくるのが分かりました。パフォーマンスが落ちる前に換気できるように気付きたいものですね。