WRX micro:bitを車両で使う その31 環境モニターを作る(LCD表示・動作確認編)

2021年1月18日micro:bit,社外部品・DIY

前回、前々回とmicro:bitでBME280モジュールによる気温や気圧の取得、CCS811モジュールによる二酸化炭素濃度相当値(eCO2)の取得を行いました。今回は上記2つのモジュールを合わせ、さらにLCDパネルを使用して環境モニターとしての一応の完成形にしてみます。また測定したデータのログの保存についても考えてみます。

スポンサーリンク

前回と前々回で気温等のデータ取得は出来ていて、LCDパネルモジュールも以前に使用しています。各モジュールは全てI2C通信を使用していますが、I2Cはバス通信なので複数のモジュールと同時に通信が可能です。基本的にはこれまでのプログラムを1つにまとめ、正しく配線を行えば全てのデータをLCDパネルに表示出来るはずなので、それほど迷う事は無いと思います。

BME280とCCS811、LCDパネルについてはそれぞれ下記を見て下さい。

配線

micro:bit(ブレイクアウトボード)と各モジュールは上記の様に配線します。CCS811の電源は本来(購入したkeyestudio Ks0457の仕様)は5Vなのですが、私の物では5Vでは取得する数値が変化せず、3.3Vに繋いだところ変化したという謎の経緯があります。またCCS811のWAKEはGNDに繋いで、常時測定を行う様にしています。LCDパネルは同じくkeyestudioのKs0062(LCD2004)を使用していますが、既にI2C用のインターフェイスが用意されている物です。各モジュールはI2Cのアドレスがあるので、「最初だけ」で正しく設定します。

プログラム(BME280+CCS811+LCD)

 Microsot MakeCodで開く

※上記プログラムでLCDパネルのI2Cアドレスが「27」になっていますが、正しくは「39」です。16進数にすると「0x27」になります。ただしI2C通信用のICが「PFC8574T」は39(0x27)、「PFC8574AT」は63(0x3f)になります。

これまでのプログラムを1つにまとめ、結果をLCDパネルに表示する様にしました。おまけでAボタンを押す事でmicro:bitのLEDにeCO2の値によって顔マークの表示とブザー音を付けています。Bボタンで解除です。ブザー音については使用しているブレイクアウトボードにスピーカーが付いています。

eCO2が500以下では笑顔で無音ですが、eCO2が500を超えると「悲しい顔」で真ん中のドの音、1000を超えると「困り顔」で下のドの音となります。ブザーは連続音ではなく1秒間隔程度の断続音です。

CCS811の「eCO2」と「TVOC」を変数に入れていますが、LCDパネルへの表示時とその後の比較で何度も数値を使うので、その間にCCS811の数値が変わったり、都度CCS811へ読みにいってしまう?と思ったので、繰り返しの1サイクル中で数値を固定する事にしました(TVOCは結局比較に使っていませんが)。変数でなくても問題は無いかもしれません。

これでおおよその望んでいた形での環境モニターが出来ました。頻繁に更新する必要は無いので、毎回0.5秒の待ち時間を入れています。※データをロギングしたくなったので、さらにモジュールを追加購入しています。詳しくは以降で。

プログラム(BME280+CCS811+LCD+シリアル通信)

環境モニターではログの取得も重要な要素になってきます。ログを取得して何かしようという考えは今の所ありませんが、その方法だけ考えてみます。

micro:bitはUSBでPCと接続してシリアル通信機能を利用する事で、PCと文字や数値を簡単に送受信する事が出来ます。PCではターミナルアプリ等を使用しますが、シリアル通信については上記の記事を見て下さい。

Microsot MakeCodで開く

※上記のプログラムもLCDパネルのI2Cアドレスが「27」になっていますが、正しくは「39」です。

先のプログラムからmicro:bit本体のアイコン表示等を無くし、毎回取得した数値をシリアル通信でPCに送信します。micro:bitのシリアル通信機能はデフォルトでUSBを使用する形になっているので、わずかなブロックで送信出来ます。上記プログラムでは気温と湿度、二酸化炭素濃度相当値を送信しています。PC側で受信する際の見た目を整える為に、各文字(Temp.等)の最後にスペースを1つ、さらに各項目に間を開ける為にスペースだけのブロックを入れています。また一番最後で「1行書き出す」を付ける事で、PC側での表示時に改行されます。

LCDパネルの表示は変わっていません(この時のDewp.の数値は間違えています、表示する変数が気圧だった)。Aボタンを押すとシリアル通信が開始され、LEDにチェックマークを表示します。Bボタンで通信を停止します。通信間隔は先の0.5秒では短いので、さらに0.5秒足して1秒にしています。

PC側では「Tera Term(窓の杜)」を使用しています。通信設定でUSBシリアルデバイスを選択し、シリアルポートの設定で通信速度を115200にすると上記の様にmicro:bitからの文字と数値を受信して表示出来ました。Tera Termはログ保存やタイムスタンプの付加なども出来る様なので(試していませんが)、保存後の利用したい形式になる様にTera Termの設定やmicro:bitから送信する内容を決めれば良いと思います。

またmicro:bit用のモジュールではSparkFunのgatorシリーズで、microSDカードスロットを搭載したロギングツール「gator:log(スイッチサイエンス)」もあります。タイムスタンプを付加するには別途RTCモジュールも必要そうですが、価格も安いので購入してみようかと迷っています。

⇒その後、RTCモジュールと合わせて購入しました。まだ届いていませんが、今の構成にさらに追加してみたいと思います。いずれ記事にします。

二酸化炭素濃度相当値(eCO2)について

CCS811のeCO2はTVOC値から算出される相当値なので、二酸化炭素を直接測定している訳ではありませんが、上記の内閣官房の「COVID-19 AI・シミュレーションプロジェクト」サイトで「室内CO2濃度を換気の指標として利用する研究」が掲載されています。これによると、換気の目安は建築基準法で1000ppm以下に抑える事が良いとされています。サイトの一番下に分かり易い図があるのですが外気は410ppm、800~1000ppmは健康的なレベル、1000を超えて1500ppmになると眠気や不快感があるともなっています。

従って最初のプログラムでは500以上でアイコン表示とブザー音を付けましたが、ちょっと厳し過ぎになっています。

その他

前回のCCS811で少し手間取りましたが、割と簡単にmicro:bitで環境モニターが出来ました。利用出来る拡張機能(ライブラリ)さえ見つかれば、小学生でも簡単に出来そうです。またここからさらに何か機能を付けても良いと思います。

またこの環境モニターを車内に置き、窓を閉め切った環境やエアコンの外気/内気で二酸化炭素濃度相当値がどの程度になるのかを見てみたいと思っています。いずれ記事に出来れば良いのですが。

※micro:bit用のモジュールはメーカーから拡張機能も提供されている場合がほとんどですが、RaspberryPiやArduino用の汎用モジュールは利用出来る拡張機能が無い場合もあります。汎用モジュールを購入する場合は先に利用出来そうな拡張機能を探した方が良いと思います。最終的には実際に試してみないとわかりませんが・・・。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。

その他

FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。