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

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
とコマンドを実行し表示されたらセンサーが認識されています。
ls /dev/ |grep ttyAMA
ttyAMA0
ユーザにセンサへの権限を付与する
このままだと、/dev/ttyAMA0 へアクセスするためにroot権限が必要です。
それだと使い勝手が悪いので一般ユーザでもアクセスできるようにします。
sudo usermod -a -G dialout ${USER}
次に、 /boot/firmware/cmdline.txt
を開き、 console=serial0,115200
を削除します。
sudo vi /boot/firmware/cmdline.txt
以下のようにします。
(デフォルトではシリアルコンソール接続の待ち受けに使われているため、dialoutの持ち物ではないらしい。)
elevator=deadline net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash
最後にラズパイを再起動します。
sudo reboot
再起動後、 /dev/ttyAMA0
のグループがdialoutになっていればOKです。
ls -l /dev/ttyAMA0
結果例
crw-rw---- 1 root dialout 204, 64 Apr 6 00:17 /dev/ttyAMA0
スクリプトで値を取る
次はどうやってセンサから値を取得するかですが、先ほどのQiita記事にスクリプトがあるのでお借りすることにしました。
しかし、16行目なんて何をやってるかさっぱりです。補数を使ってるんだろうけど私にはこの発想できない。
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形式で取得できます。便利ですね。
{"ppm": 2004, "dt": "2022-04-06T00:27:12.844422", "ts": 1649172432.844631}
キャリブレーションをする
このままだとppmの値がおかしいので、キャリブレーション(校正)します。以下の記事を参考にしました。
室内を換気した状態で30分放置した後に以下の値をCO2センサに送れば良さそうです。
0xFF,0x01,0x87,0x00,0x00,0x00,0x00,0x00,0x78
MHZ14A.py
を使う場合は --mode zero
を引数として渡してあげればキャリブレーションできます。便利ですね!
実行後しばらくすると換気している間は400ppmで落ち着くようになりました。
あとがき
二酸化炭素濃度を可視化するようになってから、こまめな部屋の換気を心がけるようになりました。
そのおかげかはわかりませんが、気分が悪くなることや眠気に襲われることも少なくなった気がします。
やはり換気って大事なのかもしれません。(今まで無換気状態で1週間なんてしていたので体に悪かったんだろうな。。。)
CO2センサ MHZ-14Aは半田付けは結構ハードル高いです。。。USB形式で挿せると楽なのですがどこか発売しないだろうか。
ついでにセンサ用のケースも欲しいですね。
参考サイト
- Raspberry Pi 3 Model B+ で二酸化炭素濃度を測る(MH-Z14A) -AWS IoT もあるよ- - Qiita
- CO2センサ MH-Z14Aの使い方 - Qiita
- ラズパイでUART通信を行う - ハードウェア技術者のスキルアップ日誌