2024年12月20日
014-1.WeDo2.0スクラッチ入門-第6回「新しいブロックを作る」
この連載では「レゴ WeDo 2.0(以下、WeDo 2.0)」と「Scratch(スクラッチ)」を使ってプログラミングの方法を紹介します。なお、「WeDo 2.0 ソフトウェア」を使ったプログラミングの方法については、すでに「WeDo 2.0入門」で紹介していますので、そちらをご覧ください。(文/松原拓也)
◆ ブロックの作り方

前回に引き続き、WeDo 2.0を使って移動できるロボットを作ります。
このロボットは「パワーモーターM」を2つ使います。 パワーモーターMはWeDo 2.0のセットに1つだけ付属していますので、もう1つは別途購入する必要があります。パワーモーターMはアフレルショップやテクノロジアなどで購入することができます。

前回作成したプログラムを改良したいと思うのですが、まずはWeDo 2.0からはなれて、スクラッチの使い方から紹介します。
たとえば、これは猫のスプライトが移動して「Hello!」と言うプログラムです。ここで、何か問題点に気が付くでしょうか?このプログラムは同じような処理の繰り返しになっていて、少し無駄があります。この無駄をなくしてみましょう。

スクラッチではブロックを並べてプログラムを作りますが、ブロックそのものを自分で作ることができます。これはEV3ソフトウェアの「マイブロック」と同じ機能です。この機能を使ってプログラムの無駄をなくします。ブロックのメニューの中から「その他」を選び、「ブロックを作る」ボタンを押します。これで新しいブロックを作ることができます。

次の手順でブロックの細かい設定を行います。
(1)ブロックの名前を入力します。名前は「walk」としました。
(2)「オプション」の文字を押します。すると、メニューの項目が拡大します。
(3)「数値の引数を追加」ボタンを押します。引数というのはブロックを呼び出すさいに引き渡す情報のことです。引数は型をあらかじめ決めておく必要があります。ここでは「数値」型を選択します。
(4)引数の名前を決定します。ここでは「step」と入力します。
(5)「OK」ボタンを押すと決定します。

新しくブロックを作ると「定義」というブロックが追加されます。ここでブロックの内部の処理を行います。最終的に出来上がったプログラムがこちらです。

見比べてみましょう。左が改良前、右が改良後です。
改良後は定義ブロックを除けば、見た目がすっきりしています。どんな処理を行っているのかがわかりやすくなったと思います。
◆ モーターを動かすブロックを作る

ここからが本題ですが、前回に作ったプログラムを改良してみたいと思います。
前回のプログラムは同じ処理を行うブロックがあって無駄があります。あと、「set ~ direction to ~」ブロックのモーターの回転方向が「こちら向き」「あちら向き」という設定になっていて、どちらに進むのかがわかりにくいです。このわかりにくさも直します。

モーターを動かすためのブロックを新しく作ります。
ブロックの名前は「motor」とします。
ここで「数値型引数を追加」ボタンを2回押しましょう。引数の名前は「L」と「R」にしました。これは「L=左のモーターの前進/後退」「R=右のモーターの前進/後退」という意味です。

完成したプログラムです。前回になかった要素としてキーボードの下が押された時の処理を追加しています。
ブロックの内部では、「もし~なら~でなければ」ブロックを使って、モーターの回転方向を設定します。この時、LとRでは値に対してのモーターの回転方向を逆にしています。たとえば、Rはプラス時に「こちら向き」であり、Lはプラス時に「あちら向き」です。ブロックを呼び出すさいに引数の値がプラスなら前進、値がマイナスなら後退します。これで、ブロックの引数の意味が左右で統一されてわかりやすくなります。

見比べてみましょう。
左が改良前、右が改良後のプログラムです。
キーボードが押された時の処理が「motor」ブロック1個で済むようになりました。motorブロックの引数を見れば、モーターがどう動くのかわかりやすくなりました。あとでプログラムを見直すことを考えると、見やすさは重要です。ただし、分岐処理のブロックが大きいので、全体的なプログラムの長さはあまり変わって見えないかもしれません。

プログラムを動かしている様子です。
次のようにキーボードを押すと、ロボットが動きます。
上:前進
下:後退
左:左せん回
右:右せん回
今回作成したプログラム(スクラッチ2.0用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。