2024年12月23日
015-1.EV3で楽しむスクラッチ3.0-第4回「ブロックを作成する」
ここでは「スクラッチ(Scratch)」を使ってレゴ マインドストームEV3のプログラミングを行う方法を紹介します。スクラッチとはMITメディアラボという研究施設のライフロングキンダーガーテングループによって開発されているプログラムのツールです。スクラッチの特徴としては、教育向けに作られていて親しみやすいこと、無償で使えること、Webブラウザでも動作すること、直観的にプログラムが作れることなどがあります。(文/松原拓也)
◆ ブロック定義機能を使う

今回はスクラッチを使ってブロックを作成してみたいと思います。
前回と同じく、モーターを2つ搭載したロボットを使用します。

連載の第2回の時に作成した「キーボードのキーが押されたらロボットが動くプログラム」です。このプログラムを改良してみましょう。
このプログラムですが、どこでどのような処理をやっているのかがわかりにくいという問題があります。
そこで、「ブロック定義」を使ってプログラムをわかりやすくします。

ブロックを作成するには「ブロック定義」という機能を使います。
左端にある「ブロック定義」をクリックして、「ブロックを作る」ボタンを押します。

このような画面に切り替わります。
「ブロック名」というテキストボックスにはブロックの名前を入力します。ここでは前進するためのブロックを作りたいので「forward」としました。
さらに「引数を追加」というボタンを押すと、ブロックに引数が追加されます。引数の名前は「kyori」としました。
最後に「OK」ボタンを押して決定します。

「forward」ブロックが作成されました。
右側の画面にはブロックの定義内容が表示されています。 この時点ではブロックの中身は空っぽです。

「forward」ブロックの中身を作ってみました。
右タイヤのモーターと左タイヤのモーターを両方とも正転させることで前進させます。ただし、現時点でスクラッチ3.0にはEV3のモーター2つを同時に回すブロックがありません。そこで、交互にモーターを回すことで2つのモーターが一緒に回っているような効果を出しています。
さらにスクラッチ3.0には回転角度を指定してモーターを回すブロックがありません。そのため、モーターの回転量を時間で制御しています。変数「time」はモーターを回転させるループの実行回数です。値の中身が確認できるように、あえて変数の形式にしています。

続いて「turn」ブロックを作りました。
「turn」ブロックではロボットをせん回させます。
引数の「kakudo」には角度が入ります。時計方向にせん回する場合、値はプラスとします。たとえば、時計方向に90度せん回する場合には、kakudoの値は「90」です。 反時計方向に90度せん回する場合には、kakudoの値は「-90」です。
変数「time」にはループの実行回数が格納されています。
◆ プログラムを実行

プログラムを実行してみました。
カーソルキーの「↑」を押すと10cm前進します。 時間で制御しているだけですが、きちんと10cmくらい進んだように見えます。成功です。

カーソルキーの「→」を押すと時計方向に90度せん回します。
これも時間制御ですが、ほぼ90度に曲がりました。

カーソルキーの「←」を押すと反時計方向に90度せん回します。
これも時間制御ですが、ほぼ90度に曲がりました。

連載の第2回目の時に作成したプログラムと今回作成したプログラムを比較してみました。
前回のプログラムでは、せん回する方向によってプログラムが分かれていましたが、今回は共通のブロックで制御ができるようになりました。どのような動きをしているかもブロックの引数に書かれていますので、わかりやすくなったと思います。
今回作成したプログラム(スクラッチ3.0用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。