WRX micro:bitを車両で使う その30 環境モニターを作る(二酸化炭素・有機化合物編)
前回は「BME280」が搭載された気温や気圧、湿度を測定出来るモジュールを、micro:bitのI2C通信で使用してみました。どの程度正確なのかは分かりませんが、気温と湿度が表示出来る時計と比べても大きな違いは無さそうでした。今回はさらに二酸化炭素濃度相当値(eCO2)を測定出来る「CCS811」を搭載したモジュールを使用してみます。
現在(2021年1月)は冬季ですが、室内の気温と湿度がとても気になります。加えて新型コロナの影響もあり、部屋の換気がますます重要となっています。二酸化炭素の濃度は換気の目安になる他、眠気に襲われたり頭痛にも繋がる恐れがあると言われている事からも、私の場合は車を運転している時の車内の空気も気になっています。また先のBME280と合わせて、昨今の夏季における気温の高さによる熱中症や不快指数の算出にも利用できるかもしれません。ちなみに二酸化炭素濃度相当値(eCO2)とはTVOC値(総揮発性有機化合物)から算出され、直接CO2を検出しているものではないとなっています。
前回のBME280については上記記事にて。
CCS811
CCS811はオーストラリアのAMS社の製品となっていて、二酸化炭素濃度相当値(eCO2)と総揮発性有機化合物(TVOC)を測定する事が出来ます。BME280同様にRaspberryPiやArduino用として幾つかモジュールが販売されていますが、micro:bit用ではSparkFunのブレイクアウトボードを基本とするgatorシリーズで、「gator:environment」があります。これにはCCS811に加えBME280も搭載されているので、ハード面ではかなり手間が省けます。
またmicro:bit用に拡張機能もSparkFunから提供されている(GitHub)ので、ソフト面もあまり難しく考えなくても利用出来そうです。※ただし現在、この拡張機能は新バージョンのmicro:bit(v2.0)との互換性の問題が報告されています。
加えて新バージョンのI2C通信にはバグがある様で、上記記事で書いています。
SparkFun Gator-Environment – Gator:Bit Accessory Board with CCS811 and BME280 sensors
gator:environmentについては、国内では私が新バージョンのmicro:bit(v2.0)を購入したスイッチサイエンスで販売していますが、購入を考えた時には在庫がありませんでした。従ってBME280とCCS811のモジュールを別々に購入する事にしました。
購入した物はこれまでmicro:bit用パーツとして色々と購入してきたkeyestudio製で、CCS811を搭載しているモジュール(KS0457)です。BME280と合わせてAmazonから購入しました。
基盤の大きさは約30×20mm。電源(VCC・GND)やI2C通信(SCL・SDA)以外にINT・WAKE・RSTのヘッダーピンがありますが、keyestudioの製品wikiページではWAKEはGNDに繋ぐと測定開始、RSTは同じくGNDに繋ぐとセンサーのリセット、INTは測定完了またはしきい値を超えた場合の出力となっています。Arduinoでの接続例がありますが、単純に連続的に測定値を読み取るだけであればWAKEをGNDに繋ぐだけで良さそうです。アドレスはデフォルトで「0x5A」、ADDR_SELを半田付けすると「0x5B」とあります。
注意点
AMS社のCCS811データシートではCCS811を初めて使用する場合は、最初にエージングの為の48時間の連続稼働と、以降安定的なデータを得る為に電源投入後は20分の慣らしが必要と記載されています。
配線
配線はBME280と同様、I2C通信なのでmicro:bitの端子19と20を使用します。加えてWAKEをGNDに接続しますが、電源については購入したBME280は3.3Vと5Vの両対応でしたが、keyestudioのKS0457は仕様として「5Vのみ」になっているので注意が必要です。
プログラム
とりあえずMicrosot MakeCodeのブロックエディタから、CCS811用の拡張機能があるか検索してみましたが、現状ではありませんでした。次にGitHubで何か無いかと探した所、AirQuality(GitHub)というCCS811用の拡張機能がありました。他にも同じ名称の物(GitHub)がありますが、先の物はこちらをベースにしていると記載されています。
早速AirQuality(GitHub)のアドレスをMicrosot MakeCodeの拡張機能の検索欄に入力して、表示された拡張機能をクリックします。
追加されるブロックは上記です。同じGitHub内のページで使い方をやり取りしたスレッドがあるので、これを参考にプログラムを作ります(全く同じですが)。
ただしこのスレッドでは質問者さんはeCO2が「4605」、TVOCが「65021」から変化しないという報告で終わってしまっています。使用しているCCS811のモジュールが違うので何とも言えませんが、少し不安です。
私の環境で試した所、eCO2は「4349」、TVOCは「65021」のまま数値に変化が無く、質問者さんと同じ状況になりました。最初のDevice Statusは「16」でしたが、このブロックを「ずっと」の方に入れてみると繰り返しの表示で2回目以降は「17」になりました。しかしこの意味を理解するには結局CCS811のデータシートを読まなくてはいけないので、かなり面倒な事に・・・。
代替を探す
CCS811を使いだしてから48時間もたっていないので、エージングに原因があるのかとも思いましたが、ここから48時間も待っていられないので色々と原因を検索しましたが明確には見つからず。ベースとなった側の拡張機能も、問題点として先に1度Arduino IDEでプログラムを転送し、その後MakeCodeで転送すると機能するとあるので非常に面倒。他に何か無いかと探して見つけたのがこちら(GitHub)です。XinaBoxというメーカーが販売している、同じくCCS811を搭載したモジュール用の拡張機能です。
早速GitHubのアドレスから拡張機能を追加します。
上記の様なブロックが追加されました。アドレスのブロックがオン/オフなのですが、どうやらオンで「0x5A」、オフで「0x5B」の指定になる様です。
とりあえず上記のプログラムを作って改めてCCS811のモジュールを試しました。電源投入後はeCO2とTVOCとも「0」でしたが、しばらくするとeCO2は「400」、TVOCが「0」になりました。しかしその後は一向に変化がありません。何か惜しい気もするのですが、micro:bitで利用出来る拡張機能は他には無さそうだし、結局自分でプログラムを書く必要があるのかと諦めかけました。
3.3V?
他に何か出来る事は無いかと思い、気が付いたのは電源です。keyestudioの仕様では5Vのみになっていますが、低い電圧なので試しに3.3V側に繋いでみる事にしました。上記は電源を5Vに繋いでいます。矢印の縦3つのヘッダーピンが5Vになっています。
これをmicro:bitの端子0~20番に並ぶ3.3V側に繋ぐと、最初は同様にeCO2とTVOCともに「0」ですが、しばらくするとeCO2とTVOCがそれぞれ変化する値が表示される様になりました。モジュールに息を掛けると大きく変化もします。どうやらちゃんと数値は取得出来る様になった様子ですが、どういう事なのかさっぱりです。keyestudioの仕様が違うにしても、Arduino等で5Vで使用している人も多いはず・・・。ブレイクアウトボードの5Vが少し高めに出ている?そんなにシビアなものなのか?それにしても仕様外の3.3Vで動てるし。
ちなみに、電源が原因だとすれば先のAirQuality側の拡張機能もちゃんと機能するのでは?と思い試しましたが、こちらは5Vと3.3Vで違いはありませんでした。
その他
とりあえず変化する数値が表示出来たのでエージングを行っています。今現在は一晩経過した状態ですが、最初はeCO2は2000、TVOCは1000を超えたりしましたが、私が活動しなくなった為か深夜にはeCO2は400台、TVOCは0になる時もあり、朝になって起床するとまた徐々に上がってeCO2は1000付近、TVOCは100付近になっています。数値の大きさはまだ分かりませんが、変化だけを見るとちゃんと機能している気がします。
次回はBME280やLCDパネルと合わせた形にしたいと思っています。
※micro:bit用のモジュールはメーカーから拡張機能も提供されている場合がほとんどですが、RaspberryPiやArduino用の汎用モジュールは利用出来る拡張機能が無い場合もあります。汎用モジュールを購入する場合は先に利用出来そうな拡張機能を探した方が良いと思います。最終的には実際に試してみないとわかりませんが・・・。
「micro:bit」関連記事
以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。
クリックで開きます
- WRX micro:bitを車両で使う その1 micro:bitの購入
- WRX micro:bitを車両で使う その2 Microsot MakeCodeとスマホ用アプリ
- WRX micro:bitを車両で使う その3 micro:bitの仕様と購入したブレイクアウトボード
- WRX micro:bitを車両で使う その4 本体ファームウェアの更新とWebUSB
- WRX micro:bitを車両で使う その5 無線機能の利用
- WRX micro:bitを車両で使う その6 方位センサーの利用
- WRX micro:bitを車両で使う その7 加速度センサーの利用
- WRX micro:bitを車両で使う その8 micro:bitからSIドライブのモード切替
- WRX micro:bitを車両で使う その9 サーボモーターの利用(準備編)
- WRX micro:bitを車両で使う その10 サーボモーターの利用(動作編)
- WRX micro:bitを車両で使う その11 可動式雲台を作る(2軸編)
- WRX micro:bitを車両で使う その12 可動式雲台を作る(1軸編)
- WRX micro:bitを車両で使う その13 連続回転サーボモーターの利用
- WRX micro:bitを車両で使う その14 Bluetoothでスマホから操作(データ受信)を行う
- WRX micro:bitを車両で使う その15 LCDパネル(I2C LCD1602・2004)の利用
- WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う
- WRX micro:bitを車両で使う その17 光センサーと温度センサーの利用
- WRX micro:bitを車両で使う その18 LEDのフォントとスクロールスピードを変える
- WRX micro:bitを車両で使う その19 ELM327の車両との通信を確認する
- WRX micro:bitを車両で使う その20 アスキーコード16進数から数値10進数への変換
- WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
- WRX micro:bitを車両で使う その22 7セグメントLEDの利用(TM1637ドライバ)
- WRX micro:bitを車両で使う その23 DCモーターを制御する(TB6612FNG・DRV8833)
- WRX micro:bitを車両で使う その24 ステッピングモーターを制御する(ULN2003ドライバ)
- WRX micro:bitを車両で使う その25 micro:bit バージョン2.0を購入(2021年12月 v2.2アナウンスあり)
- WRX micro:bitを車両で使う その26 バージョン2.0で追加されたMakeCodeブロック
- WRX micro:bitを車両で使う その27 バージョン2.0の初期状態と追加された機能
- WRX micro:bitを車両で使う その28 新バージョン(v2.0)のI2C通信
- WRX micro:bitを車両で使う その29 環境モニターを作る(気温・気圧・湿度編)
- WRX micro:bitを車両で使う その30 環境モニターを作る(二酸化炭素・有機化合物編)
- WRX micro:bitを車両で使う その31 環境モニターを作る(LCD表示・動作確認編)
- WRX micro:bitを車両で使う その32 環境モニターを作る(RTCモジュール追加編)
- WRX micro:bitを車両で使う その33 環境モニターを作る(ロギングモジュール追加編)
- WRX micro:bitを車両で使う その34 環境モニターを作る(ログデータ記録編)
- WRX micro:bitを車両で使う その35 車内のCO2濃度と換気について
- WRX micro:bitを車両で使う その36 新バージョン(v2.0)でのI2C通信の問題解決
- WRX micro:bitを車両で使う その37 Microsoft MakeCodeの新バージョン(v4)と新機能データロガー
- WRX micro:bitを車両で使う その38 mp3音声ファイルの再生(DFPlayer Mini)
- WRX micro:bitを車両で使う その39 車速パルス信号から速度を計算する
- WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る
- WRX micro:bitを車両で使う その41 フルカラーLEDマトリックス(WS2812B)で時計を作る
- WRX micro:bitを車両で使う その42 フルカラーLEDマトリックス(WS2812B)でピクセルアートアニメーションを作る
「micro:bit+プラレール」も始めました。
その他
FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。
注記
-
- このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
- 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
- micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。