UD-CO2S と Raspberry Pi Zero 2 W で CO2 濃度を計測する
数年前と比べて安くなっていたので、CO2 濃度計測するセンサーを購入してみた。UD-CO2S は、安くて NDIR 方式のちゃんとしたセンサーなのはよいのだが、単体だと5段階の LED でしか状態を表示できない。普段はそれで十分ではあるものの、そもそも時間経過とともに CO2 濃度がどのように変化していくのか、換気するとどれくらい変化するのかなど、感覚を掴むために数値でも見たいと思ったので、Raspberry Pi Zero 2 W を使って可視化してみた。
UD-CO2S は USB 接続で電源供給する仕様だが、PC と接続すればセンサーの値を取得できる。すでにデバイスファイルから値を読み取るツールを作成された方がいたので、それを使うだけでよかった。
https://github.com/northeye/chissoku
センサーを Raspberry Pi に接続するためには USB ハブを経由した。いろいろ探したところ、U2HS-MB02-4BBK というハブが microUSB で直接接続できて、別途 OTG アダプタを用意する必要がないのがよかった。アダプタだと同時に他の機器を接続できないので、とりあえず潰しが効くようにハブにしているものの、UD-CO2S しか接続しないのであれば短めの OTG ケーブルのほうがスッキリするだろう。
Raspberry Pi への電源供給には、家に余っていた Anker 40W 5ポート USB急速充電器 AK-71AN7105-B5A を使った。詳細な仕様が開示されていない製品で、1ポートあたりの出力がよくわかっていないのだが、とりあえず追加の出費なしで動いているのでよしとしている。
HDMI のアダプタは用意しなかった。Raspberry Pi Imager で microSD カードに OS を書き込む際、Wi-Fi や SSH の設定を事前に書き込んでおくことができるので、基本的になくても問題ない。トラブルシューティングなんかで必要になってから考えるのでよいだろう。
やり方としては Raspberry Pi Imager で Raspberry Pi OS Lite を入れて chissoku のバイナリをダウンロードして実行するだけなのであまり語ることがない。chissoku の出力を加工して外部サービスに送るスクリプトを書いたのと、それを systemd の管理下で動かすようにしたくらい。
sudo apt install jq
./chissoku /dev/ttyACM0 | while read json; do echo $json | jq '{"records":[{"resource":"co2","data":.co2},{"resource":"temperature","data":.temperature},{"resource":"humidity","data":.humidity}]}' | \ curl -i -H'Content-Type: application/json' \ -H"X-Auth-Token: $token" \ -X POST -d @- \ "https://api.beebotte.com/v1/data/write/$channel"done
# Beebotte というサービスを使っているのは、当初 MQTT で送ろうとしたものの、一度に複数の値を publish できなさそうだったので REST API に切り替えたという経緯から。どうせ REST API を使うなら Beebotte じゃなくても何でもよさそう。
上記のスクリプトを systemd の Unit にすると以下のようになる。
sudo vi /etc/systemd/system/chissoku.service
[Unit]Description=ChissokuAfter=network.target
[Service]WorkingDirectory=/home/monoExecStart=/bin/bash -c './chissoku /dev/ttyACM0 | while read json; do echo $json | jq '\''{"records":[{"resource":"co2","data":.co2},{"resource":"temperature","data":.temperature},{"resource":"humidity","data":.humidity}]}'\'' | curl -i -H'\''Content-Type: application/json'\'' -H"X-Auth-Token: $token" -X POST -d @- "https://api.beebotte.com/v1/data/write/$channel"; done'Environment=token=<your_token_value>Environment=channel=<your_channel_value>
[Install]WantedBy=multi-user.target
sudo systemctl enable chissoku.servicesudo systemctl start chissoku.service
しばらく使ってみて、自分の場合は意識せずに生活していても思ったより CO2 濃度が上がることはなさそうだなと思った。ただ、それも計測しなければわからないことなので、わかるようになって安心して過ごせるようになったのはよかった。