マイクロビットを使ってみる 〜各処理にかかる時間

マイクロビットではさまざまな処理を行うことができますが、それぞれの処理を行うにはある程度の時間がかかります。
時間のかかる処理を何回も繰り返して行うと、その時間もだんだんと無視できなくなり、すぐに反応してほしいプログラムなどでは所望の動作をしなくなる可能性もあります。

ここでは、マイクロビットで実施できる主な処理について、かかる時間を実際に測定してみたいと思います。
今回は、私がよく使う「センサ値の読み取り」「入出力端子への入力/出力」「LEDの点灯/消灯」「無線の送受信」の処理時間を調べます。


「V1.5」「V2.2」の2台のマイクロビットで測定することにします。
測定に使うプログラムは以下のとおりです。

Aボタンを押すと、「処理」関数を8回実行し、それぞれでかかった時間を配列に格納します。
8回の実行が完了したら、格納しておいた処理時間をシリアル通信で書き出します。

ちなみに、「処理」関数の中が空のとき、処理時間は「V1.5」「V2.2」ともに「0ms」でした。

センサ値の読み取り

「処理」関数の内容は以下のとおりです。

結果は以下のとおりです。「V1.5」「V2.2」ともに、ほとんど時間はかかっていません。

処理内容V1.5V2.2
センサ値の読み取り0〜2ms0ms

入出力端子への入力/出力

入出力端子へ出力する場合の「処理」関数の内容は以下のとおりです。

入出力端子から入力する場合の「処理」関数の内容は以下のとおりです。

結果は以下のとおりです。「V1.5」「V2.2」ともに、ほとんど時間はかかっていません。

処理内容V1.5V2.2
入出力端子へ出力0〜1ms0ms
入出力端子から入力0〜1ms0〜1ms

LEDの点灯/消灯

アイコンを表示する場合の「処理」関数の内容は以下のとおりです。

文字列を表示する場合の「処理」関数の内容は以下のとおりです。

矢印を表示する場合の「処理」関数の内容は以下のとおりです。

座標を指定して点灯させる場合の「処理」関数の内容は以下のとおりです。

棒グラフを表示する場合の「処理」関数の内容は以下のとおりです。

LED画面に自由に表示する場合の「処理」関数の内容は以下のとおりです。

結果は以下のとおりです。処理内容によっては非常に時間がかかっています。

処理内容V1.5V2.2
アイコンを表示598〜599ms600ms
文字列を表示748〜749ms752ms
矢印を表示598〜599ms600ms
座標を指定して点灯0〜1ms0ms
棒グラフを表示2〜9ms0〜3ms
LED画面に表示401〜402ms400ms
表示を消す0〜1ms0ms

無線の送受信

無線で数値を送信する場合の「処理」関数の内容は以下のとおりです。

無線で「KEYWORD=数値」を送信する場合の「処理」関数の内容は以下のとおりです。

無線で文字列を送信する場合の「処理」関数の内容は以下のとおりです。

無線で文字列を受信するプログラムは以下のようにしました。
無線で受信してから時間の計測を開始しているため、これでは所望の時間を測定できていないような気もしますが、よい方法を思いつかなかったので、まずはこれで調査することとしました。

結果は以下のとおりです。「V1.5」「V2.2」ともに、ほとんど時間はかかっていません。

処理内容V1.5V2.2
無線で数値を送信0〜7ms0〜2ms
無線で「KEYWORD=数値」を送信1〜7ms0〜3ms
無線で文字列を送信1〜8ms0〜1ms
無線で文字列を受信0〜6ms0ms

まとめ

調査結果は以下のとおりです。

処理内容V1.5V2.2
処理なし0ms0ms
センサ値の読み取り0〜2ms0ms
入出力端子へ出力0〜1ms0ms
入出力端子から入力0〜1ms0〜1ms
アイコンを表示598〜599ms600ms
文字列を表示748〜749ms752ms
矢印を表示598〜599ms600ms
座標を指定して点灯0〜1ms0ms
棒グラフを表示2〜9ms0〜3ms
LED画面に表示401〜402ms400ms
表示を消す0〜1ms0ms
無線で数値を送信0〜7ms0〜2ms
無線で「KEYWORD=数値」を送信1〜7ms0〜3ms
無線で文字列を送信1〜8ms0〜1ms
無線で文字列を受信0〜6ms0ms

主な処理のうち、処理時間が無視できないぐらい大きいのは「LED表示」に関するもののみでした。
その中でも、表示に時間がかかる処理とかからない処理があるので、処理時間が気になるような用途では使用するブロックを工夫すればよいようです(「点灯(座標指定)」や「棒グラフを表示する」は処理時間が小さい)。

確認

今回の調査をしようと思ったそもそものきっかけは、「無線通信には時間がかかるのではないか?」というものでした。
2台のマイクロビットを無線の送信機と受信機にして、ロボカーを操縦するような使い方がありますが、無線通信に時間がかかってしまうと操作が間に合わなくなってしまい、特に高速で走るロボカーの場合は、所望のとおりに操作できないことになります。

先ほどまでの調査の結果より、無線の送受信にはほとんど時間がかからないことが分かりましたが、ここではより実使用に近い状態で時間を測定してみたいと思います。

送信機用のプログラムは以下のとおりです。

Aボタンを押すと、無線で数値を25回送信します。その際、1回送信するたびに10ms待ちます。つまり、一連の処理には「250ms+α」の時間がかかります。
一連の処理が終わると、かかった時間をLED画面に表示します。

受信機用のプログラムは以下のとおりです。

無線で数値を受信すると、受信した値に応じた座標のLEDを点灯させます。
数値を25回受信したら、全ての受信にかかった時間をLEDに表示します。

上記のプログラムを数回実行した結果、送信にかかった時間は「298〜305ms」、受信にかかった時間は「277〜313ms」でした。
待ち時間(250ms)を除くと、処理にかかった時間は数十ms、無線送受信1回あたりの処理時間は数msという結果になり、先ほどの調査結果が妥当であることが確認できました。


なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。


このサイトで書いている、マイクロビットに関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のマイクロビット記事にも興味のある方は「さとやまノート」をご覧ください。