[No.12]傾けて動かしてコントロール!!

おもちゃの魔法の杖を振るとピカッと光ったり、ゲームのリモコンを傾けるとキャラクターが同じ方向に曲がったり……わたしたちのまわりには動きに合わせて反応するものがいろいろあります。今回は「三軸ジャイロ三軸加速度センサモジュール」を使って傾けると光が移動するLEDパネルを作ります
必要なもの&準備
- SPACEBLOCK通常パッケージ[SPACEBLOCK本体、USBケーブル、電池ボックス]
- 三軸ジャイロ三軸加速度センサモジュール(三軸ジャイロセンサ)
- 8×8 RGB LEDマトリックスパネル(LEDパネル)
- ジャンパーワイヤ[ピンヘッダ-ピンソケット3本]
- プログラミングをするパソコン

SPACEBLOCKに拡張パーツを接続する

細かい部分は次の図を参考にしてください。三軸ジャイロセンサはSPACEBLOCK本体の特別なピンヘッダに直接差すことができます。


三軸ジャイロセンサって何ができるの?
三軸ジャイロセンサは、傾きの角度と加速度を測定することができます。今回は傾きの角度について紹介します。加速度は次の記事で詳しく紹介していますので確認してくださいね。
3つの角度
SPACEBLOCKのプログラムでは、地面に対して水平の状態を基準に、X軸、Y軸、Z軸に対してどのくらい傾いているかを測定します。

角度の値
USBケーブルのコネクタが左側になるように水平に配置した場合、X角度とY角度は0です。右に傾けるとX角度がプラスに、左に傾けるとX角度がマイナスになります。奥に傾けるとY角度がプラスに、手前に傾けるとY角度がマイナスになります。


三軸ジャイロセンサの値をチェックしてみよう

X角度、Y角度、Z角度の値を同時に確認するために、次の図の通りにプログラムして実行してみましょう。三軸ジャイロセンサをつけたSPACEBLOCKを傾けると刻々と値が変わっていくのがわかります。

X角度の値でLEDパネルの光り方を変える!
それでは、三軸ジャイロセンサの値に応じてLEDパネルの表示を変えるプログラムを作りましょう。
まずX角度だけを使います。次の図の通り、X角度が45度より大きくなったときと、X角度が-45度より小さくなったときでLEDの表示を切り替えるプログラムを作ります。

変数を作る
X角度の値をプログラムの中で使いやすくするために「変数(へんすう)」を作成します。「変数」は、値を入れておくことができる入れ物で、自分で好きな名前をつけられます。次の図を参考に、「数字」型の「angleX」という名前の変数を作ってください。


条件で処理を分ける
続けて、LEDの表示を切り替えるプログラムを作成します。[もし《 》なら…でなければ…]ブロックと[《0》《=》《0》]ブロックで、X角度の値によってLEDパネルの表示方法を3通りにわける仕組みを作ります。

LEDパネルの表示を指定する
[もし《 》なら…でなければ…]ブロックの間にLEDパネルの指定ブロックをいれると次の図の通りプログラムが完成します。

完成!
このプログラムを実行すると、このように傾きにあわせてLEDの表示が切り替わります。

LEDパネルとSPACEBLOCKを重ねて持つと、傾けた側が光っているように見えますよ。動画でご覧ください!
傾き方でLEDパネルの光り方を変える!
次は、X角度だけでなく、Y角度とZ角度も使って、傾け方に応じて次々にLEDパネルの光り方が変わる演出に挑戦しましょう。
次の図の通り、8種類の傾き方と裏返しの状態とそれ以外の合計10通りに分けて、LEDパネルの光り方を変えます。傾いている側のライトがつくようにLEDパネルのデザインを工夫します。

変数を作る
変数を3つ作り「angleX」「angleY」「angleZ」という名前にします。次の図の通り、[繰り返す]ブロックの間に、[数字《変数名》に《 》をセット]ブロックを3個入れ、変数に角度の値をセットします。

条件で処理を分ける
続けて、LEDの表示を切り替えるプログラムを作成します。次の図の通り、[もし《 》なら…でなければ…]ブロックと[《0》《=》《0》]ブロックで、10通りに条件分岐する仕組みを作ります。条件に[《 》かつ《 》]ブロックを入れると、X角度とY角度の両方を同時に判定させることができます。

「論理」カテゴリーの[《 》かつ《 》]ブロックを選んで、[もし《 》なら…でなければ…]ブロックの条件に入れます。[《 》かつ《 》]ブロックの左右にそれぞれ判定させる式を入れましょう。

「かつ」の左右の式両方が「はい」の状態のとき、この条件全体が「はい」の状態だと判定されます。
なお、[《 》または《 》]ブロックを使うと、「または」の左右の式のどちらかが「はい」の状態のとき、この条件全体が「はい」の状態だと判定されます。
LEDパネルの表示を指定する
[もし《 》なら…でなければ…]ブロックの間にLEDパネルの指定ブロックをいれるとプログラムの完成です。縦にとても長いプログラムなので、動画でご覧ください。
完成!
このプログラムを実行してみましょう。LEDパネルとSPACEBLOCKを重ねて持つと本当に光が傾きに応じて動いているように見えます!

こうすると、箱を動かすだけでフタが自動的に光っているように見えます。

動画でご覧ください!
LEDパネルと三軸ジャイロセンサを位置を合わせて箱に納めることで、光が重力に引っ張られているような不思議な様子が演出できました。
このように、自分の動きに合わせて何かが動いているような演出をするのに三軸ジャイロセンサはぴったりです。今回は傾きだけ使いましたが、加速度を使っても面白いことができそうですね。みなさんもいろいろなアイデアを考えてみてください!!