新型コロナウイルス感染拡大防止対策の一環として、空気中の二酸化炭素濃度(CO2)をはかって換気のタイミングを知るというのが打ち出されてきたようです。
M5Stack ( https://ja.wikipedia.org/wiki/M5Stack ) という小さいコンピュータとCO2センサーを組み合わせてリアルタイムにCO2濃度を測定・表示する環境モニタを自作してみました。
スイッチサイエンスさんは、14時までに注文すると当日発送対応、各種支払い対応なのでとても便利でおすすめです。
上記機材のほかにM5Stack本体に給電をするためのUSB-CケーブルやUSBアダプタなどが必要になります。
ほかに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ケーブルは端子に凹凸がついているのでポート側の凹凸にあわせて差し込んでください。
接続後、M5Stackの電源を入れるとプログラムが起動し計測した値を表示します。
二酸化炭素濃度により表示の色分けを行います。
CO2濃度 |
背景色 |
文字色 |
1000ppm以下 |
黒 |
白 |
1001~2500ppm |
黄色 |
黒 |
2501ppm以上 |
赤 |
白 |
ソースコード
#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シリーズを使えばさらに安価に環境モニタが実現できると思います。
[…] 前回『M5Stackを使ってCO2モニタを自作する(SCD30編)』でM5Stack GrayとNDIR型のCO2センサー(SCD30搭載)を使い二酸化炭素濃度モニターを自作してみましたが1万円を超えてしまうので、もっと安価に自作できないものかとM5StickCとM5Stackから発売されているTVOC/eCO2ガスセンサーユニット(SGP30搭載)の組み合わせなら5000円程度で実現できるのではないかと試してみました。 […]
[…] 『M5Stackを使ってCO2モニタを自作する(SCD30編)』、『もっと安価にCO2モニタを自作する(SGP30編)』と異なる方式で二酸化炭素濃度を測定してみたところ、驚くほどの差が出てしまったので、どちらの値が正しいのか確かめてみたくなりました。第3のセンサーを投入し同じ部屋で計測をした記録です。 […]