XIAO ESP32とMH-Z19Eでエアメンターを作る
空気中の二酸化炭素濃度が1000ppmを超えると集中力が下がるらしい。
こまめに換気すればよいのだが、必要以上の換気はめんどくさいので、1000ppmを超えたときだけ換気したい。
そこで二酸化炭素濃度を測れるエアメンターを作る。
ちなみに1000ppmというのは0.1%のことらしい。
基本方針
自分で設計して作るとなると、いろいろ機能を盛り込みたくなってしまいがちだが、実際に必要な機能は二酸化炭素の濃度を測るというだけだ。
今回はあくまで実用品にこだわって、シンプルだが実用に耐える品をつくりたい。
そして実用という事を考えるなら、使い勝手の悪いものは作れない。また、大きいと邪魔になって置き場に困るので、できるだけ小さいことが望ましい。
初めは二酸化炭素センサーとディスプレイを備えたものを想定していたが、よく考えると二酸化炭素濃度など常に知っている必要はなく、濃度が高い時だけそれがわかるように知らせてくれればよいわけだから、ディスプレイは非搭載でよいという結論になった。
お知らせは例えばぴかぴか光るとか、スマホにメッセージを飛ばすとか。
前者を採用すると個体を人間の目に見える地点に設置しなくてはいけなくて場所を選ぶので、後者だ。その方がなんとなくスマートな感じもするし。
主要部品
マイコン:XIAO ESP32C3
二酸化炭素センサー:MH-Z19E
その他(基板、導線など)
配線
以下のようにXIAO ESP32C3とMH-Z19Eを配線する。
MH-Z19E xiao
ーーーーーーーーーーーー
・Vin VUSB
・GND GND
・PWM D1
必要なのは三本だけ。簡単。
半田づけする。
コーティング
MH-Z19をarduinoIDEで使うためのライブラリがあるので、Githubからダウンロードして解凍したフォルダごとC:\Program Files (x86)\Arduino\librariesに入れる。
リンク
https://github.com/nara256/mhz19_uart
このテストコードをベースに二酸化炭素濃度が1000ppmを超えたら通知をおくるように実装する。
Xiao EP32はwifiに接続できるので、
通知にはLINE notifyを使う。ここでトークンをとっておき、プログラムに埋め込めば通知を送ってくれる。
トークンの取得方法は調べたら出てくるので割愛。
https://notify-bot.line.me/ja/
// ライブラリのインクルード
#include <WiFi.h>
#include <ESP_Line_Notify.h>
#define pwmPin A1 //D1
// Wi-Fi設定
#define WIFI_SSID "********"
#define WIFI_PASSWORD "*********"
LineNotifyClient line;
void setup()
{
// Wi-Fi設定
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.begin(115200);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
}
pinMode(pwmPin, INPUT);
// LINEトークンの入力
line.token = "*****************";
}
void loop()
{
//二酸化炭素濃度を測る処理
//濃度の平均を計算する処理
// 基準値を超えていればLINEへ通知する
if (ppm_Ave > 1000)
{
line.message = "\n 二酸化炭素濃度が基準値を超えました!\n 最近5分間の平均濃度:" + String(ppm_Ave) + "ppm";
LineNotifySendingResult result = LineNotify.send(line);
delay(1200000);//通知後は20分待つ
}
}
センサーデータを取るところは人のプログラムを参考にしたので見せられないが、その他はそのまま。
このままでは動かないので、使う場合は適当に補完してください。
外装設計
外装も作る。コンパクトで、整備しやすいものを目指す。
・故障したときにすぐに開けられるように、蓋は接着しない(ねじ止め)
・USB-C用の穴をあける
・センサー部はそのまま外に出す。
設計はfusion360。以下のようになった。
3Dプリンタで出力。蓋の部分がうまく接合せず、何度か作り直した。
組み立て
動作確認
電源を差して動作確認。
ちゃんと動いた。