WRX micro:bitを車両で使う その34 環境モニターを作る(ログデータ記録編)
前回、少し疑問の残る形となったロギングモジュールの「gator:log」ですが、一応任意のタイミングでSDカードにデータ(文字)を記録出来そうです。今回はmicro:bit本体からLCDパネルモジュール、気温や気圧を測るBME280モジュール、二酸化炭素と有機化合物(※各相当値)を測るCCS811モジュール、時間を測るRTCモジュールの全てを合わせた形にして実際にログデータの記録を行ってみます。
RTCモジュール、ロギングモジュールについてはそれぞれ下記の記事を見て下さい。
BME280とCCS811モジュール、LCDパネルを加えた形までの内容は3つ前の以下の記事にて。
配線
micro:bitにBME280モジュールとCCS811モジュール、LCDパネルを加えた形は3つ前の記事で行っています。今回はこれに前々回のRTCモジュールと、前回のロギングモジュールを加えます。
RTCモジュールは他のモジュールと同様にI2C通信なので追加も簡単ですが、ロギングモジュールだけはシリアル通信で、接続する端子も指定されています。シリアル通信以外にも「RST(リセット)」の接続も必要です。またLCDパネルの電源だけは5Vになっています。回路図内の118や90といった数値はそれぞれのI2C通信におけるアドレスです(ただし製品による)。
とりあえずの接続なので非常に見た目の悪い形になってしまいました。今後も使い続けるのであれば、ハード面は1から考える必要がありますが、まずはこの形でこれまで個別に作って来たプログラムを1つにまとめます。
プログラム
先に書いておきますが、現状(2021年1月)ではRTCモジュール(SparkFun gator:RTC)用に公開されているmicro:bitの拡張機能が、最新のMicrosot MakeCodeではコンパイルエラーとなってしまいます。従って上記のプログラムはMicrosot MakeCodeの旧バージョン(v2)で作成しています。
現状では旧バージョンで作成する事が必須条件なので、逆にRTCモジュール以外のモジュール(拡張機能)が旧バージョンで動作するのか心配でしたが、BME280やCCS811、ロギングモジュールについては最新と旧バージョンのどちらでも動作しました。しかしLCDパネルで利用している拡張機能に問題が出てしまいました。
プログラムの内容、結果については記事最後で。
LCD2004
使用しているLCDパネルはI2C通信モジュールが付いた、RaspberryPiやArduino用の汎用品です。micro:bitでも検索すれば、LCD1602(16×2)やLCD2004(20×4)で利用出来る拡張機能があります。ただしLCD1602を基本としてLCD2004はあくまで「互換」を謳う拡張機能が多く、その中でもMakerbit用の拡張機能(GitHub)が唯一満足に利用出来ていました。
しかしMicrosot MakeCodeの旧バージョン(v2)では上記の様に、拡張機能を追加してmicro:bitへの転送やプログラムの保存を行うとエラーとなってしまいます。仕方が無いので、このLCDパネル(2004)を購入した時に試した拡張機能(GitHub)が動作したので、これを利用します。ただし私の場合はこの拡張機能では1行目の16文字目から20文字目が表示されないので、これを考慮してパネル表示を考えています。
ロギングモジュールの注意点
プログラムの作成においては、前回で少々疑問点が残るロギングモジュール(SparkFun gator:log)でしたが、今回も不可解な現象に悩みました。
initializeブロック
ロギングモジュール(以下、モジュール)を初期化する「initialize gator:log」のブロックが、Microsot MakeCodeの「最初だけ」内で動作せず、以降プログラムが進みませんでした。メーカーサイトのサンプルプログラムでは問題無かったのですが、micro:bitのボタンを押す事で初期化を行う形にすると動作します。仕方が無いのでモジュールはA+Bボタンで別途初期化する事にしました。
記録出来ない文字列
各データはその後の利用を考えてカンマ区切りにしていますが、ロギング開始時の先頭に項目名を付けようとしました。データは「記録時の時間・気温・露点・湿度・気圧・有機化合物・二酸化炭素」の順としていて、項目として「Time,Temp,Dewp,Humid,Press,TVOC,eCO2」という文字列を「write line」ブロックで記録しようとしましたが、この内容だけ全く記録されなかったり一部分だけだったり。長すぎなのかとも思いましたが、各データは取りこぼし無く記録出来ています。またメーカーサイトのサンプルプログラムを試した時は、もっと長い文字列でも実際に記録出来ました。
サンプルプログラムで問題が無かった時はMicrosot MakeCodeは最新版であり、今回は旧バージョン(v2)なので、initializeブロックと合わせてここに問題があるのかもしれません。
デフォルトのログファイル
記録先として「LOG001.txt」というファイルを指定していますが、仕様ではファイルを指定しない場合は「LOG00000.txt」というデフォルトに記録される事になっています。ファイルを指定していてもデフォルトも作成される様ですが、私の場合はなぜかデフォルトが「65291」から始まり、モジュールを初期化する毎に65292、65293と増えていきます。
モジュールの初期化とはSDカードの初期化では無いので、フォーマットやデータの削除はありません。そう考えると、都度デフォルトのログファイルが新規作成される事は正しく、逆にファイルは指定しない方が良い気もします。
ファイルを指定しない場合は上記の様にデフォルトの最新に記録されました。単にファイル名の数値だけの問題なので影響は無さそうです。
設定ファイル(config.txt)
SDカードにはデフォルトの記録先となるファイル以外に、モジュールの設定ファイルが作成されます(config.txt)。このファイルの内容は変更しないようにとメーカーサイトに記載されています。変更してしまうとモジュールがロックアウト(アクセス不可?)になる様です。その場合はメーカーサイトに正しい内容が記載されています。
全く新しいSDカードを使用する、またはフォーマットしたSDカードでこの設定ファイルが無い場合は、新たに作成されます。ただし初回は上記の様にST1(青)LEDが点灯します。一度電源を切って再び投入するとLEDは消えたままで、設定ファイルとデフォルトの記録先ファイルが作成されていました。
SDカードの速度
これは直接ロギングモジュールに関係しませんが、やはりSDカードの書き込み速度が遅いと記録データの取りこぼしがありました。
最初は上記の余っていた2GBで、速度の記載が一切無いmicroSDカードを使用していました。先の記録されない文字列の時に実は各データでも取りこぼしがあったのですが、SDカードの書き込み速度を疑って他のmicroSDカードにした所、各データの取りこぼしは無くなりました。ただし記録されない文字列の状況は変わりませんでした。
結果
今回のプログラムでは1分毎に各データを記録しています。電源を入れるとLCDパネルに各測定値が表示されますが、この時点ではログデータの記録はしていません。記録の手順は最初に「A+Bボタン」を押してロギングモジュールを初期化し、Aボタンで記録を開始します。区切りとして開始時の時間を記録する様にしています(start at~)。1分毎の記録時にはmicro:bitのLEDにチェックマークが表示されます。記録終了はBボタンです。
時間は設定が面倒なのでリアルな日時にはなっていません(現状、RTCモジュールの充電池が充電されない問題もあり)。RTCモジュールで日時が保持出来ていれば、「最初だけ」での日時設定ブロックは必要ありません。
数時間室内で放置してみましたが、上記の様にデータはしっかりとSDカードに記録されていました。データの欠けや取りこぼしも無さそうですが、LCDパネルの影響でデータによっては3秒くらいまで遅れがあります(後述)。
カンマ区切りにしているので、これをエクセルでCSV形式で読み込んでグラフ化してみました。各データにあまり変化が無くて面白味はありませんが、思いのほかに分かり易いグラフが作成出来ました。
欠点
大きな問題ではありませんが、欠点としてLCDパネルの表示(書き換え)に時間が掛かり、測定数値や時刻の表示は2秒毎くらいになってしまいます。従ってログデータの記録も最短で2秒間隔程度です。今回の様な環境モニターであれば1分間隔でも十分かと思いますが、これまでmicro:bitで行ってきた車両OBD2のデータ取得で、エンジン回転数などのデータロギングには厳しそうです。LCDパネルを使用しなければもう少し早く出来そうなので、いずれ試してみたいとも思っています。
その他
とりあえず環境モニターとして室内の測定とデータロギングは出来ました。二酸化炭素量はもう少し変動すると思っていたのですが、意外に安定していました(数値の大きさの正確性は不明ですが)。次は車内で使ってみて、閉め切った車内やエアコンの外気/内気で、二酸化炭素量がどのくらい変化するのかを見てみたいと思っています。
「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教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。