2025年1月7日

016-1.EV3で楽しむMakeCode入門-第4回「関数ブロックを使う」

マイクロソフトが無償で提供している「Microsoft MakeCode(メイクコード)」というプログラムの開発環境を使ってレゴ マインドストームEV3のプログラミングを行う方法を紹介します。MakeCodeはインターネットに接続されたWebブラウザで動作します。画面上のブロックを組み合わせるだけで、直観的にプログラムを作成することができます。
MakeCodeの公式サイトはこちらです。(文/松原拓也)

◆ 関数ブロックを使いこなす

前回作成したライントレースのプログラムを改良したいと思います。
現状のままだと、2つのモーターを順番に動かしているのですが、動作時間にズレが出そうな気がしてしまうので、これを直します。

「実行large motor~」ブロックを「tank motors」ブロックに置き換えてみました。2つのブロックが1つに合体したので、同じタイミングで動かすことができるようになりました。プログラムは少し短くなりました。
この「tank~」ですが、本当はポートを「D+A」と指定したいのですが、選択肢にないので「A+D」と指定しています。そのため、「右モーター」「左モーター」の順に速度を設定します。「左モーター」「右モーター」の順ではありません。

続いて、関数ブロックを使って、モーターの回転速度の処理をわかりやすくします。
現状だと、ブロック内の「(power)+(temp)」や「(power)-(temp)」のあたりが横に長くなっているので、これを短くします。 関数ブロックを使うには、メニューから「高度なブロック」→「関数」を選択します。最初の時点では関数はありません。そこで「関数を作成する」ボタンを押します。

関数名を入力します。ここでは「getpower」と入力しました。入力すると関数ができました。最初、関数の中身は空っぽです。

最終的にこうなりました(lego-function1.uf2)。 「getpower」ブロック内部ではモーターの回転速度を計算しています。こうして機能を切り分けることで、プログラムが見やすくなります。
「rightpower」「leftpower」という変数を新たに作りました。rightpowerは右側のモーターの回転速度、leftpowerは左側のモーターの回転速度が入ります。

白と黒の中間にロボットを置き、プログラムを実行します。 すると、このようにラインをトレースします。動きは前回と同じです。

ちなみにrightpowerとleftpowerが入れ替わっている場合、このようにラインの外側を走ります。ロボットの置く向きを180度反転させると、線の内側を走ります。

◆ 文字列を表示する

現状ではプログラムを実行すると画面が真っ白になってしまうのですが、わかりにくいので文字を表示するようにします(lego-function2.uf2)。
「ストリング表示」というブロックを「最初だけ」ブロックに置きます。「ストリング」というのは「文字列」という意味で使っています。表示する内容は「push enter button」にします。

実行すると文字列が表示されました。これはシミュレータの画面ですが、実機でもこんな感じで表示されます。

◆ タイマーを使う

さらに細かい部分を直します。
現状ではプログラムを実行してしまうと、ライントレースの処理を果てしなく続けてしまいますが、停止ボタンを押しにいくのに手間がかかってしまいます。そこで、一定時間動作したら、勝手にロボットが停止するようにします(lego-function3.uf2)。
そこで、「タイマー」を使います。タイマー関連のブロックは「高度なブロック」→「制御」のメニューの中にあります。

タイマーは時間を計ることができます。 タイマーのカウンタの単位はミリ秒です。カウンタの値の1つが0.001秒になります。値が1000だと1秒です。
ここではタイマーを15秒(15000カウント)未満ならループを実行するようにしました。これで15秒経つとループを抜けて、モーターを止めることができます。

写真ではうまく伝わりませんが、ENTERボタンを押してスタートしてから15秒後にロボットが停止しました。

今回作成したプログラム(MakeCode)

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