2024年12月13日

011-1.WeDo2.0入門-第2回 「モーションセンサーの使い方」

この連載では「レゴ WeDo 2.0(以下、WeDo 2.0)」の活用方法について紹介していきたいと思います。 この記事で使用するものは「レゴ WeDo 2.0 for home by アフレル」とBluetooth搭載のタブレットまたはパソコンです。なお、スマートハブ用として単三型乾電池2本または専用バッテリーを使用します。(文/松原拓也)

◆ モーションセンサーについて

基本セットには「モーションセンサー」と「チルトセンサー」という2種類のセンサーが付属しています。今回は「モーションセンサー」を紹介します。
モーションセンサーには2つの窓があります。向かって右側の窓から赤外線を出して、対象物に反射させ、向かって左側の窓で赤外線を受け止めます。赤外線の量を測定することによって、距離動きを検出することができます。

それでは、モーションセンサーを使ってみましょう。スマートハブにつないでみました。
モーションセンサーの手前に対象物(ブロック)を置きます。

WeDo 2.0のソフトウェア(アプリ)を動かします。 写真はスマートハブと通信中の様子です。 画面の右下にモーションセンサーの値が表示されます。対象物とセンサーとの距離を0~10の値で表しています。 文字のサイズが小さいので、少し読みにくいです。

距離を表示するプログラムがこちらです。
「表示ブロック」と「その他の距離測定(距離センサー)」というブロックを合体させて、距離を表示します。
「待機ブロック」は時間を待つためのブロックです。ここでは1秒だけ待ちます。
「ループ」は処理を繰り返すためのブロックです。ループ内の処理を繰り返します。

プログラムを実行してみました。
画面の右上に距離が表示されます。対象物を動かすと距離の値が変わります。
この写真は7回撮った写真を合成しています。これを見ると、2~3cmごとに値が変わっていることがわかります。

◆ 動きを検出する

モーションセンサーを使った別のプログラムです。今度は「距離の変化」を検出します。 距離の変化というのは「動き」のことです。 動きを検出するためには「待機ブロック」と「その他の距離変化(距離センサー)」を使います。 距離センサーのブロックは全部で4種類あります。ここでは「その他の距離変化」というブロックを使っています。ブロックの中に「←→」のような矢印が描かれているのが目印です。

プログラムを実行中の様子です。
対象物(ブロック)を手で動かすと、スマートハブのライトが水色→ピンク色に変わります。ライトは1秒経つと水色に戻ります。 モーションセンサーが動きを検出することに成功しました。

◆ ロボットとモーションセンサー

「マイロ」というロボットにモーションセンサーを取り付けてみましょう。
マイロは「パワーモーターM」を付けたシンプルなロボットです。

マイロの作り方はソフトウェアのアクティビティで紹介されています。 モーションセンサーの取り付け方もここに書かれていますので、 そのまま作ってみることにします。

できました。
モーションセンサーは進む方向に対して、横向きに取り付けています。

続いて、プログラムを作ります。
モーションセンサーで対象物(ブロック)を見つけるプログラムです。

プログラムを実行すると、マイロは前進します。 そして、ブロックを横切る直前でマイロは停止しました。
ここがモーションセンサーが距離の変化(動き)に反応した場所ということになります。

ちなみに距離センサーのブロックはクリック(またはタップ)すると、種類が切り替わります。ブロックは全部で4種類あります。そのうち3種類は待機ブロックで使うことができます。
「距離センサー入力」:表示ブロックなどに使います。
「距離の変化-近づく」:センサーに近づくと反応します。
「距離の変化-遠くなる」:センサーから遠ざかると反応します。
「その他の距離測定」(初期値):センサーに近づくか遠ざかると反応します。

◆ 障害物の手前で止まる

続いて、モーションセンサーをマイロの正面に向けてみました。障害物(ブロック)の手前でマイロを止めることができないか実験してみます。

作ってみたプログラムがこちらです。
この場合、「距離の変化-近づく」ブロックを使って障害物を検出するのがいいかもしれません。しかし、その方法だと絶対的な距離で検出していないので、どこで止まるか確かではありません。障害物のかなり手前で止まってしまうかもしれません。
このプログラムでは「メッセージ送信ブロック」を使って、距離が0~2の時だけモーターを停止するようにしています。 これで障害物のギリギリ手前でマイロを止めることができるはずです。

プログラムを実行してみました。
無事に障害物の手前で止まりました。成功です。

成功かと思ったのですが、少し問題がありました。
たまに止まり切れずに障害物に当たってしまいます。センサーの反応が遅いためプログラムの再現性が良くないです。 対策として、ループ内の待機ブロックをなくしたほうがいいかもしれません。

プログラムの改良版です。
先ほどのプログラムはループから抜け出さなかったのですが、こちらのプログラムはループから抜け出るようにしました。これでモーターoffブロックを何度も呼び出さないようになりました。気分の問題かもしれませんが、このほうがプログラムがスッキリしています。
WeDo 2.0では変数を使うことができません。その代わりとして、表示ブロックを変数のように使うことができます。この機能を使って、ループにはループ回数を与えています。ループ回数を「0」にすると、ループから抜け出す仕組みです。
このテクニックは他の場面でも使い道がありますので、おぼえておきましょう。

[movie]「レゴ WeDo 2.0」でモーションセンサーを使う動画(Youtube)

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