Raspberry Pi 4とMH-Z19Bで二酸化炭素濃度を計測してみた

2020.05.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

毎日家でリモートワークをしてて気になるのが、そう、二酸化炭素濃度です。ディスプレーや椅子、机、マイクやヘッドフォンなどのツール類とあわせて、人間が効率的に頭を働かせられる空気環境も、充実した時間を過ごすために大事な要素の一つです。

機材

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で動作させます。こちらのライブラリを使います。

GitHub - UedaTakeyuki/mh-z19: Read CO2 concentration from mh-z19 sensor on the Raspberry Pi & handle it. Detect Raspberry Pi model automatically and read value from appropriate serial device.

mh-z19 · PyPI

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を超えてくるのが分かりました。パフォーマンスが落ちる前に換気できるように気付きたいものですね。

参考