このブログについて

2006年10月5日発売予定の「教育用レゴ マインドストーム NXT」を発売前から体験しちゃうブログ。

書いてる人: ooba

Powered by TypePad

« 2006年7 月 | メイン | 2006年9 月 »

モーターを動かしてみる プログラム編

さてプログラム編です。今回のプログラムも簡単なモノですが、「ロボットを動かしてみる プログラム編」で作ったモノと違って、プログラミングにおいて大事な要素の一つである「ループ」を活用しています。

まずはプログラム全体を見てみましょう。

Clock_program

「左回転で30度づつ12回動かし、その後右回転で90度づつ4回動かす」という動作からもっとたくさんのブロックが並んでいるのを想像した人もいると思いますが、実際にはたったこれだけで組めてしまいます。並んでいるブロックは4つだけですが、2個づつ矢印名のようなグラフィックで囲われていますね。これが「ループブロック」です。

Clock_loop

ループブロックはその名の通り「ブロックの中を繰り返す」ブロックです。同じ動作を何回も繰り返したいときに使います。今回の場合は「左回転で30度」を12回繰り返したり「右回転で90度」を4回繰り返すために使っています。ループを使わないと同じ動作を回数分組み合わせなくてはいけないため非常に長いプログラムになってしまいますが、このループブロックのおかげでこんなに短く書くことができます。繰り返したい内容を変えるときも、こうしておけば一箇所変えるだけで済むのでラクチンです。

今回はこのループブロックを回数指定で使っていますが、何秒間繰り返す、センサーが反応するまで繰り返す、ボタンが押されるまで繰り返す、といった指定もできるようになっています。また、永遠と繰り返すことも可能です。このようにループブロックは、ある条件を満たすまで同じ処理を繰り返すブロックです。地味なようで超重要なのでぜひ使いこなせるようになってください。

さて、肝心の繰り返す中身を見てみましょう。最初にあるのが「モーターブロック」です。

Clock_motor

このブロックには「ポートAのモーターを50%の力で30度だけ正転させる」という設定がしてあります。加えて「回転が終わるまで待つ」という設定もしてあります。このブロックが1回実行されると、今回の場合は画面で見て左回転で30度だけ棒が動くことになります。この角度指定を何回転と指定したり、何秒と指定したり、もちろん永遠に回しっぱなしという設定もできます。モーターの動きを止まる場合もこのブロックを使います。このようにモーターブロックは、指定した条件だけモーターを動かすブロックです。これまでのモーターには力と回転方向しか指定できなかったのに、ずいぶんと便利になったものです。

モーターが30度回ったあとに実行されるのが「ウェイトブロック」です。

Clock_wait

このブロックには「1秒間待つ」という設定がしてあります。モーターブロックの実行後は30度動いた状態で止まっているので、止まった状態で1秒何も実行しないことになります。これがムービーの「カクッ、カクッ」という動きになっているわけです。ループブロックと同じように、センサーが反応するまで待つ、ボタンが押されるまで待つ、といった指定もできるようになっています。このようにウェイトブロックは、指定した条件になるまで待つ=プログラムの進行を一時停止するブロックです。

そしてこのウェイトブロックの処理が終わる (1秒間待つ) と、ループブロックによってプログラムの進行が最初のモーターブロックに戻ります。これを12回繰り返してようやくループブロックから次のブロックに行くことができるのです。 続くループブロックも同じように逆回転を4回繰り返すように設定してあるので、ムービーのような動きになるわけです。


NXT のプログラムをマスターするにはまだまだ覚えなきゃいけないことがたくさんありますが、基本的にプログラムはこれまで出てきたような単機能のプログラムブロックの組み合わせで成り立っています。応用力が大事です。プログラムブロックの役割をひとつ覚えるごとにできることが広がっていきますので、少しづつマスターしていきましょう。

次回のプログラム編では、センサーによる入力とその値による分岐を説明したいと思います。

モーターを動かしてみる

マインドストーム NXT からはモーターがサーボモーターになりました。公式サイトの紹介では「回転センサー内臓のインタラクティブ・サーボモーター」とありますが、要はこれまでのモーターと違って回転角度の制御ができるモーターになった、と思っていただければ問題ありません。マインドストーム用のパーツの中で、NXT 本体に次いで高機能になったのがこのサーボモーターです。

レゴブロックには実はかなりの種類のモーターがあります。そのうちのいくつかを今回のサーボモーターと並べてみました。

100_0726

このように、これまではモーターというと四角い形をしたものが多かったのですが、今回はサイズが倍近くになっているのに加え、モーターとしての構造や形が大きく変化しました。このサイズと形状から、これまでみたいにちょっと動かしたい部分に気軽に組み込むことが難しくなるでしょう。一方で、これまでは「軸がどれだけ回っているか」「軸を○度回す」などの制御はモーター単体では不可能でしたが、今回からはサーボモーター単体で±1度の精度で角度制御できるようになりました。

これまでのマインドストームで角度制御したいときには、以下の写真のような角度センサーを別途取り付ける必要があったんです。

100_0728

青いブロックが角度センサーです。実はコレ、あんまり精度がよくないし分解能も低いのですが、みんなタッチセンサーなどと上手く組み合わせてなんとか制御に使っていました。このように、これまでは角度制御する予定の可動部分にはロボットの設計段階でこの角度センサーを取り付けておく必要がありましたが、マインドストーム NXT からはあまり考えずにロボットを組むことができます。そういう意味では、制御に関してはハードウェアレベルでそれほど悩まなくてすみそうです。

角度センサーとモーターを合わせると大体サーボモーターと同じサイズですね。この二つをどうにか連結させて組み込む手間を考えたら、最初からパッケージになっているのはラクチンかも知れません。一方で、角度制御がいらない部分にもこの大きさのパーツを組み込む必要が出てきますし、この独特の形を配置するのには毎回悩まされそうです…(^^;)。そういう意味でも、従来のモーターが使える教育用セットは使い勝手がよいかも知れません。

さて、そのサーボモータの概観をちょっと見てみましょう。

100_0733 100_0735

見てわかるように、ポッチが一切なくなった代わりに何箇所かにペグを差し込む穴が用意されています。この穴を上手く使ってサーボモーターを固定しなくてはいけません。Technic 系のセットでよく遊んでいる人だったらあまり悩まないのかも知れませんが。また、サーボモーター自体をデザインの骨格に組み込むような設計が必要そうです。

サーボモーターの回転スピードや角度制御の精度などを確認する意味も込めて、簡単な装置を作ってみました。

続きを読む "モーターを動かしてみる" »