monolithic kernel

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
/etc/systemd/system/chissoku.service
[Unit]
Description=Chissoku
After=network.target

[Service]
WorkingDirectory=/home/mono
ExecStart=/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.service
sudo systemctl start chissoku.service

しばらく使ってみて、自分の場合は意識せずに生活していても思ったより CO2 濃度が上がることはなさそうだなと思った。ただ、それも計測しなければわからないことなので、わかるようになって安心して過ごせるようになったのはよかった。


Related articles