😶‍🌫️

【簡単】CO2濃度を監視!室内の空気を見える化して、生産性を高めよう(M5 Stack, MH-Z19C)

2023/12/10に公開

こんにちは!ゆらゆらです!
(この記事は、Social Databank Tech Blog Advent Calendar 2023の10日目です。)

室内で長時間作業していると、頭痛や疲労感、集中力の低下などを感じたことはありませんか?もしかしたらそれは、CO2濃度が原因かもしれません。

厚生労働省によると、CO2濃度が1000ppmを超えると身体に影響が出始めるとされています。特に、換気のタイミングが難しい現代のオフィスや自宅では、CO2濃度は高くなりがちです。

そこで今回は、初心者でも簡単にできる電子工作キットを使って、室内のCO2濃度を可視化する方法をご紹介します。

「電子工作やりたいけど、どうすればいいかいまいちわからない」という、そこのあなた!思ったよりも簡単なので是非にチャレンジしてみてください!

1. 準備編

今回作るもの

小さなディスプレイにCO2濃度を表示します。

CO2濃度が1000ppmを超えると数字の色を黄色に
2000ppmを超えると赤色にします。

今回用意するもの

  • M5 Stack
    • なんか色々できるデバイス。簡単に電子工作ができる。
    • 色々種類があるけど、大体どれでもいい。
    • 購入はスイッチサイエンスというサイトがおすすめ。
  • MH-Z19C
    • 赤外線を用いてCO2濃度を測定するセンサー。
    • 少し違う名前のものもあるけど、基本的な機能は大体同じ。
    • 他の安いセンサーより測定精度は高いらしい。
    • Amazonや秋月電子で購入できる。
  • ジャンパワイヤー × 4
    • M5 StackとMH-Z19Cを繋ぐための細いケーブル。
    • 両端がオスメスのもの。
  • USBケーブル
    • M5 Stackに付属している。
    • USB-A to USB-Cじゃないとダメみたい...?
  • コンピュータ
    • プログラムを書き込む。

M5 Stackの開発環境構築

Arduino IDEをインストールし、M5 Stack用のライブラリをインストールしてください。

詳しい方法は、この記事では割愛します。
(「M5 Stack Arduino IDE 環境構築」とGoogle先生に聞けば記事が沢山出てくると思います。)

補足:なぜMicroPythonとVSCodeじゃなくArduino IDEなのか

記事後半で出てくるキャリブレーション問題に対応するためです。MicroPythonのM5 Stackライブラリだとキャリブレーションの設定がありませんでした。

MH-Z19Cの設置と接続

環境構築が終わったらさっそくMH-Z19CセンサーをM5 Stackに接続しましょう!(電子工作っぽくなってきましたね...!)

ジャンパワイヤーを使用して、MH-Z19Cの各ピンをM5 Stackの適切なポートに接続します。

M5 Stack MH-Z19C
G GND
5V Vin
16 Tx
17 Rx


M5 Stack


MH-Z19C

2. プログラミング編

データの読み取りと表示

次に、MH-Z19CからのCO2濃度データの読み取りと、それをM5 Stackのディスプレイ上で表示するようにプログラミングしていきましょう!
今回はArduino IDEとArduino言語を使用します。

Arduino IDEを開いて[File]→[New Sketch]→以下のコードをコピペ!

#include <M5Stack.h>
#include "MHZ19_uart.h"

// MH-Z19CセンサーとM5 Stackの通信用ピン
#include <M5Stack.h>
#include "MHZ19_uart.h"

// MH-Z19CセンサーとM5 Stackの通信用ピン
#define RX 16
#define TX 17
#define INTERVAL 1  // 毎秒更新

MHZ19_uart myMHZ19;  // MH-Z19Cセンサーのオブジェクト
int count = 0;       // タイマーカウンター
int co2 = 0;         // CO2濃度
int temp = 0;        // 温度

void setup(){
  // M5 Stackの初期化
  M5.begin();
  M5.Power.begin();

  // ディスプレイの設定
  M5.Lcd.setTextSize(5);
  delay(100);

  // MH-Z19Cセンサーの初期化をしない
  myMHZ19.begin(RX, TX);
  // myMHZ19.setAutoCalibration(false);

  // CO2濃度表示の初期化
  M5.Lcd.setTextSize(10);
  M5.Lcd.println("CO2");
  M5.Lcd.println("");
}

// CO2濃度を表示する関数
void displayCo2(int co2, int temp) {
  // 数値表示前に以前の数値をクリア
  M5.Lcd.fillRect(0, 50, 320, 60, BLACK);

  M5.Lcd.setCursor(0, 50);
  M5.Lcd.setTextColor(co2 < 1000 ? WHITE : (co2 >= 2000 ? RED : YELLOW), BLACK);
  M5.Lcd.println(co2);
}

void loop()
{
  // INTERVAL秒ごとにCO2濃度を更新
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2PPM();
    temp = myMHZ19.getTemperature() + "ppm";
    displayCo2(co2, temp);
  } else {
    M5.Lcd.print(".");
  }
  count++;
  delay(1000);
}

M5 Stackに書き込む

Arduino IDE左上のUploadボタンを押して上記のコードをM5 Stackに書き込みます。

IDE下のOutputにゴニョゴニョ流れて...

M5 Stackの画面に

CO2
{数字}

が表示されればOKです!

動作テスト

ではテストをしてみましょう。

CO2センサーに息をふーっと吹きかけてみてください。
数字がぐぐぐっと増えましたか?

1000ppm以上だと文字が黄色に


2000ppm以上だと文字が赤色に

4. 注意点

このMH-Z19Cは自動でキャリブレーションがオンになっています。
キャリブレーションってなんやねんっていう方はそのままでOKです。

オフにしたい場合

1. 自動キャリブレーションをオフにする。

以下の箇所のコメントアウトを外します。
あまりうまく動作できてないかもしれませんが。

  // myMHZ19.setAutoCalibration(false);

2. Pythonを使って手動でキャリブレーションする。

python-pipをインストール

sudo apt install python-pip

mh-z19用のモジュールをインストール

sudo pip install mh-z19

☕️☕️どこか風通しのいい場所に5分ほど放置☕️☕️


手動でキャリブレーション

sudo python -m mh_z19 --zero_point_calibration

テスト

sudo python -m mh_z19
# -> {"co2": 400}

まとめ

今回は、MH-Z19CとM5 Stackを用いて室内のCO2濃度を可視化する方法を紹介しました。
まぁぶっちゃけCO2濃度がわからなくても換気をこまめにすればいいのですが...
濃度が可視化されることで意識づけになると思います!

もちろん市販のCO2濃度計を買ってもいいのですが、DIYをすれば

  • CO2濃度を記録してグラフにする
  • CO2濃度が一定の基準を超えた場合にスマートフォンへ通知を送る
  • スマートホームデバイスを自動的に操作して換気をする

etc...可能性は無限大に広がります!
そして何より楽しい!

是非みなさんもチャレンジしてみてください。
よき電子工作ライフを!

ソーシャルデータバンク テックブログ

Discussion