ElixirとRaspberry PiでPM2.5などの環境データを定点観察し、目・喉の痛みに備える
目次
皆さんは体調管理どうされていますか。一度痛い目に遭うと日常の細かい差異が気になってきて、そこをどうにか解決したいというのが人情です。今回は自分の咽頭痛の解消のため一つ実験をしてみました。
PROBLEM
- 以前からオフィスに行くと目や喉が痛くなることがあったので、自分の体調なのか環境なのか原因を切り分けるために汚染計測器「Dienmern DM106A」を購入
- ただ、DM106Aの計測はその時その時のスナップショットなので傾向を読み解きづらい、また、都度実施する手間がかかる
SOLUTION
というわけで、DM106AのセンサーデータをRaspberry Piで定期取得することにしました。設置方法の詳細はGitHubレポジトリを参照ください。下記、実装概要になります。
電子部品の構成
| item | description |
|---|---|
| Raspberry Pi 3 Model B+ | |
| Aosong DHT11 | 気温・湿度センサー、GPIO |
| Nova SDS021 | PM2.5・PM10センサー、UART |
| ams CCS811 | TVOC・CO2eセンサー、I2C |
まず、電子工作は素人ゆえどのセンサーを買えばいいか分からなかったのでDM106Aを分解して各センサーの型番を調べました。DHT011、SDS021はDM106Aとおなじセンサー、HCHOセンサーは信頼性があり手ごろなのがうまく見つけられませんでした。TVOCセンサーはAdafruitが推しているCCS811を採用しました。
コードの構成
| item | description |
|---|---|
| AirElixir.Application | アプリケーション管理 |
| AirElixir.GoogleSpreadsheets | センサーデータ記録 |
| AirElixirSensor.Publisher | センサーデータ発行・送信 |
| AirElixirSensor.Subscriber | センサーデータ購読・受信 |
次に、基本構成はGrovePiを参考にしました。発行処理はElixirでうまくいかないケースがあったのでまずはPython/ErlPortで行いました。後々Elixirに移行できるようにマクロにしました。
5日ほど稼働してわかったこと・見立て、今後の課題

最後に、分かったこと、見立てですが、3点あります。2番目に関しては予想通りだったのですが、1番目、3番目に関しては意外であり、疑り深い私としては特に空気清浄機がきちんと機能していたことに驚きました。
- オフィスの空気清浄機「Hitachi EP-LVG110」はPMをきちんとフィルターしていた
- 人の入りが多い時間帯に空気(TVOCやCO2e)が汚れる
- 人が「出る」時よりも「入る」際に濃度があがるのは、外のVOCが服などに付着しているためと推察
- TVOCやCO2eはPMのうごきに連動している(かも)
- チャート上はEP-LVG110がPM除去しているためわからないが、日本気象協会のPM2.5分布予測に照らしてみるとPM濃度が高い日にTVOC濃度があがっていた
- TODO: PMがVOCを運んでいる可能性があるので、IQAirなどのAPIから周辺環境のPMデータも取得したいところ
- チャート上はEP-LVG110がPM除去しているためわからないが、日本気象協会のPM2.5分布予測に照らしてみるとPM濃度が高い日にTVOC濃度があがっていた
課題としてはその性質からして仕方ないのですがTVOCの変動が大きすぎて解読を難しかったです。計測方法等を再度見直す必要がありそうです。
- TVOCの変動が大きすぎる
- ポーリング・出力を20分ごとからポーリング3秒ごと・出力20分ごとに変更した、出力データは20分の平均
- TVOCのスパイクを抑えたい
- TODO: ファイトレメディエーションによる効果を見ていきたいところ
WRAPUP
今回の実験はこれが言いたかっただけという指摘をされるとぐうの音も出ませんが、はっきり言わせてください。そう、Elixirは健康管理に向いています。
「なんか体調がすぐれないなあ...」
「Elixirちょうだい!」
という感じです、はい。
