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

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

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

環境

  • Raspberry Pi 2 Model B
  • OS: Ubuntu 20.04 LTS
  • 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 とコマンドを実行し表示されたらセンサーが認識されています。

1
2
ls /dev/ |grep ttyAMA
ttyAMA0

ユーザにセンサへの権限を付与する

このままだと、/dev/ttyAMA0 へアクセスするためにroot権限が必要です。
それだと使い勝手が悪いので一般ユーザでもアクセスできるようにします。

1
sudo usermod -a -G dialout ${USER}

次に、 /boot/firmware/cmdline.txt を開き、 console=serial0,115200 を削除します。

1
sudo vi /boot/firmware/cmdline.txt 

以下のようにします。
(デフォルトではシリアルコンソール接続の待ち受けに使われているため、dialoutの持ち物ではないらしい。)

1
elevator=deadline net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash

最後にラズパイを再起動します。

1
sudo reboot

再起動後、 /dev/ttyAMA0 のグループがdialoutになっていればOKです。

1
ls -l /dev/ttyAMA0

結果例

1
crw-rw---- 1 root dialout 204, 64 Apr  6 00:17 /dev/ttyAMA0

スクリプトで値を取る

次はどうやってセンサから値を取得するかですが、先ほどのQiita記事にスクリプトがあるのでお借りすることにしました。
しかし、16行目なんて何をやってるかさっぱりです。補数を使ってるんだろうけど私にはこの発想できない。

1
2
3
4
MHZ14A_SCRIPT="https://gist.githubusercontent.com/watiko/b0a82cb401f288f51b39fcc75fe8ce2c/raw/9fe284932055133169450029ad7d1db4826e25ff/MHZ14A.py"
sudo wget $MHZ14A_SCRIPT -O /usr/local/bin/mhz14a
sudo chmod +x /usr/local/bin/mhz14a
mhz14a

これで mhz14a コマンドを実行すると、二酸化炭素濃度(以下ppmとする)と日時がjson形式で取得できます。便利ですね。

1
{"ppm": 2004, "dt": "2022-04-06T00:27:12.844422", "ts": 1649172432.844631}

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

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

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

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

MHZ14A.py を使う場合は --mode zero を引数として渡してあげればキャリブレーションできます。便利ですね!

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

あとがき

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

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

参考サイト

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。