2024年12月19日

014-1.WeDo2.0スクラッチ入門-第3回「チルトセンサーの使い方」

この連載では「レゴ WeDo 2.0(以下、WeDo 2.0)」と「Scratch(スクラッチ)」を使ってプログラミングの方法を紹介します。なお、「WeDo 2.0 ソフトウェア」を使ったプログラミングの方法については、すでに「WeDo 2.0入門」で紹介していますので、そちらをご覧ください。(文/松原拓也)

◆ チルトセンサーとは

今回はWeDo 2.0に付属する「チルトセンサー」を使ったプログラムについて紹介します。
これがチルトセンサーです。中には傾きを検出するためのセンサーが入っています。センサーの種類はおそらく加速度センサーです。重力加速度を測定することによって傾きを検出しています。

チルトセンサーをWeDoスマートハブに接続しましょう。そして、手で持ちやすくなるように、チルトセンサーをスマートハブの上に乗せます。これでハードウェアの準備は完了です。

Webブラウザを起動してスクラッチの公式サイト(https://scratch.mit.edu/)を開きましょう。メニューの「作る」を選択すると、プログラムの入力画面に移行します。続いて、「スクリプト」タブの中にある「その他」をクリック→「拡張機能を追加」ボタンをクリック→「LEGO WeDo 2.0」を選択して「OK」をクリック。これでWeDo 2.0関連のブロックが使えるようになります。
チルトセンサー用のブロックは3つあります。

チルトセンサー用のブロックを紹介します。一番左は「when tilted~」ブロック。これはセンサーが傾いた時にイベントが発生するというブロックです。「tilt(チルト)」は日本語で「傾ける」という意味です。中央にあるのは「tilted~?」ブロック。これはセンサーが傾いているかを「もし~」ブロックで判断する時に使うブロックです。一番右の「tilt angle~」ブロックは、センサーの細かな傾きを数値で返すブロックです。レゴ エデュケーションが提供している純正アプリ「WeDo 2.0ソフトウェア」には傾き具合を細かく測定する機能はありません。これはスクラッチ特有の機能ということになります。

ブロック内の設定値「上」「下」「左」「右」はこのような意味があります。センサーの右側が下に傾くと「右」、左側が下に傾くと「左」となります。 そして、センサーの先端部分が上向きに傾いていると「上」、センサーの先端部分が下向きに傾いていると「下」です。

◆ 細かな傾きを検出する

それでは、実際にチルトセンサーを読み取ってみましょう。 「tilt angle~」ブロックを使って、細かな傾き具合を表示するプログラムです(チルトセンサー1.sb2)。 設定値は「上」にしました。

プログラムを実行した様子です。実行する時はあらかじめ「デバイスマネージャ」を起動して、スマートハブとパソコンを接続しておきましょう。
チルトセンサーを下に向けると、値が減っていき、マイナスになりました。逆に上に向けると値が増えて、プラスになります。見たところ、値の変化する範囲は-45~+45のようです。センサーが水平だと0付近の値を示します。
センサーを90度くらい傾けても「45」としか表示されません。なので、角度というわけではなさそうです。

「tilt angle~」の設定値を「右」に変更してみました。 今度は右に傾くと値が増えていき、左に傾くと値が減っていきます。つまり、「上」「下」「左」「右」で指定した方向に傾くと、値が増えて、その逆方向に傾くと値が減るようです。

◆ 傾いた方向にキャラクターを動かす

続いて、スクラッチならではのプログラムを作ってみましょう。「X座標を~、Y座標を~にする」ブロックを使ったプログラムです(チルトセンサー2.sb2)。これはスプライト(猫のキャラクター)の座標を指定するためのブロックです。ブロックの設定値には先ほど紹介した「tilt angle~」ブロックを使います。

座標の考え方を図にすると、こうなります。 座標(0,0)は画面(ステージ)の中心を示します。 X座標は左側がマイナスの値、右側がプラスの値です。Y座標は下側がマイナスの値、上側がプラスの値です。Y座標の向きはEV3ソフトウェアの座標の向きと逆になります。

プログラムを実行している様子です。チルトセンサーの傾きに応じてスプライトが動きます。動き方は次のとおりです。 ・右に傾けると、スプライトは右に動きます。
・左に傾けると、スプライトは左に動きます。
・下に傾けると、スプライトは上に動きます。
・上に傾けると、スプライトは下に動きます。

最後の2つ、上下の動きについては「お盆に乗ったビー玉」をイメージしてこのように設定しました。これを逆向きにしたい場合には「上」と「下」の設定値を入れ替えてみましょう。
実行してみて気が付きましたが、スプライトの動きが小さすぎて、迫力がありません。これはセンサーの値の範囲が-45~+45までしかないためです。次のページではプログラムを改良して、スプライトの動きをダイナミックにしてみたいと思います。

◆ 変数の使い方

スプライトをもっとダイナミックに動かすため、このように改良してみました。改造後のプログラムがこちらです(チルトセンサー3.sb2)。
チルトセンサーの測定値を5倍にして、X座標とY座標に割り当てます。計算を行うと、ブロックが横に長くなってしまいますので、それを防ぐために「変数」を使います。 変数というのは情報を格納するための入れ物のことです。

変数を使う方法がこちらです。
ブロックのメニューから「データ」を選択して、「変数を作る」ボタンを押します。続いて、変数名を入力します。ここでは「X」と「Y」という変数を作ります。
「OK」ボタンを押すと、「X」と「Y」のブロックが出来上がります。

プログラムを実行した様子です。
画面からはみ出そうなくらいにスプライトを動かすことができるようになりました。これで、動きに迫力が出ました。スクラッチを使うと、このように画面を動かすプログラムも手軽に作ることができます。

次回はモーターを動かしてみたいと思います。
[DOWNLOAD]今回作成したプログラム(スクラッチ2.0用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。