taltalp が 2020年07月16日02時55分01秒 に編集
初版
タイトルの変更
ラズパイとAmbientでリモートワーク作業環境のログを取る
タグの変更
RaspberryPi
Ambient
ガスセンサ
IoT
本文の変更
最近リモートワークで自宅にこもる時間が増えました。 自宅で一日作業部屋にこもっていると、気がつくとなんとなくぼーっとしたり、眠くなったりすることはないでしょうか。 そういうときは窓を開けて部屋の換気をしましょう。 二酸化炭素濃度が高まると人は眠くなったり集中力が低下したりするようです。 とは言え、"なんとなく"ぼーっとするというのは一体どのくらいの二酸化炭素濃度でなるのでしょうか。 実は気づいていないだけで、ぼーっとしていることに気づかないまま非効率な作業を続けているのではないでしょうか。 私はこの"なんとなく"の判断が苦手です。数値化してその判断基準を機械にゆだねたいと常に思っています。 前置きが長くなりましたが今回は、 自宅で仕事に集中できるように、部屋の二酸化炭素濃度や温湿度をグラフ化し、 適切なタイミングで換気を行えるようにしたいとおもいます。 ## アイデア I2C通信で簡単に環境測定を行えるセンサが数多く売られています。例えば今回使う下記のようなセンサがあります。 * Bosch BME280 (温度、湿度、気圧センサ) * AMS CSS811 (二酸化炭素、総揮発性有機化合物センサ) これらのセンサをRaspberry Piで制御してセンサの読み出しを行います。 Raspberry Piを使えばI2C通信なんかもPythonで簡単に記述できます。 また、今回は[Ambient](https://ambidata.io/)というサービスを使って、Webブラウザでグラフ表示ができるようにしたいと思います。 このAmbientを使うと、わずか2行のコードでデータのグラフ化ができてしまったので紹介しようと思いました。 ## 事前準備 * Raspberry Pi 4 * Python 3.8.3 * [秋月 - BME280使用 温湿度・気圧センサモジュールキット](http://akizukidenshi.com/catalog/g/gK-09421/) * CJMCU-811 (CSS811搭載) pyenvでpythonのバージョンを3.8.3にしています。 ## 回路図 ![キャプションを入力できます](https://camo.elchika.com/ffcfa5f81b62894ca4c34e20519ebadb4d7e439a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30636231363661662d616538622d346431312d393136362d6465646531383239313039612f37636536623834382d623963642d343333352d396537372d653832623836383132656636/) ## 環境設定 pythonで利用するライブラリのインストールを行います。 * CCS811, BME280ライブラリ ``` pip install adafruit-circuitpython-ccs811 pip install Adafruit-BME280 ``` * Ambient ``` pip install git+https://github.com/AmbientDataInc/ambient-python-lib.git ``` ## ソースコード 使用したソースコードは下記のとおりです。予めAmbientに会員登録して、チャンネルIDとライトキーを取得しておいて下さい。 ```python import time import board import digitalio import busio import adafruit_ccs811 import adafruit_bme280 import ambient i2c = busio.I2C(board.SCL, board.SDA) ccs811 = adafruit_ccs811.CCS811(i2c) bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c) bme280.sea_level_pressure = 1013.25 # Ambientと接続: チャンネルID, ライトキー ambi = ambient.Ambient(123456, '0123456789abcdef') # Wait for the sensor to be ready while not ccs811.data_ready: pass while True: co2 = ccs811.eco2 voc = ccs811.tvoc temp = bme280.temperature humid = bme280.humidity press = bme280.pressure # データを送信 r = ambi.send({"d1": co2, "d2": voc, "d3": temp, "d4": humid, "d5": press}) time.sleep(60) ``` ## 動作画面 グラフが表示されました。 Ambientにスマホでログインすれば、家のどこにいても(外でも)グラフを見ることができます。 ![キャプションを入力できます](https://camo.elchika.com/6cbcd625ac6be7770b17f28a048b6ca85d336e18/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30636231363661662d616538622d346431312d393136362d6465646531383239313039612f35666537646330392d376338642d346566332d393663372d303064373963353635363462/) ## 適切な環境 厚生労働省が公開している[建築物環境衛生管理基準について](https://www.mhlw.go.jp/bunya/kenkou/seikatsu-eisei10/)によると、 * 二酸化炭素濃度 1000ppm以下 * 温度 17~28℃ * 湿度 40~70% が適切とされています。我が家ではこれを超えていたら換気するようにしました。 一晩寝ていると2000ppm程度まであがっていることもあるので、朝起きて作業する前にはしっかり換気をしないといけないなどの知見を得ました。 基準値を超えたら通知が来るようにするとより便利ですね(今回はやりませんが) これで快適在宅ワークを送っていきたいと思います。