ラボメンバー3号、篠原(@SHINOHARATTT)です。
最近、どうですか?
私は職場が緊急事態宣言の影響を受けまして、全社員の勤務体系がフルリモートになっております。
四谷ラボとしても一時的に閉鎖措置となり、以前のように集まることも自粛中です。
さて、リモートで働いているとですね、めっちゃ眠気があったり頭痛くなったり・・・
家にいる時間が増えたので「もしかして空気環境が悪いのでは?」と思ったのです。
部屋の換気はこまめに行う
さて、換気といえば窓を10分~15分ぐらい開け、室内の空気を入れ替えることを言います。ではなぜ換気を行うのか。
家の中にこもりっぱなしになってしまうと、室内のCO2濃度は着々と上がります。そして一般的な基準は厚生労働省のHPより1000ppm以下が室内における環境の水準と定義されています。
数値が高ければ高いほど環境は悪くなります。
参考までに、外気の二酸化炭素濃度はだいたい400ppm ~ 500ppmの範囲内で、私が住んでいる都内でだいたい420ppmらしいです。
以下に記載しますCO2濃度と身体への影響は基準数値ですがこのような感じ。
- ~450ppm 大気に近い快適な状態
- ~700ppm 長時間滞在しても健康に全く問題のない状態
- ~1000ppm 健康被害はないが、一部の人が不快と感じる (これを上回らないように計画せよという基準数値)
- ~1500ppm 意思決定に影響の出始める数値
- ~2000ppm 眠くなる人が多くなるという体調変化が出てくる数値
- ~3000ppm 肩こりや頭痛を感じる人が出る。健康被害のでる直前の限界。
- 3000ppm~ 長時間の滞在は健康に被害が出る。
- 5000ppm~ 危険なレベル。
※出典記事
なるほど、会議室みたいな密閉された空間で大事な意思決定会議の際は換気を良くするか、換気ができないなら屋外で会議したほうが良さそうですね。 なぜ会議で決まったことがあとになって問題が出るのか、なんとなくわかったような気がします。
空気環境を測定する
というわけで、実際に図ってみれば結果はわかりやすいのでまずは測ってみます。
モジュールを選択する
今回仕様したのはMH-Z19Bというモジュールです。これはCO2濃度を測定し、UARTで通信ができるもの。これにM5StickCを接続し、CO2濃度を測定します。
ピン生やしたりブレッドボードに固定したままにするのは精神衛生上よろしくないと考えたので、私は以下のモジュールを購入しました。
組み立て、動作確認は以下のページをご確認ください。
実際に測定してみる
ジャンっ!!というわけで、組んだらもう完成
はい、えー、これで空気環境は見れます。
合わせて、私の自宅にて測定しているCO2濃度は以下のページで公開しております。
これは、AmbientというIoTの情報とかをスタックしてグラフ化できるツールです。
https://ambidata.io/ch/channel.html?id=21199
グラフを見ているとわかるのですが、急激に下がっているのは換気扇をONにしているため。
私の家はなんだかんだ 30㎡ぐらいあるため比較的CO2濃度は上がりにくい傾向にあるようです。
また換気がいいようで換気扇を回すとあっという間にCO2濃度は下がっていきます。
悪く言うと、立て付けが悪い・・・
換気扇を自動化する
せっかくM5StickC、これWiFiつながるし環境測定できるし小型だし液晶ついてるし・・・・
最強じゃないですかこれ。最強だと思うんですよ僕。
というわけでWiFi繋がっているのであればCO2濃度を監視して換気を自動化したい。そう考える人も多いハズ。
幸いにもですね、我が家の換気扇はTP-LinkのスマートプラグとKasaによりスマホのアプリから操作できるようスマート家電化しているのです。もちろんこれ、Google HomeとかAmazon Echoからも操作できるようになっています。 このTP-LinkのKasaって何がすごいって、IFTTTと連携しているのでかんたんに他のトリガーから操作できるのです!!
自動化できましたー pic.twitter.com/CBUlnoM1zX
— T.Shinohara (@SHINOHARATTT) May 16, 2020
ということで、M5StickCからIFTTTのWebhookを叩いて換気扇を制御したいと思います。
なお、変更したコード全文は、以下のわたしのGitHubにあります。
M5StickCからIFTTTを叩く
わかりやすいのは、次のブログ記事です。参考にさせていただいたのは、この記事です。
まずは、この記事に沿って'tiny_ifttt.py'をルートディレクトリに追加して、IFTTTへのWebhookはこのライブラリをそのままお借りします。
コード何には以下の内容で記載すると叩けます。
from tiny_ifttt import tiny_ifttt ti= tiny_ifttt("IFTTT_KEY", debug=True) ti.trigger('IFTTT_EVENT_NAME', value1='', value2='', value3='')
triggerに渡している'IFTTT_EVENT_NAME'をWebhookのトリガーにし、WEBHOOKのレシピを立ち上げます。
家電の使い方は各自それぞれなので、例えばですが換気扇を自動化せずにAndroidに通知を送るなども可能です
レシピの立て方、キーの確認方法は別途、IFTTTについて解説されている記事をご参照ください。
コード内に実装していく
コード全文はこちらになります。 管理の都合上、ファイル名を変えていますが、このような感じになっております。
まずは宣言を追加
from m5stack import * import machine import gc import utime import uos import _thread import ntptime # 以下を追加 from tiny_ifttt import tiny_ifttt
合わせて、各キーもGlobalの宣言も追加していきます。
これは外部ファイルに記載したKeyを呼んだときに使用します。
# 変数宣言 # # 省略 # IFTTT_KEY = None # 追加
CO2濃度を監視し、Fanの状態を制御する部分をスレッド化します。 iftttへのアクセスはレスポンス待ちになる間の時間がかかりそうだなぁって思ったのと、CO2濃度がグローバル変数化されているので、既存のコード箇所に手をあまり入れないようにしようと思っただけですが・・・。
def fan_control (): global co2 my_key = IFTTT_KEY # 初期化 ti= tiny_ifttt(my_key, debug=True) state = False while True: # フラグONかつ500未満で換気扇OFF if co2 < 500: if state == True: ti.trigger('Fan_control_off', value1='', value2='', value3='') state = False # フラグOFFかつ1400以上で換気扇ON if co2 >= 1400: if state == False: ti.trigger('Fan_control_on', value1='', value2='', value3='') state = True
あとは、スレッド起動してあげれば動きます。
# IFTTT 要求スレッド起動
_thread.start_new_thread(fan_control, ())
さて、コレを書き直して動かせばiftttで動くはず。
※UI Flowの基本的な操作は、本家様のReadmeとブログを御覧ください。
単純に動かしたいだけ
- 下記をクローンor download
https://github.com/ShinoharaTa/m5stickc_co2_hat/tree/ifttt_webhook _co2_set.text
をリネームし、co2_set.txtにリネーム- 本家の手順のAmbient KEY等のほか、IFTTTのキーを設定する
- 下記ブログの
tiny_ifttt.py
をルートに転送
http://ippei8jp.hatenablog.jp/entry/2017/09/06/110757 - アプリを転送(
CO2_Ambient_and_ifttt.py
を転送する)
まとめ
これでCO2濃度を監視していると、意外と無意識の間に室内のCO2濃度って上がっているんですね。
ボーッと眠気を感じたり、頭痛が痛くなると一気に能率が低下するので、その前にやはりこういったモジュールで部屋の換気を積極的に行っていきましょう。
ところで私、リモートにもかかわらず遅刻するし、午前中は眠いし、お昼食べた後は2時間後ぐらいに眠気に襲われるのですが・・・