Raspberry Pi 2とCO2センサ MHZ-14Aで二酸化炭素濃度を取得する

Featured image

Raspberry Pi2(以下ラズパイ)とCO2センサ MHZ-14A(以下CO2センサ)を使って、室内の二酸化炭素濃度を取得してみました。

環境

  • Raspberry Pi 2 Model B
    • Raspbian GNU/Linux 10 (buster)
  • MHZ-14A

CO2センサ MHZ-14Aとは

中国産のCO2センサーです。選んだ理由はラズパイでの動作実績が多かったから。
Amazonで3000円位で購入しました。
ちなみにラズパイと接続するには半田付け作業が必要です。(私は設備が無いので大学時代の先輩にお願いしました。)

Raspberry Pi 2とCO2センサを接続する

CO2センサの半田付け作業と、ラズパイのセットアップが完了している前提で話を進めます。
センサとの配線は Raspberry Pi 3 Model B+ で二酸化炭素濃度を測る(MH-Z14A) -AWS IoT もあるよ- - Qiita の記事が参考になりました。

ラズパイにCO2センサを接続してからラズパイを起動します。

ラズパイとCO2センサ間はUARTというシリアル通信を使うそうで、ラズパイ上ではttyAMA0と参照されるそうです。
(ここら辺は門外漢なのでさっぱりわからないですが。)

起動後 ls /dev/ |grep ttyAMA とコマンドを実行し表示されたらセンサーが認識されています。

ls /dev/ |grep ttyAMA
ttyAMA0

スクリプトで値を取る

次はどうやってセンサから値を取得するかですが、先ほどのQiita記事にスクリプトがあるのでお借りすることにしました。

しかし16行目なんて何をやってるかさっぱりです。補数を使ってるんだろうけど私にはこの発想できない。

ラズパイ上で実行すると二酸化炭素濃度(以下ppmとする)と日時がjson形式で取得できます。便利ですね。

pip install pyserial
python3 ./MHZ14A.py

キャリブレーションをする

このままだとppmの値がおかしいので、キャリブレーション(校正)します。以下の記事を参考にしました。
CO2センサ MH-Z14Aの使い方 - Qiita

室内を換気した状態で30分放置した後に以下の値をCO2センサに送れば良さそうです。

0xFF,0x01,0x87,0x00,0x00,0x00,0x00,0x00,0x78

Raspberry Pi 3 Model B+ で二酸化炭素濃度を測る(MH-Z14A) -AWS IoT もあるよ- - Qiita の記事にあるスクリプトを使う場合は --mode zero を引数として渡してあげればキャリブレーションできます。

実行後しばらくすると換気している間は400ppmで落ち着くようになりました。

Webサーバ化する

二酸化炭素濃度を取得してDBに書き込むだけなら前述のスクリプトで十分なのですが、 Homebridge経由でppmを取得するには少々使い勝手が悪いです。
そこで、スクリプトをWebサーバ化することにしました。

で、作ったものがこれです。

get-co2ppm-mhz14a

GETリクエストを投げるとppmをjsonで返してくれます。

curl -s localhost:5000
{"msg":"Get CO2 ppm","ppm":821,"time":"2020-08-16T15:18:57.519067"}

キャリブレーションしたいときは以下のGETリクエストを実行します。

curl -s localhost:5000/calibration

あとはこれをHomebridgeと連携させるのですが、長くなってしまったので別記事として書きます。

あとがき

二酸化炭素濃度を可視化するようになってから、こまめな部屋の換気を心がけるようになりました。
そのおかげかはわかりませんが、気分が悪くなることや眠気に襲われることも少なくなった気がします。
やはり換気って大事なのかもしれません。(今まで無換気状態で1週間なんてしていたので体に悪かったんだろうな。。。)

CO2センサ MHZ-14Aは半田付けは結構ハードル高いです。。。USB形式で挿せると楽なのですがどこか発売しないだろうか。
ついでにセンサ用のケースも欲しいですね。

関連記事