PythonとMuで実況データロギング

Python と Mu で micro:bit センサーの実況データを可視化する

このガイドでは、micro:bit のセンサーからのデータを Python と Muエディタを使ってリアルタイムで表示する方法を説明します。

必要なもの

  • micro:bit を1つか2つ
  • Python エディタ Mu のバージョン 1.0.0 以上をインストールしたコンピュータ
  • バッテリーパック(オプション)
  • おもちゃのトラックか犬(オプション)

はじめに

BBC micro:bit にはいろいろな内蔵センサーがあります。 たとえば、3次元で重力を測定できる加速度センサーと磁場を測定するコンパスがあります。 これらは、micro:bit を振ったり逆さまにしたりしたときに何かを起こしたり、方角表示をするときに使います。

Python と Mu を使用すると、micro:bit のセンサーから所得した実況データをコンピュータ画面上にリアルタイムにグラフ表示できます。以下のアニメーションは、この様子を示しています:

はじめよう

Mu を起動して、BBC micro:bit モードを選択してください。はじめに、以下の Python プログラムを micro:bit に転送してください:

    
from microbit import *

while True:
    sleep(20)
    print(accelerometer.get_values())
  

次に、Mu の REPL ボタンを押してください。 (REPL は Read-Evaluate-Print Loop の略です。 Python のコマンドラインを使って micro:bit と対話でき、入力したテキストコマンドは、すぐに実行され、micro:bit に応答させることができます。)

背面のリセットボタンを押して micro:bit を再起動してください。 3つの数字のセットが画面上をスクロールして表示されるはずです。 これらは加速度センサーから読み込んだ値です。 micro:bit を振ると、それらの値が変化しているのを見られるはずです。

これらの数字は高速に流れていくので、何を意味するのか知るのは困難です。 このような数字はグラフにプロットすれば、はるかに理解しやすくなります。 MuのPlotterボタン(日本語表示では「プロッター」)を押すと、センサーから読み取った値がリアルタイムでプロットされます。 REPLボタンをもう一度押すと、グラフをもっと大きくて見やすくできます。

緑、青、オレンジの3つの線が表示され、それぞれ異なる軸(X、Y、Z)の測定値を表示しています。どの軸がどの軸を示しているか試してみませんか?

micro:bit を揺らせば、線が激しく動くのを確認できるでしょう。 今度は micro:bit のLED側を上にしてテーブルに置き、線を再確認してください。 青と緑の線は 0 付近にあり、オレンジの線はずいぶんと下の -1000 付近にあるはずです。 micro:bit を裏返すと、オレンジ色の読み取り値が +1000 に変わるはずです。

これは、加速度センサーに地球の重力が影響していることを示しています。 数字はミリg単位、つまり1000分の1 g 単位で測定されます。 1 g (1000ミリg) は地球の重力の加速度です。 これは、地球があなたの micro:bit を他の軸よりも1つの軸で大きく引っ張っていることを意味するので、オレンジの線は、Z軸の測定値であることがわかります。

ここでテーブルを叩くと、地震の揺れを測定する地震計のように線が動くのがわかります。テーブルを叩くのをより強くしたり、柔らかくしたり、叩く位置を離したり、近づけたりするとどうなりますか?

micro:bit をエッジ部分を下にして立てた場合、緑の線が 1000 になり、他の2本の線が 0 になるはずです。これは、緑の線が Y 軸の測定値であることを意味します。

micro:bit の左右どちらかを下にして立てると、どちらを下にしたかによって青い線が 1000 または -1000 になります。

これらの読取り値は、micro:bit の Python ジェスチャー “shake”, “up”, “down”, “left”, “right”, “face up”, “face down” などを判定するのにも使われます。

プログラム転送できない?

'flash' ボタン(日本語表示では「転送」)が押せなくてプログラムを転送できない場合は、REPL または Plotter (日本語表示では「プロッター」)ボタンをもう一度押して閉じる必要があります。 REPL またはプロッターを使っている間は、コンピュータが micro:bit にプログラムを転送するのに使うのと同じインターフェイスを使っているので、プログラムを転送できません。

ビデオガイド

以下に micro:bit, Python, Mu で実況データロギングを取得する方法を示す実演ビデオがあります:

無線を使ってリモートセンサーを追加する

USB を接続しなくても、リモートでデータを記録できるようになると便利です。 たとえば、おもちゃの車に micro:bit をつけて、斜面を転がり落ちるときの加速度を見る場合などです。

これを行うには micro:bit の無線機能を使えます。 1つの micro:bit はセンサであり、バッテリパックが取り付けられ、無線でデータを送信します。 データを受信し、コンピュータの Mu に USB ケーブルで送信するには、2台目の micro:bit が必要です。

この Python プログラムをセンサの micro:bit に転送してください。

  
from microbit import *
import radio
radio.on()

while True:
    sleep(20)
    radio.send(str(accelerometer.get_values()))
  

次に、コンピュータからこの micro:bit を抜き、バッテリパックを取り付けます。そうすると、20ミリ秒ごとに3つの加速度計の読み取り値(X, Y, Z 軸)を文字列として送信します。

2台目の micro:bit は USB ケーブルでコンピュータに接続したままにします。次の Python プログラムをそれに転送してください。

  
from microbit import *
import radio
radio.on()

while True:
    message = radio.receive()
    sleep(20)
    print(message)
  

前と同じように、Mu の REPL ボタンをクリックし、背面のリセットボタンを押して micro:bit を再起動し、Mu の Plotter ボタン(日本語表示では「プロッター」)を押します。 これで、もう1つのリモートセンサー micro:bit からの実況加速度データが表示されるはずです。

移動する車に取り付けるのと同様に、リモートセンサーをラバーバンドボールに取り付けて、キャッチボールして、読み取り値に何が起こるかを見ることができます。 他にどのような実験を思いつくことができますか?

取得したデータの保存

キャプチャしたデータは、後で調べることができます。 Mu は、任意のスプレッドシートプログラムで開くことができるCSV (Comma Separated Values)ファイルとしてデータを保存します。 スプレッドシートでデータを見立たせておけば、そのデータを解釈しやすいよう折れ線グラフをプロットできます。

CSV ファイルは、コンピュータのホームフォルダにあります。'mu_code' 配下の 'data_capture' フォルダを見てください。

さらに進めよう

コンパスのような他の内蔵センサーからの読み取りや、温度プローブ、光センサー、音センサーなどの外部センサーの追加を試みることもできます。 たとえば、この Python プログラムを使用し、Mu プロッター micro:bit の周りの磁場がどれほど強いかをプロットできます。

  
from microbit import *

while True:
    sleep(20)
    print((compass.get_field_strength(),))
  

このプログラムは少し奇妙に見えるかもしれません!  Mu プロッターはタプル(グループ化された値)でのみ機能するので、コンパスから読み込んだ値の後にコンマを置く必要があります。 このプログラムを micro:bit に転送して、REPL と Plotter を開き、micro:bit を再起動して、さまざまな金属オブジェクトや磁石を micro:bit に近づけるとどうなるか見てみましょう。

Muプロッタの動作の詳細については https://codewith.mu/en/tutorials/1.0/plotter を参照してください。

お楽しみください!

Selecting this opens external content from our support system, which adheres to their privacy policy.