仕事中眠くなったり、ぼーっとすることがあったら二酸化炭素が原因です(確信)。
濃度によってこのような影響が明らかになっており、オフィスや学校など法律でも一定以下にするよう決められているそうです。
特に新型コロナのご時世、テレワークをしている家ではオフィスビルの空調と比べて換気が悪いかもしれません。
出社されている方も、オフィス内の換気の目安にもなります。
CO2濃度が350ppmから450ppmであれば屋外と同等のレベル、700ppmを超えると注意が必要になり、1,000ppmを超えると眠気を誘われます。さらに2,500ppmを超えると、頭痛・倦怠感・注意力散漫など健康に害を及ぼす影響が出始め、5,000ppmを超えてしまうと、作業場所としては適しません。
窓を開けっぱにしたり、頻繁に換気をすればいいんですが、外が寒かったり、暑かったり、花粉だったりすると換気をするには気が引けます。
そういうときにはデータを武器に戦いましょう。
Amazonでできあいのものも買えますが見なかったことにして、Raspberry Piで作ることにしました。
作ったもの
まだ試作段階でSlack通知とかつけてます。
ざっくり予算
Raspberry Pi Zero WH 一式で3000円くらい?
MH-Z19B 2500円くらい
抵抗とかLEDとかブレッドボードとか多めに買って 1000円くらい
ということで0から揃えたら7500円〜程度でしょうか。
でもセンサー以外は他でも使えるのでプライスレス。
用意するもの
Raspberry Pi
今回は家にあった3Bを使いました。
普通にRasbianをインストールしておきます。
センサー MH-Z19B
どうやら中国メーカーのMH-Z19Bが2000円弱で買えて情報も多くよさそうです。
温度センサーなどど比べると結構なお値段しますが、レーザーでなんかやってるらしく中は複雑なのでしょうね。
私はアリエクスプレスで注文しました。
いろいろ出品されてますが、半田付けしたくないので、ピンヘッダ付きを選びました。
家とオフィスで必要になるかもしれないのでとりあえず2つ。
3/9に注文して3/23に到着しました。コロナの影響もあったかもしれませんが2週間ぐらいを見ておけばよさそうです。
マニュアル、データシートはこれ。
https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf
ジャンパーワイヤー 最低限はメス−メス4本
MH-Z19Bはピンヘッダ付きを買ったので、ラズパイもどちらもメスで接続します。
最低限4本あれば足りますが、色は違ったほうが良さそう。
わたしは以前同じくアリエクスプレスでこんなのを買ったので一生大丈夫そうです。
ケーブルデュポンジャンパー線デュポン 30 男性 + メスオス + メスジャンパー銅線デュポンケーブル DIY キット|ワイヤー & ケーブル| - AliExpress
ブレッドボード
オプション。
ジャンパーワイヤ直結でもいけますが、ぶらぶらしてるのが不安だったり、のちのちLEDとかスイッチとかブザー使いたくなったら便利です。
オスメスなどのジャンパーワイヤが必要になります。
ラズパイに専用ライブラリをインストール
MH-Z19Bをかんたんに使えるライブラリ+ドキュメントをなんとGitHubやPyPiに用意してくれています。感謝。
なにやらシリアルを使って通信しているようですが、全く意識することなく使うことができました。
超試しやすいコマンド
pi@raspberrypi:~ $ sudo python -m mh_z19 {'co2': 668}
ほんとにこれ通りにラズパイ設定して再起動、配線して、書いてあるコマンドを叩くだけで二酸化炭素濃度が返ってきます。
リビングで起動直後は1000オーバーでびっくりしましたが、換気したら600程度になったり、外に置いたら400弱で安定したり、このままでも大丈夫そうです。
Firestoreに送信する
取得した値はやっぱりWEBから確認したいもの。しかしRaspberry Piをインターネットには晒したくありません。
Raspberry Pi自体は、いつ壊れても差し替えやすいようにシンプルで可能な限りステートレスな状態に保ちたいものです。
そのため、以下のような設計とします。
Raspberry Pi でcron等で定期的にセンサーから値の取得コマンドを実行
↓
取得した値をFireabse FunctionsのHTTPSのやつに送信
↓
Firestoreに保存
↓
WEB側でFirestoreから読み出してグラフにする。
こうすることでRaspberry Piは単純にURLにデータを送るだけでよく、Firebaseの認証や、SDKなどのインストールも必要ありません。
Pythonのファイル1つとcronかsystemdの設定のみで動くはず。
グラフで表示するWEB側もFirestoreをonSnapshotで参照することで簡単にリアルタイム更新が可能です。