皆さんこんにちは。突然ですが皆さんはちゃんと換気していますか?
弊社のエンジニアが、オフィスでよく頭が痛くなるという話をしていて、Web上で調べてみると、室内の二酸化炭素濃度が高いと、集中力や意思決定に支障をきたしたり、眠くなったり頭痛を引き起こす等の症状を起こすそうな。1000ppmを超えると思考力に影響し始めるとの報告もありました。
試しに弊社のオフィスの二酸化炭素濃度を測ってみると・・・
うわっ…職場の二酸化炭素濃度、高すぎ…?
しっかり換気をしたいのは山々なのですが、弊社のオフィスは夏は熱く、冬は寒い。おまけに雨もよく降る。できる限り窓は開けたくない・・・
ということで適切な時間に換気することを呼びかけてくれるシステムを作ってみました!
準備したもの
・M5Stack Gray(スイッチサイエンスで購入)
・二酸化炭素センサー(MH-Z19B : Aliexpressで購入)
・ロジックレベル双方向変換モジュール(スイッチサイエンスで購入)
・音声合成用ライブラリ(AquesTalk pico for ESP32 使用ライセンス : アクエストオンラインショップで購入)
M5StackはWifiとBluetooth搭載モジュールのESP32をベースに、320×240のフルカラーLCDやスピーカー、リチウムイオン電池にケースまで付いたものをワンパッケージにしてあり、ArduinoIDEやmicroPython等開発環境も充実しているので、Maker界隈でもホットな優れものです。今回準備したものは9軸センサ付きの「M5Stack Gray」ですが、今回の用途であれば安価な「M5Stack Basic」でも大丈夫です。
二酸化炭素センサーは0-5000ppmのデータをPWMもしくはシリアルで取得でき、比較的安価なものを選びました。
二酸化炭素センサーは5Vで動作しますが、M5Stackは3.3Vで動作するので、ロジックレベル双方向変換モジュールを挟んでデータを5Vから3.3Vに変換します。
今回換気が必要になったら音声で注意してもらおうと思い、SDカードのmp3ファイルを再生させようと考えていましたが、より柔軟にメッセージを変えてみようと思い立ち、音声合成ライブラリを使うことにしました。
音声合成用ライブラリは、軽量な音声読み出しライブラリとして名高いAquesTalkをM5Stackの内部のESP32用に作られたものを使っています。これにより、文字列から音声に変換し、再生することができます。ライセンスが無くても試用はできますが、制限等も出てきますのでライセンスを購入しました。
今回のざっくりとした配置図は下記のようになります。
実装
今回プログラムで実装した機能は下記の通りです。
- 電源を入れて3分ほどキャリブレーションの為に待つ。
- 「センサーの調子が終わりました」と声を出し、センサのデータ収集を開始。
- ある程度の濃度になると「換気してください」と声を出す。
- 二酸化炭素濃度が改善されないと、1分毎に「・・・そろそろ、換気してください」と脅す。
下記の動画のような感じで動きます。
次の記事では機能を追加しつつ、実際に使ってみたレポートをまとめます。