CCS811(CO2濃度) Gadget M5Stack

【M5Stack】テレワーク用CO2濃度モニター(CCS811)を作ってみた!!

こんにちは!!

2021年最初のガジェット投稿です!!

今回は昨年購入した「M5Stack Gray」を使って自宅の環境品質、例えば温度、湿度、二酸化炭素濃度といった室内の空気の品質を計測したいと思います。

M5Stack関連記事
【M5Stack】M5Stack Gray 買ってみた!!

こんにちは。 休日はどう過ごしていますか? 私は感染予防でもっぱら家の中にいます。 さて、今回は以前から興味があったM5Stackを購入したお話です。 「M5Stack」はエムファイブスタックと読みま ...

続きを見る

特に、昨年から続いているこのコロナ禍でのテレワークでは、室内の二酸化炭素濃度が一般家庭でも注目されています。

毎年この時期は、インフルエンザ予防で乾燥しないように湿度だけを特に気にしてましたが、今は二酸化炭素濃度です。

1月13日のめざましテレビでも二酸化炭素濃度を計測しするガジェットが紹介されてました。

CO2濃度センサー CO2モニター Logtta CO2モニター(Bluetooth) CO2センサー ワイヤレスCO2モニター

まずは、この二酸化炭素濃度を計測出来るようにしてみます。

なぜ、「二酸化炭素濃度」を計測するのか?

この二酸化炭素濃度の上昇の人体への影響は、濃度が濃くなると倦怠感、頭痛、耳鳴り等を訴える人が多くなるそうです。

テレワークで「なんか眠くなる」とかパフォーマンスが落ちている、または落としたくないという方は気にするべき値の1つですね。

じゃあその症状を起こさないための基準は?

ということで1000ppm以下という基準が、建築基準法や建築物衛生法で定められています。

オフィスにいれば会社またはビルメンテ会社が定期的にオフィスの室内環境をCheckしてますから安心ですが、テレワークだと自分自身で環境を気にしないといけません。

これは今後のテレワークする上での常識になりそうです。

そして、比較対象として外気の二酸化炭素濃度はどの程度か?

2019年の世界の平均濃度は、前年と比べて2.6ppm増えて410.5ppm温室効果ガス世界資料センター(WDCGG))です。

室内も外気の濃度に近いといいですよね。

ただ、1からこのモニターを作るのがめんどくさい方は、以下のようなセンサー機器が販売されていますので検討するのも良いと思います。

実は私もこのCO2-miniを欲しかったのですが、案外高いのとM5StackやArduinoを既に持っていればセンサーを買い足すだけで実現出来てしまいますから。そして楽しいですし。

カスタム (CUSTOM) CO2モニター CO2-mini

ということで、M5Stackと二酸化炭素濃度を計測できるセンサーCCS811チップを使って計測したいと思います。

で、開発したら外気も計測することで先程の濃度に近いか正確性も確認してみようと思います。

ではチャレンジ!!

まず用意する物は・・・

・MacBook Air(Catalina)

・M5Stack Gray

M5Stack ESP32 Mpu6886+BMM150 9Axiesモーションセンサーコア開発キットArduino用の拡張可能なIoT開発ボード

KEYESTUDIO CCS811

KEYESTUDIO DC 5V CCS811 CO2 二酸化炭素 TVOC 大気質 センサー モジュール for Arduino アルドゥイーノ アルディーノ 電子工作

・ブレッドボード&ジャンパーワイヤー

Leobro ジャンパーワイヤ 65本 ブレッドボード 400ポイント 2枚入 オスオスジャンプワイヤ ブレッドボードキット ジャンパー線 Arduino用 電子回路用

・Arduino IDE(1.8.13)

ドライバーやらもろもろこちら

https://docs.m5stack.com/#/en/arduino/arduino_development

そして、M5StackとCCS811とを接続しプログラミングも完了した完成状態がこれです。

M5Stackでの表示項目はこちら。

「CO2 Monitor」の表示とその下にCO2濃度、最後にhecaton'sのURLを表示させました。

step
1
配線

まず配線ですが、こちらはKEYESTUDIOのWebで確認しました。

CCS811は7pinあり、それぞれのPINの割り当てと仕様は以下になります。

メモ

各測定範囲値

  • eCO2 : 400-29206 ppm
  • TVOC(金属酸化物(MOX)レベルを含む、広範囲の揮発性有機化合物) : 0 〜 32768ppb

そしてM5Stack側は以下のとおり。

今回はI2C通信を使いますので、下のM5Stackの下の端子を利用します。

5V、G、SDA、SCLを利用します。

それぞれを接続すると以下になります。

このセンサーは5vで動作なのでM5Stackの5Vに接続します。

センサーの「wake」PINもGNDに接続しないとデータ表示されません。

step
プログラミング

開発環境はArduinoを使いました。

ソースはこちらを参照しM5Stack用に加工しました。

CCS811からのセンサーデータはM5Stackのディスプレイで表示もできますが、シリアルでも表示可能にしています。

M5Stack用に追記したのは赤字にしました。

ソース

[code]
#include<M5Stack.h>
#include <Wire.h>

#include <CCS811.h>

/*
* IIC address default 0x5A, the address becomes 0x5B if the ADDR_SEL is soldered.
*/
//CCS811 sensor(&Wire, /*IIC_ADDRESS=*/0x5A);
CCS811 sensor;

void setup(void)
{
M5.begin();

Serial.begin(115200);
/*Wait for the chip to be initialized completely, and then exit*/
while(sensor.begin() != 0){
Serial.println("failed to init chip, please check if the chip connection is fine");
delay(1000);
}
/**
* @brief Set measurement cycle
* @param cycle:in typedef enum{
* eClosed, //Idle (Measurements are disabled in this mode)
* eCycle_1s, //Constant power mode, IAQ measurement every second
* eCycle_10s, //Pulse heating mode IAQ measurement every 10 seconds
* eCycle_60s, //Low power pulse heating mode IAQ measurement every 60 seconds
* eCycle_250ms //Constant power mode, sensor measurement every 250ms
* }eCycle_t;
*/
sensor.setMeasCycle(sensor.eCycle_250ms);
}
void loop() {
delay(1000);
if(sensor.checkDataReady() == true){
Serial.print("CO2: ");
Serial.print(sensor.getCO2PPM());
Serial.print("ppm, TVOC: ");
Serial.print(sensor.getTVOCPPB());
Serial.println("ppb");

M5.Lcd.clear();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setBrightness(10);
M5.Lcd.setTextSize(4);
M5.Lcd.setCursor(30,10);
M5.Lcd.println("CO2 Monitor");
M5.Lcd.setTextSize(6);
M5.Lcd.setCursor(60,100);
M5.Lcd.print(sensor.getCO2PPM());
M5.Lcd.println("ppm");
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(30,200);
M5.Lcd.println("https://hecaton.tokyo");

} else {
Serial.println("Data is not ready!");
}
/*!
* @brief Set baseline
* @param get from getBaseline.ino
*/
sensor.writeBaseLine(0x847B);
//delay cannot be less than measurement cycle
//delay(1000);
}
[/code]

step
実測!!

さあ、コンパイルしてM5Stackに書き込み完了しましたので早速実測です。

実行当初は初期値の400ppmですが、センサーが安定してくるといつもテレワークをしている部屋は1500ppm程度ありますね。

ベンダーは異なりますが、SwitchScienceさんのページで確認すると安定するまで時間がかかりますので、あとは気長にデータを待ちましょう。

メモ

実使用前に48時間のエージングと、20分のコンディショニングの時間が推奨されています(センサがウォームアップして、有効なデータを出力するまでに20分かかります)

シリアルデータはこちら。

センサーの側で消毒液のスプレーを使って机を拭いていたら10,000ppmまでいってびびりました。

step
参考
Big sur対応

今回なんとか計測出来たものの、道のりは長かった・・・

実は最初M1チップのMac MiniのArduino環境で実験していたのですが、これが難航して・・・

まず定番の「Hellow World」をM5Stackに出力するだけでも、コンパイルERR祭り・・・

「exit status 255〜途中省略〜arduino-builderが255を返しました。
ボードM5Stack-Core-ESP32に対するコンパイル時にエラーが発生しました。」

まじか!!

いろいろググったあげくどうやらOSBig Surの仕様」らしい・・・

で、実行権限がないとかで権限を付けるんですが、つけないとこんな感じのERRがでます。

「fork/exec /Users/hecaton-mac/Library/Arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py: permission denied
ボードM5Stack-Core-ESP32に対するコンパイル時にエラーが発生しました。」

ということでターミナルを立ち上げて・・・

chmod +x /Users/hecaton-mac/Library/Arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py

次にまたERRが残っているのでこれも対処。

他にもいろいろあり、ここで諦めました・・・ダメです・・・

Big surでの環境構築は私のレベルだとお手上げ・・・

ということで、MacBook AirがまだOS「Catalina」なので、こちらでやり直しました。

そしたら普通に難なくコンパイル出来て完了しました。

いや〜結構時間かかった。

やはり新しい環境はむずいな。

落ち着いたらBig surで再度環境構築してみます・・・

ということでまた!!

 

-CCS811(CO2濃度), Gadget, M5Stack
-, ,

© 2021 hecaton's