LoginSignup
14
11

More than 3 years have passed since last update.

M5 ATOM Matrix と MH-Z19 で CO2 濃度を見える化してみた。

Last updated at Posted at 2020-04-16

はじめに

M5 ATOM (Matrix / Lite) がようやく日本で発売されました!🎉
2020年4月10日に注文して14日に到着しました。
いやぁーーー、本当に小さいですね。
M5 ATOM Matrix x 2個 = M5StickC です。
M5 ATOM Lite の方は Matrix よりも厚みが薄いです。

本題

この記事は Nefry BTとCO2センサー(MH-Z19)で職場環境を見える化してみた。の M5 ATOM Matrix 実装版です。

当時は働き方改革 = 少しでも職場環境を良くしたいというモチベーションでしたが、最近は在宅ワークが主流になり、ほとんど一日中部屋の中で過ごすようになったので、少しでも仕事部屋を良くしたいというモチベーションに変わりました。

M5 ATOM Matrix / Lite 開封の儀

まずは動作確認から。

環境

  • MacBook Pro Mojave
  • MacBookAir High Sierra

UIFlow

先人の情報を参考に UIFlow (ウェブ版) での動作確認は手順どおりで問題ありませんでした。
https://qiita.com/youtoy/items/17739b7f4197a8d3fa4d

最初につまずいたのは UIFlow (デスクトップ版) で接続に失敗して使用できませんでした。
これについても先人の情報を参考に、起動時にモードを切り替える方法を試すことで無事に動作確認できました。
https://qiita.com/wakasamasao/items/eea919cc525abbf90eab
青: UIFlow desktop IDE Program
→USB接続してIDEから書き込みができるモードにしてから UIFlow (デスクトップ版) から接続する。

M5 ATOM Matrix で CO2 濃度を見える化する

以前のソースコードを参考に M5 ATOM Matrix へ移植することもできますが、今回は MH-Z19 を使用するためのライブラリを利用させていただきました。

Arduino IDE

Arduino IDE で M5 ATOM を使用するため、以下 2 つのライブラリをインストールします。
M5Atom
https://github.com/m5stack/M5Atom
FastLED
https://github.com/FastLED/FastLED

MH-Z19 を使用するため、以下のライブラリをインストールします。
mhz19_uart
https://github.com/nara256/mhz19_uart

最初、Arduino IDE からの書き込みに失敗するので調べたら、これも先人の情報に辿り着き、Upload Speed を 115200 にして無事に書き込みができるようになりました。
最終的な書き込み設定は以下のとおりとなりました。

接続図

裏面にジャンパーピンを挿して使用しましたが、Groveコネクタケーブルを接続しても使用できました。
下記のソースコードを以下のように書き換えてください。

ジャンパーピンを使用する場合(G / 5V / G25 → RX / G21 → TX)
mhz19.begin(25, 21);

Grove コネクタ: G / 5V / G26 → RX / G32 → TX
mhz19.begin(26, 32);

スクリーンショット 2020-04-17 0.31.56.png

動作概要

LED Matrix の表示は以下のようにしました。
CO2濃度 (ppm) と温度 (temp) ・・・CO2濃度補正のための参考温度をシリアルログに出力します。

青: 350 〜 450ppm   過剰な換気 (外気: 330〜400ppm)
緑: 450 〜 700ppm   理想的な換気レベル
黄: 700 〜 1,000ppm  換気が不十分 (室内では1,000ppm以下に抑えることとされている)
赤: 1,000 〜      悪い室内空気環境 (学校環境では1,500ppm以下が望ましいとされている)

ソースコードの LED 表示の色指定順が RGB ではなく、GRB でしたので、ご注意を。。
M5.dis.drawpix(i, 0xffffff); // #GGRRBB の順

さっそく動かすと、既に黄色表示・・。
(一生懸命働いているから、ということにしておきます。)

ソースコード

サンプルコードはこちらです。

M5ATOM_Matrix_MH-Z19.ino
#include <M5Atom.h>
#include <MHZ19_uart.h>

bool IMU6886Flag = false;

MHZ19_uart mhz19;

void setup() {
  M5.begin(true, false, true);
  delay(50);
  for (int i = 0; i < 25; i++) {
    M5.dis.drawpix(i, 0xffffff);  // #GGRRBB の順
  }

  Serial.begin(115200);  // for debug log
  mhz19.begin(25, 21);  // Grove RX:26, TX:32 | GPIO RX:25, TX:21
  mhz19.setAutoCalibration(false);
  delay(3000);
}

void loop() {
  int co2 = mhz19.getPPM();
  int temp = mhz19.getTemperature();

  Serial.print(co2);
  Serial.print(" ppm, ");
  Serial.print(temp);
  Serial.println(" temp");

  if (co2 < 450) {
      for (int i = 0; i < 25; i++) {
        M5.dis.drawpix(i, 0x0000ff);  // blue
      }
  }
  else if (co2 < 700) {
      for (int i = 0; i < 25; i++) {
        M5.dis.drawpix(i, 0xff0000);  // green
      }
  }
  else if (co2 < 1000) {
      for (int i = 0; i < 25; i++) {
        M5.dis.drawpix(i, 0xffff00);  // yellow
      }
  }
  else {
    for (int i = 0; i < 25; i++) {
      M5.dis.drawpix(i, 0x00ff00);  // red
    }
  }
  delay(5000);
}
14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11