2025年1月9日

017-1.SPIKEプライム入門-第4回「ライントレースロボットを作る(その1)」

この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」を使ったプログラミングの方法を紹介します。SPIKEは2020年1月にレゴ エデュケーションが発売したSTEAM教材です。マイコン搭載のブロックをプログラミングすることで、科学・技術・工学・アート・数学を学ぶことができます。プログラミングを行うにはWindowsかMacのパソコン、Androidタブレット、iPad、Chromebookのいずれかが必要です。(文/松原拓也)

◆ ロボットの組み立て

今回はSPIKEを使ってライントレースロボットを作ってみたいと思います。
まずは、このようなコースを用意しましょう。白地に黒い線が描かれていれば何でも構いません。

ロボットを作ります。
ここではSPIKEアプリに収録されている「サイ」の胴体部分を使いたいと思います。作り方は「ホーム」画面で「組み立て」というタブを選択すると見ることができます。

組み立て中の様子です。
ハブの裏側にモーターとボールキャスターがピッタリと収まっています。カッコいいです。

カラーセンサーを取り付ける部分を作ります。これはオリジナルなので、SPIKEアプリに載っていません。 H型のビームがセンサーのケーブルを挟んでしまって、青いペグが完全には刺さりませんでした。次回には改良したいです。

ロボットが完成しました。モーターはポートAとポートBに接続しています。 カラーセンサーはポートFに接続しました。
カラーセンサーと床面とは少し間を開けます。センサーが床面に近づきすぎると測定値が大きくなりすぎてしまいます。

◆ その場せん回をするロボット

練習として、ロボットに「その場せん回」をさせてみましょう。
例題はこちらです。ロボットが20cm前進して、時計まわりに90度せん回して、さらに20cm進みます。

移動に関するブロックの一覧です。
EV3ソフトウェアには無かった機能として「cm」でモーターの回転量を指定できるようになりました。今まではタイヤの円周から角度を計算していたのですが、その手間が不要になっています。
一番下にある「モーター1回転を17.5cmにする」というブロックは付属するタイヤ用に設定されています。
なお、これらのブロックの中には「その場せん回」の機能がありません。

「モーター1回転を~cmにする」ブロックの「17.5」の意味を考えてみましょう。円周率を使えば、円周から直径を求めることができます。17.5÷3.14=5.57...なので、計算上のタイヤの直径はおよそ5.57cmということになります。
タイヤの直径をノギスで計ってみると、5.6cmくらいでした。つまり、設定内容は正しいということがわかります。

「その場せん回」を実現させるため、「移動拡張」を使います。
移動拡張を使うにはパレットの一番下にある「+」のボタンを押します。この画面が表示されたら、移動拡張のチェックマークをオンの状態にしましょう。

移動拡張によって使うことができるブロックの一覧です。
2つのモーターを別々に回すことができるブロックがあります。ここではスピードやパワーを「(左側モーター)(右側モーター)」の順に設定します。これを使えば、その場せん回ができるようになります。

完成したプログラムです。
その場せん回をするには、片方のモーターを逆回転させます。このためモーターのスピードをマイナスにします。

90度のせん回に必要なモーターの移動量を計算します。
タイヤとタイヤの間をノギスで測ると、7.7cmくらいでした。これを直径とすると、7.7×3.14=24.178cmになります。この長さを四分の一にすると、24.178÷4=6.0445cmです。
つまり、左側のタイヤを6cm前進させて、右側のタイヤを6cm後退させると、ロボットが時計まわりに90度せん回するということになります。

あと、重要な点として、最初の「移動に使うモーターを~にする」ブロックは「B+A」に設定しましょう。これは、ポートBに左タイヤ、ポートAに右タイヤを割り振るという意味です。
初期設定は「A+B」となっていますが、これだと、左右のモーターが逆に割り振られ、モーターの回転方向も逆になってしまいます。

実行すると、このように動きます。
見事、90度せん回させることができました。

◆ ライントレースロボット

ここからが本題です。ライントレースロボットのプログラムを作ります。
ロボットをできるだけスムーズに動かしたいので、モーターは回しっぱなしにします。先ほどのブロックは「~cm移動する」でしたが、このブロックは「~移動開始する」にしています。
しかし、ロボットが走りっぱなしだと扱いにくいので、10秒後には自動的に止まるようにしています。時間の測定にはタイマーブロックを使っています。

プログラム内では、反射光の大きさを比較しています。反射光が50%より小さいと「黒色」、50%以上だと「白色」と判別しています。
黒色の場合、ロボットはやや右に前進します。白色の場合、ロボットはやや左に前進します。この処理を繰り返すことによって、ラインの境界をジグザグに進むわけです。

プログラムの実行結果です。
見事、ラインをトレースさせることができました。このプログラムはまだ改良の余地がありますので、次回にはそれについて詳しく紹介したいと思います。

今回作成したプログラム(SPIKEアプリ用)

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