micro:bitをセンサのロガーにしてみる(Version2限定)電源断でのデータの永続性も保持可能?!

micro:bitのことを検索していて、ちょっとだけ気になる記事を見つけました。

【参考】 microbit.org

micro:bit公式サイトでData logging with the micro:bitという内容になります。micro:bitを使用したデータロギングということなのですが、通信としてはBluetoothやUSBを使用したシリアル通信しかデフォルトではないのかなと思っていたのでそのような話なんだと思ったら、よく読むと少し違っていました。

Version2用(以降Ver2)の機能に限定されるようなのですが、以下の様に記載がありました。

It allows you to record data on your micro:bit which is kept even when the micro:bit is disconnected from a power source.(micro:bitが電源から切断されている場合でも保持されるmicro:bitにデータを記録できます)

電源がついていなくてもデータが記録される?と一瞬思ったのですが、そう意味ではなく保持ができるという内容になります。永続的なストレージとしてデータを保持できますといっていいでしょう。

Ver2限定というのは多分メモリ量に依存しているのかなと予想しています。

とりあえず実験をしてみます。

micro:bit Ver2をロガーにしてみる

micro:bitは光、温度、磁気、加速度、音(Ver2から)といったセンサーが搭載されています。これらのセンサーのデータを記録しておき、あとから、データを活用できれば、そのデータを線グラフまたは棒グラフにするといった授業での活用ができますね。

ただ、通信手段に関しては限られてしまっているので、もしこれを行おうとすると、センサーの計測したデータを受信する手段が必要になってしまいそうです。ですが、今回はそういうことしなくても、大丈夫のようです。あと、電源が切れても保持してくれるとのことです。モバイルバッテリで動作させても大丈夫ってことですね~。

データのロギング

データを保存するには以下のようなことも考えておく必要がありそうです。限られたメモリに記録していくのでいっぱいになってしまった場合の対応は必須なのかもしれません。

  • どのようなデータを取得するか
  • データ取得の頻度
  • 取得中のLED表示(動作状態)
  • 開始、停止の制御方法
  • データログがいっぱいになったときにどうするか

プログラミングの準備

micro:bitを使ってデータロガーを作るプログラミングをして見ようと思います。データを不揮発的に保持するためにはデフォルトのブロックではなく拡張機能のブロックを使用したプログラミングが必要なので、その準備を行います。

makecode.microbit.org

まず、上記のリンクからMakeCodeエディターを開き、新しいプロジェクトのボタンをクリックします。

f:id:ueponx:20211031142915p:plain

今回のプロジェクトはデータロガーという名前に設定をしておきます。名前の入力が終わったら、【作成】ボタンをクリックします。

f:id:ueponx:20211031142922p:plain

すると、ブロックエディタが表示されます。

f:id:ueponx:20211031142959p:plain

ブロックエディタが開いたら、画面左側のパレットの【高度なブロック】のプルダウンをクリックし、

f:id:ueponx:20211031143358p:plain

更に【拡張機能】をクリックし、拡張機能の検索画面に遷移します。

f:id:ueponx:20211031143447p:plain

f:id:ueponx:20211031143928p:plain

続いて、検索ボックスにdataloggerを入力して検索を行うと、以下のように検索結果が表示されます。拡張機能はデフォルトでは表示されないので、検索を行ってください。 その表示された拡張機能をクリックしてプロジェクトに追加を行います。

f:id:ueponx:20211031144323p:plain

追加されるとパレットの表示にData Loggerが追加されます。

f:id:ueponx:20211031144513p:plain

これで準備完了です。

プログラミングを行う

データ取得するには2つの手順があります。

  • データのラベル設定
  • データの取得

データのラベル設定

まずは、取得データのにラベルを付けるます。ラベルを付けることで取得データが何を表しているかがわかりやすくなると思います。今回は、micro:bitのセンサーの中から温度と光のデータを取得・記録するので、そのラベルを付けておきます。

まず、パレットの中から先程準備をしていた【Data Logger】をクリックして、そのカテゴリーの中のset columsのブロックをクリックします。

f:id:ueponx:20211031150350p:plain

そして、【最初だけ】のブロックの中に入れて、

f:id:ueponx:20211031151057p:plain

ラベル数や名称を変更します。今回はデフォルト3つのラベル数を1つ減らし、名称にtemperaturelightを入力しました。

f:id:ueponx:20211031151104p:plain

データの取得

続いてはデータの取得(保存)ですが、手動パターンと自動パターンがありますが、基本的には同じブロックを使用します。

まず、パレットの中から【Data Logger】をクリックして、そのカテゴリの中のlog dataのブロックをクリックします。

f:id:ueponx:20211031152717p:plain

そして、このlog dataのブロックを、手動であればボタンAが押されたときなどの入力ブロックの中に入れ、自動(定期的)であればループブロックのタイマ的なものに入れることでデータの取得を行うことができます。

f:id:ueponx:20211031153136p:plain

あとはラベル名や取得するセンサの値(入力ブロックのカテゴリ)をブロックの中に入れれば準備は完了です。

f:id:ueponx:20211031153255p:plain

取得するだけでは、表示的な変化がないので、LED画面にハートマークアイコンをつけたりすることで、動作状態を確認できるようにするとわかりやすくなります。以下のように変数で動作中のフラグをつくれば簡単に処理ができます。

f:id:ueponx:20211031154315p:plain

格納データ領域がいっぱいになったときは?

データを取得して格納することは、保存領域がいっぱいになるまでという制限があります。その時は、パレットの中から【Data Logger】をクリックして、そのカテゴリの中のon log fullのブロックをクリックします。

f:id:ueponx:20211031154634p:plain

このブロックは保存領域がいっぱいになったときに動作するブロックになります。そこで先程使用した動作中のフラグを使用することでログの停止やLED画面で×アイコンを表示するなどを行うこともできます。

f:id:ueponx:20211031154806p:plain

今回のプログラム

今回テストしたプロブラムのブロックの全体像は以下のようになっています。

f:id:ueponx:20211031154939p:plain

プログラムを動作させて、センサのデータをロギングする

先程のプログラムをmicro:bitにダウンロードするとデータが保存されていくのですが、それを閲覧するにはmicro:bitをコンピューターに接続し、ストレージデバイスとして認識されたあと、MY_DATA.HTMというファイルが表示されます。この中にデータが格納されています。

f:id:ueponx:20211031203007p:plain

ファイルを開くとWebブラウザが起動しデータのログを確認することができます。ファイルを開くとログデータのRawデータのダウンロードや、クリップボードへのコピー、グラフ化などを行うことができます。(上部にあるボタンを使用します)

f:id:ueponx:20211031203119p:plain

グラフの様子

f:id:ueponx:20211031203124p:plain

クリップボードにコピーしてからExcelなどのスプレッドシートへの貼り付けも容易です。

f:id:ueponx:20211031203457p:plain

おまけ

今回のログ機能を使うとエミュレータでのテストボタンやコンソールをリアルタイムでグラフ化してくれる機能が追加されます。

f:id:ueponx:20211031203833p:plain

【コンソールを表示 シュミレーター】ボタンをクリックするとシュミレーターの値がリアルタイムで表示、グラフ化を行ってくれます。

f:id:ueponx:20211031204446p:plain

【コンソールを表示 デバイス】ボタンをクリックすると同様に接続しているデバイスのデータがリアルタイムで表示、グラフ化を行ってくれます。

f:id:ueponx:20211031204108p:plain

おわりに

今回はmicro:bit Ver2の機能を使ってロガーを作成するという内容でした。micro:bitはデフォルトで比較的豊富なセンサがあるのでこれらから得られるデータを収集するといったことが可能ですし、使いやすいブロックやUI、グラフ化などをしてくれる管理ページなどかなり便利なのかも。

これを使えば、小学校で行うグラフ化するような授業もできちゃうんだろうな~って感じで思っていました。百葉箱みたいなものを作ろうみたいな授業を行う学校もあるようですし。あと、この機能はpythonでもコード書けるようなので、もっと上の学年でも勉強になると思いますよ。

Version1では使えない機能のようですが、便利なので、そちらでも使えてもいいのにな~とか思いました(参照ページにはどうすればいいかの記載はありました)

/* -----codeの行番号----- */