動きの検知¶
BBC micro:bit には加速度センサーがついています。これは 3 軸に沿った動きを測定します:
- X - 左右の傾き
- Y - 前後の傾き
- Z - 上下の動き
各軸についてミリg単位の測定結果を正または負の数を返すメソッドがあります。読み取り値が 0 の場合は、その特定の軸に沿って「水平」になっているということです。
たとえば、X 軸に沿ってどのくらいの動きかを測定するために get_x
を使う、非常にシンプルな判定プログラムは以下のようになります:
from microbit import *
while True:
reading = accelerometer.get_x()
if reading > 20:
display.show("R")
elif reading < -20:
display.show("L")
else:
display.show("-")
デバイスを水平にしておくと -
を表示します。しかし、左右に傾けるとそれぞれ L
と R
を表示します。
デバイスが絶えず変化に反応するように、無限 while
ループを使います。 ループの本体内で 行っている最初のことは X 軸に沿った測定で、結果を reading
としています。加速度センサーはとても感度が高いので、+/-20 レベルを検知の幅としました。これが if
と elif
の条件式で > 20
と < -20
をチェックしている理由です。 else
文は reading
が -20 と 20 の範囲内なら水平とみなすことを意味します。これらの条件のそれぞれについて、適切な文字を表示するためにディスプレイを使っています。
Y軸のための get_y
メソッドと Z 軸のための get_z
メソッドもあります。
スマートフォンの縦横で表示が切り替わるのは、上のプログラムと同じように加速度センサーを使っているからです。また、ゲームコントローラーの中には、ゲームでの操作や移動を支援するために加速度センサーが含まれているものもあります。
ミュージカル・メイヘム(Musical Mayhem)¶
BBC micro:bit の MicroPythonの の最も素晴らしい点の1つは、デバイスのさまざまな機能を簡単にリンクする方法です。たとえば、楽器(のようなもの)に変えてみましょう。
ミュージックのチュートリアルのようにスピーカーを接続します。ワニ口クリップを使用して、端子 0 と GND をスピーカーの正と負の入力に接続します。スピーカーにどのように接続するかは関係ありません。
加速度センサーからの値をピッチとして演奏するとどうなりますか? 確認してみましょう:
from microbit import *
import music
while True:
music.pitch(accelerometer.get_y(), 10)
問題の行は最後にありますが、非常に簡単です。 music.pitch
メソッドに渡す周波数として Y 軸の読込みを 入れ子 にしています。デバイスが傾けられたときに音色をすばやく変更したいので、10ミリ秒間だけ再生させます。デバイス操作は無限 while
ループにあるので、Y 軸測定の変化にすぐに反応します。
これでおしまい!
デバイスを前後に傾けます。Y 軸に沿った読み取り値が正の場合、マイクロビットで演奏される音のピッチが変わります。
これらのデバイスを使った楽団を想像してみてください。あなたは曲を演奏できますか? micro:bit のサウンドをより楽器らしくするためにプログラムをどう改善しますか?