【超簡単電子工作】M5StackとCO2センサで自室のCO2濃度を測定してみた!
部屋に籠ってリモートワークをやっていると頭がぼーっとしてきたので、なぜだろう?と調べたところ室内のCO2濃度が関係しているようでした。でも市販のCO2センサはちょっと高い…そうだ、作ってみよう!ということで自作してみました。
コロナで一気にCO2測定器の需要が高まりましたね。完成品を買ってもいですが、どうせならDIYしてみては?
- 必要なもの
- M5Stack
- M5Stack Basic V2.6
- M5Stack Gray(9軸IMU搭載)--在庫限り
- CO2センサ
- 1 Piece MH-Z19 NDIR CO2 Sensor Module Infrared Co2 Sensor 0-5000ppm for CO2 Monitor CO2 Sensor MH-Z19B and Line
- 28.0US $ |Mh Z19b Infrared Co2 Sensor For Co2 Monitor Mh-z19b 5000ppm Mh-z19b Ndir Gas Sensor Co2 Gas Sensor Mh-z19 - Sensors - AliExpress
- ユニバーサル基板
- L型ピンヘッダ
- ピンソケット
- ビニル電線またはスズメッキ線
- 配線方法
- Arduinoプログラム
- まとめ
必要なもの
M5Stack
M5Stack。これ1つあれば大体のIoT電子工作ができます。ちなみに筆者は5個持ってます(笑)
2年前ぐらいは4000円ぐらいで買えていたのですが、最近の半導体不足と円安の影響で高くなってしまっています。
9軸加速度センサ付きのM5Stackもあります
今回は加速度センサ使用しないので、Basicで問題ありません(筆者の手元にはGrayがあったのでGrayを使って進めていきますが、Basicでもプログラムは同じで大丈夫です)
CO2センサ
今回は比較的安く手に入る「MH-Z19B」を購入しました。
中国から送付されてくるので、注文から到着まで最低でも1週間は見ておいた方がよさそうです。
Amazon
AliExpress(筆者はこちらで購入しました!)
ユニバーサル基板
これは何枚持っていてもいいですね。
L型ピンヘッダ
分割して15ピン使用します。
ピンソケット
なくてもいいですが、ソケットをユニバーサル基板にはんだ付けしておき、そこにCO2センサ取り付けておくことで、取り外しが楽になるというメリットがあります。
今回は5ピン1列のものを2個使います。
ビニル電線またはスズメッキ線
ユニバーサル基板上で配線を行うのに使用します。色はお好みで!ちなみに、電子工作界隈では配線は一般的に以下のようになっています
- 電源:赤
- GND:黒
- 信号線:いろいろ
電源用に赤と黒、信号線用に青、緑、黄色あたりを購入しておくと間違いないかと思います!
配線方法
CO2センサの配線
M5StackとCO2センサはUARTを使って接続します。
配線図はこのようになりました。
ユニバーサル基板側の完成写真
スペーサとして3か所ねじ止めしていますがなくて大丈夫です。
M5Stackへの接続
M5Stackとピンヘッダで接続します。
表面
ウラ面
Arduinoプログラム
「1分に1回CO2濃度を取得して表示するプログラム」を作ってみます!
Arduino IDEのインストールとボード設定
PCでM5Stackにプログラムしていく前に、開発環境を準備する必要があります。
「ArduinoIDE」という開発環境を使用します。インストール方法とボードの設定については、クラスメソッドさんの記事が参考になりましたので以下に載せておきます
ソースコード
今回は厳密な濃度を知る必要はありませんでしたので、CO2センサのキャリブレーションは考慮していません。
作成したソースコードはこちら。
「MHZ19_uart」というライブラリを使用しています。ライブラリのインストール方法についてはこちらの記事が参考になりました。
/*----------------------------------------------------------
MH-Z19 CO2 sensor SAMPLE
----------------------------------------------------------*/
#include <M5Stack.h>
#include <MHZ19_uart.h>
#define ARDUINO_ARCH_ESP32
#define PERIOD 60
#define THPPM 1000
const int rx_pin = 16; //Serial rx pin no
const int tx_pin = 17; //Serial tx pin no
MHZ19_uart mhz19;
/*----------------------------------------------------------
MH-Z19 CO2 sensor setup
----------------------------------------------------------*/
void setup() {
M5.begin();
delay(100);
Serial.println("Hello");
mhz19.begin(rx_pin, tx_pin, 2);
mhz19.setAutoCalibration(false);
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(20,120);
M5.Lcd.clear();
M5.Lcd.setBrightness(50);
}
/*----------------------------------------------------------
MH-Z19 CO2 sensor loop
----------------------------------------------------------*/
void loop() {
unsigned long startt = millis(); // loopの開始時刻を記録
int co2ppm = mhz19.getPPM();
int temp = mhz19.getTemperature();
Serial.print("co2: "); Serial.println(co2ppm);
Serial.print("temp: "); Serial.println(temp);
M5.Lcd.clear();
M5.Lcd.setTextSize(10);
M5.Lcd.setCursor(20,120);
M5.Lcd.printf("%dppm\n", (int)co2ppm);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(20,0);
delay(PERIOD*1000);
}
これをM5Stackに書き込んで、電源を入れます!
表示されました!
1000ppmを超えると換気が必要なレベルということですので、即換気ですね(笑)
これをベースにしていろいろ機能追加していきたいと思います。
WiFiとLine Notifyを使って1000ppmを超えるとLINE通知が来るようにしたいと思います!