2024年12月16日
011-1.WeDo2.0入門-第4回 「モーターの回転制御」
この連載では「レゴ WeDo 2.0(以下、WeDo 2.0)」の活用方法について紹介していきたいと思います。 この記事で使用するものは「レゴ WeDo 2.0 for home by アフレル」とBluetooth搭載のタブレットまたはパソコンです。なお、スマートハブ用として単三型乾電池2本または専用バッテリーを使用します。(文/松原拓也)
◆ プログラムで回転を制御

前回でひととおり使い方を紹介しましたので、今回から応用例を紹介したいと思います。
レゴ WeDo 2.0の作品の例については、専用のソフトウェアのモデルライブラリにたくさん紹介されています。 せっかくなので、このモデルライブラリにはないものを考えてみましょう。

オリジナルの作品を考えてみました。
モーターの回転制御装置です。指定した回数だけモーターを回すことができます。EV3用のモーターにはロータリーエンコーダというセンサーが内蔵されていますので、回転角度を検出することができます。しかし、WeDo用のモーターにはロータリーエンコーダが内蔵されていませんので、回転角度の検出ができません。回転量は時間の長さで調節するしかありません。ここではモーションセンサーを追加することで回転量を制御できないかチャレンジしてみたいと思います。
使用する部品は「スマートハブ」と「モーションセンサー」と「パワーモーターM」などです。 モーターに接続した部分を「アーム」と呼ぶことにします。 モーターが回転するとアームがモーションセンサーを通過しますので、それでモーターの回った数がわかるという仕組みです。

プログラムを作ってみました。
モーターを回してから、待機して、モーターを停止するだけです。 「待機ブロック」には「距離の変化-近づくブロック」を取り付けました。これでアームがモーションセンサーに近づくまで待つことができます。

プログラムを実行してみました。
実行すると、アームが動きます。そして、アームがモーションセンサーを通過すると停止します。 、、、そのはずだったのですが、アームの停止する位置が安定していません。実行するたびにアームの位置がバラバラです。たまに止まらずに回転し続けてしまう場合もあります。これは失敗です。
なぜかというと、モーションセンサーは通過する時間が短いと反応してくれないからです。そこでアームの動きを遅くしないといけません。ただし、モーター出力ブロックの値は「1」なので、それより小さく設定することはできません。そこで、ソフトウェアではなくハードウェアで対策しましょう。
◆ 減速機を付ける

改良版がこちらです。ギヤを使って、アームの動きを遅くしてみました。

見やすいようにアームを外してみました。
モーター側に8歯ギヤ、アーム側に24歯ギヤが付いています。これで回転量が三分の一になります。
そして回転方向は逆になります。モーター側が3回転した場合、アーム側が1回転します。このように回転速度が落ちるギヤの組み合わせを「減速機」といいます。

実行してみました。
今度は確実にモーターが止まります。アームの位置も安定しています。
ただし、モーションセンサーの少し手前で止まってしまいます。 これはモーションセンサーから出ている赤外線の範囲が広いからです。
◆ 決まった数だけ回転させる

改良版のプログラムです。赤いワクの場所に待機ブロックを追加しました。待機する時間は「0.1秒」に設定します。
これでモーションセンサーが反応してから余分にモーターが回ります。

プログラムを実行してみました。
今度はアームがモーションセンサーの位置で止まりました。時計で言うと12時の方向で止まりました。成功です。

ループを追加してみました。こうすると、モーターの回転する数を設定することができます。
図はモーターが3周するプログラムです。モーターは1周するごとに一時的に停止して、3周すると停止します。

さらにモーターoffブロックをループの外側に動かします。こうすると、モーターが途中で止まらず、3周し終えてからモーターが停止します。

ちなみに0.1秒に設定した待機ブロックを外してみたのですが、 待機ブロックが完了せずプログラムが止まらなくなってしまいます。理由はわかりません。この0.1秒の待機ブロックがないとうまく動かないようです。
以上の方法を応用すれば、プログラムでモーターの回転を制御することができるようになります。何か面白い使い道を考えてみましょう。
[movie]「レゴ WeDo 2.0」でモーションセンサーを使う動画(Youtube)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。