M5Stackを使ってCO2モニタを自作する(SCD30編)

火曜日 , 27, 4月 2021 2 Comments

新型コロナウイルス感染拡大防止対策の一環として、空気中の二酸化炭素濃度(CO2)をはかって換気のタイミングを知るというのが打ち出されてきたようです。
M5Stack ( https://ja.wikipedia.org/wiki/M5Stack ) という小さいコンピュータとCO2センサーを組み合わせてリアルタイムにCO2濃度を測定・表示する環境モニタを自作してみました。

できあがった環境モニタ

必要なもの(機材)

スイッチサイエンスさんは、14時までに注文すると当日発送対応、各種支払い対応なのでとても便利でおすすめです。

上記機材のほかにM5Stack本体に給電をするためのUSB-CケーブルやUSBアダプタなどが必要になります。

必要なもの(ソフトウェア)

  • Visual Studio Code
    Microsoftが開発し無償提供しているテキストエディタ ( https://code.visualstudio.com/ )
  • PlatformIO IDE
    Visual Studio Codeなどのプラグインとして提供される組み込み開発用の統合開発環境。
    Arduinoスケッチなども扱えるのでArduino IDEより便利で快適な環境として使用

ほかにVisual Studio Codeを動かすためのWindowsやmacOSなどが必要になります。

ソフトウェアのセットアップ

Visual Studio CodeやPlatformIO IDEのセットアップ手順については、インターネットで検索すると詳しい手順を解説しているサイトがたくさんあるので、お使いのOSにあわせた解説サイトを参照してください。

ダウンロードしたソースコードをVisual Studio Codeで読み込み、PlatformIO IDE上でビルド、M5Stack本体にアップロードしてください。

環境モニタの起動

M5Stack本体のポートAとセンサーをGroveケーブルで接続します。
M5Stackシリーズでは、USB-Cポートのとなりについている差し込み口がポートAになります。
Groveケーブルは端子に凹凸がついているのでポート側の凹凸にあわせて差し込んでください。

IMG_6345

接続後、M5Stackの電源を入れるとプログラムが起動し計測した値を表示します。

二酸化炭素濃度により表示の色分けを行います。

CO2濃度

背景色

文字色

1000ppm以下

1001~2500ppm

黄色

2501ppm以上

1000ppm以下のときは黒背景に白文字で表示1001ppm~2500ppmのときは黄色背景に黒文字で注意表示2501ppm以上のときは赤色背景に白文字で警告表示

ソースコード

  • 開発環境
    Visual Studio Code Ver. 1.55.2
  • 動作確認した環境
    M5Stack Gray
  • ライセンス
    NYSL ( http://www.kmonos.net/nysl/ )
  • ダウンロード (2021/04/27更新)
    ソース: http://ria-lab.com/omiyage/CO2ENV_1.0.0.zip
  • #include <Arduino.h>
    #include <M5Stack.h>
    #include "SparkFun_SCD30_Arduino_Library.h"
    
    // ********************************************************************
    //  M5StackとSCD30を使ったCO2と温度・湿度がわかる環境モニタ
    //  
    //  必要な機材
    //  ・M5Stack Gray
    //  https://shop.m5stack.com/collections/m5-core/products/grey-development-core
    //  ・CO2センサー
    //  https://wiki.seeedstudio.com/Grove-CO2_Temperature_Humidity_Sensor-SCD30/
    //  
    //  This software is distributed under the license of NYSL.
    //  http://www.kmonos.net/nysl/
    // ********************************************************************
    
    uint32_t bg; // 背景色
    uint32_t fg; // 描画色
    
    SCD30 sensor; // センサー(SCD30)
    uint16_t co2; // センサーから取得したCO2濃度(ppm)
    float temp;   // センサーから取得した温度(C)
    float hum;    // センサーから取得した湿度(%)
    
    void setup()
    {
      // M5Stack初期化
      M5.begin();
      M5.Lcd.begin();
      M5.Lcd.setSwapBytes(true);
      M5.Lcd.setRotation(1);
    
      // I2C/センサー初期化
      Wire.begin();
      sensor.begin();
      sensor.setAutoSelfCalibration(true);
    }
    
    void loop()
    {
    
      // センサーはデータ取得可能か?
      if (sensor.dataAvailable())
      {
        // CO2、温度、湿度を取得
        co2 = sensor.getCO2();
        temp = sensor.getTemperature();
        hum = sensor.getHumidity();
    
        // CO2濃度に応じて色分け
        if (co2 > 2500)
        {
          bg = TFT_RED;
          fg = TFT_WHITE;
        }
        else if (co2 > 1000)
        {
          bg = TFT_YELLOW;
          fg = TFT_BLACK;
        }
        else
        {
          bg = TFT_BLACK;
          fg = TFT_WHITE;
        }
    
        // LCD描画開始
        M5.Lcd.startWrite();
        M5.Lcd.fillScreen(bg);
        M5.Lcd.setTextColor(fg);
        // CO2
        M5.Lcd.setTextSize(3);
        M5.Lcd.setCursor(0, 40);
        M5.Lcd.println("CO2=");
        M5.Lcd.setTextSize(12);
        M5.Lcd.setCursor(80, 80);
        M5.Lcd.println((String)co2);
        M5.Lcd.setTextSize(4);
        M5.Lcd.setCursor(240, 140);
        M5.Lcd.println("ppm");
    
        // 温度
        M5.Lcd.setTextSize(3);
        M5.Lcd.setCursor(0, 170);
        M5.Lcd.println("Temp=" + (String)temp + "C");
        // 湿度
        M5.Lcd.setCursor(0, 200);
        M5.Lcd.println("Humidity=" + (String)hum + "%");
      }
    
      // 2000ミリ秒待機
      delay(2000);
    }
    

    M5Stack Gray本体が5000円、CO2センサーが7500円程度なので、あわせて12500円くらいでCO2センサーが自作できました。

    このプログラムは、ソースコードの通りセンサーから取得した値をM5StackのLCDに表示するだけのプログラムです。
    閾値を超えたらビープ音を鳴らす、他の機器へ通知するなどの仕組みを追加するとより使いやすい環境モニタになると思います。
    また、今回はM5Stack Grayを使いましたがPlatformIO IDEの対象ボード設定で適切な環境を選べば、ほかのM5ファミリへの移植も容易にできると思います。本体にM5StickCシリーズを使えばさらに安価に環境モニタが実現できると思います。

    もっと安価にCO2モニタを自作する(SGP30編)』へ続く

    2 thoughts on “ : M5Stackを使ってCO2モニタを自作する(SCD30編)”
  • […] 前回『M5Stackを使ってCO2モニタを自作する(SCD30編)』でM5Stack GrayとNDIR型のCO2センサー(SCD30搭載)を使い二酸化炭素濃度モニターを自作してみましたが1万円を超えてしまうので、もっと安価に自作できないものかとM5StickCとM5Stackから発売されているTVOC/eCO2ガスセンサーユニット(SGP30搭載)の組み合わせなら5000円程度で実現できるのではないかと試してみました。 […]

  • […] 『M5Stackを使ってCO2モニタを自作する(SCD30編)』、『もっと安価にCO2モニタを自作する(SGP30編)』と異なる方式で二酸化炭素濃度を測定してみたところ、驚くほどの差が出てしまったので、どちらの値が正しいのか確かめてみたくなりました。第3のセンサーを投入し同じ部屋で計測をした記録です。 […]

  • CO2センサーごとの計測値を比較してみる() – RIALAB. へ返信する コメントをキャンセル

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください