2025年1月9日

017-1.SPIKEプライム入門-第6回「あいさつロボットを作る」

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

◆ 距離センサーを使う

今回は距離センサーを使った「あいさつロボット」を作ってみたいと思います。その名のとおり、あいさつをするロボットです。
ハブに距離センサーを取り付けます。距離センサーはNXTやEV3では「超音波センサー」と呼んでいました。距離センサーの測定できる範囲は5~200cmです。

プログラムを作ります。
距離センサーが15cmを下回った場合、マトリックスLEDに「Hello」と表示します。Helloは英語で「こんにちは」という意味です。
センサーの判断には「もし~なら」ブロックを使いました。 六角形のブロックには条件のブロックが入ります。条件がYESの場合には内側のブロックが実行されます。

判断の仕組みをグラフにするとこうなります。
センサーの値が15cmまでは反応しません。14.999…以下となる(15cmを下回る)と反応します。

プログラムを実行しました。 手をかざすと、「Hello」と表示されます。
一応は成功なのですが、手をかざし続けると「Hello Hello Hello…」と表示してしまうので、あまり見た目がよくありません。
さらにプログラムを改良してみましょう。

◆ 誤動作を減らす

改良版のプログラムがこちらです。
ここでは「~を待つ」ブロックを2つ使ってみました。1つ目の「~を待つ」ブロックでは15cmを下回るまで待ちます。下回った場合には「Hello」と表示します。
2つ目のブロックでは25cmを上回るまで待つようにしています。上回った場合は「Goodby」と表示します。「Goodby」は英語で「さようなら」という意味です。

グラフにすると、こうなります。待つ処理を2つ作ることで、「Hello」が連続して出なくなりました。
「Goodby」のしきい値は、「Hello」のしきい値よりも大きいです。ここが重要なところです。このようにしきい値が2つある仕組みのことを「ヒステリシス」といいます。

プログラムを実行してみました。手をかざすと「Hello」と表示され、手をどけると「Goodby」と表示されます。成功です。
ヒステリシスを使うことによって、誤動作の少ないロボットを作ることができます。

◆ さらに誤動作を減らす

先ほどのプログラムで完成でもいいのですが、さらに誤動作の少ないプログラムも作ってみました。
これは15cm未満の状態が3秒以上続くと「Hello」と表示、25cmより遠い状態が3秒以上続くと「Goodby」と表示するプログラムです。こうすると、瞬間的な値ではセンサーは反応しなくなります。この処理には「タイマー」ブロックを使っています。
3秒以上でループを抜け出すようにしたかったのですが、「>=」のブロックがありません。その代わりとして、タイマーのしきい値を「2.999」としました。
これで誤動作が少ないロボットができました。ただし、3秒も待っていると表示した時にはもう相手がいなくなっているかもしれません。適度な反応をするように、確定する時間を調整してみましょう。

これであいさつロボットの基本ができました。 さらに改良して、モーターを付けて何かの動きを表現できたら面白いと思います。

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

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