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

今回は前回に作った「あいさつロボット」を改良してみたいと思います。
この「あいさつロボット」は距離センサー(超音波センサー)に反応して、HelloとGoodbyの文字を表示することができます。 しかし、このままではロボットらしくないので、モーターを追加してみます。 モーターを付けることで、 距離センサーの測定範囲を広げることができるはずです。

モーターとタイヤを取り付けてみました。
モーターはポートAとポートBに取り付けています。倒れてしまわないように両タイヤの反対側にはボールキャスターが付いています。

あたりを見回す動作のプログラムを作ってみました。
移動拡張ブロックを使って、2つのモーターを回しています。

ロボットを上から見たイメージ図です。 プログラムを実行すると、ロボットが時計方向に3秒間その場せん回をします。そして、ロボットが反時計方向に3秒間その場せん回をします。以後はその繰り返しです。
◆ メッセージ関連のブロック

前回作った「距離センサーを検出してあいさつするプログラム」と合体させます。
しかし、ここに来て問題が発生しました。付け足す方のプログラムには「ずっと」ブロックなどのループ処理があります。元のプログラムにも「ずっと」ブロックがありますので、そのままでは合体させることができません。

ここで役に立つのが「メッセージ」関連のブロックです。このブロックは3種類あります。
メッセージというのは英語で「お知らせ」という意味です。メッセージを使うと、プログラムからプログラムにお知らせを伝えることができます。

プログラムの例です。
「メッセージ~を送って待つ」ブロックを使って、「メッセージ1」と「メッセージ2」の2つメッセージを送ります。
そして、「メッセージ~を受け取ったとき」ブロックを使って、それぞれのメッセージを受信します。ここでは3秒待ってから、ハブから音を鳴らします。
このプログラムを実行すると、、、3秒待つ→音が鳴る→3秒待つ→音が鳴る、という動作になります。機能としてはマイブロックに良く似ていると思います。

今度は「メッセージ~を送る」ブロックを使った例です。 先ほどの「メッセージ~を送って待つ」ブロックとは違って、「待つ」処理がありません。
では、これを実行するとどうなるでしょうか?
実行すると、、、3秒待つ→音が鳴る、で終わってしまいます。音が鳴るのは1度だけです。 なぜかというと、最初のメッセージの完了を待たずに次のメッセージを送信しているので、2つのメッセージの受信がほぼ同時に行われるからです。2つの音が重なっていて、1度だけに聞こえていたわけです。
この機能を応用すると、2つ以上の処理を同時に行うことができます。
◆ プログラムを同時に動かす

メッセージ関連のブロックを使ってみました。これで「ずっと」ブロックを2つ同時に動かすことができます。

以上のプログラムで完成なのですが、少し改良を加えます。
今までのプログラムではロボットを時間で制御していましたので、せん回の角度が何度なのか不明でした。実行した時の角度から時計方向に動くので、動きのバランスが良くありません。
そこで、ジャイロを使って、せん回する角度を検出するようにします。これだと、実行した直後を0として扱えますし、正確にせん回させることができます。

改良後のプログラムです。ハブは直立している状態なので、検出するジャイロの軸は「ヨー軸」になります。 時計方向にせん回すると、ヨー軸はマイナスの値になります。

実行すると、このようにせん回しながら距離を測定します。

手をかざすと、メッセージを表示します。
これで一応は完成ですが、メッセージの表示中もロボットが動いてると、文字が読みにくいです。プログラムを同時に動かせることで、逆に欠点も発生してしまいました。この改良方法は皆さんで考えてみましょう。
今回作成したプログラム(SPIKEアプリ用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。