LEGOラジコンモデルのプログラミング

次にプログラミングに入ります。
前ページで作った送信機のタッチセンサで前後退の命令を読み、回転センサでハンドルのきれる方向を読みます。
送信機の側のプログラム以下に示します。

ダウンロード用プログラム(上記のプログラムをNQCファイルとして保存)
送信機のプログラムはこの様な形です。
このプログラムの場合、前進側のタッチセンサが押されてる場合、後退側のタッチセンサが押されてる場合、 何もタッチセンサが押されていない場合で前進、後進、停止命令を出し、回転センサが右に回っている場合、回転 センサが左に回っている場合、何も回っていない場合で右折、左折、直進の命令を出すようになっています。
この命令をwhile文でまわして、常に現在のセンサからの入力されている値を検査します。
NQCのチュートリアル対応表
  • SendMessage():赤外線ポートを介して0〜255の情報を送信。→チュートリアル41ページ
  • SetTxPower:LOとHIを切り替えることでSendMessage()で送信する赤外線の届く距離が変化。→チュートリアル43ページ

次に本体の方のプログラミングへ入ります。
先ほどの送信機が送る情報を格納し、判別して、それぞれのモーターを駆動させます。
以下が本体のプログラムです。
メインタスク
メインタスクでは、センサ1,2,3をそれぞれタッチセンサと回転センサに割り当てる設定とタッチセンサの検知する値を未加工(RAW)モードに設定しています。
ClearMessageで一旦格納している情報をゼロに戻します。
3つのタスク(straght、turning、back)をスタートさせます。

タスク straght
タスク straghtでは、Message()に格納された受信した情報(0〜255)が1か2か3だった時に、モーター正転、逆転、停止を行います。

タスク turning
このタスクでは、、Message()に格納された受信した情報(0〜255)が4か5か6だった時に、turn right,turn left,verticalの関数を呼び出して 右折左折直進の動作をさせます。
SetPowerの命令がありますが、これはモーターの回転力を0から7の間で設定するものですが、初期設定は7であるので この場合、弱くしています。理由としては、モーターの回転力が強すぎると、回転速度も速くなり、センサが反応してからモーターが停止するまでの 時間的なラグを少なくしようとしたためです。ですが、これが仮にモーターの設定がディフォルトの7のままだったとしても たいした差は無いようなので、自分の好みで追加してください。

タスク back
ここでは、走行中に車が障害物に当たりタッチセンサが反応した時に、前のバンパなら後退、後ろのバンパなら前進します。
この時、タスク straghtをストップして、障害物回避中にはコントローラーの前後退の命令は受け付けなくなります。右左折の命令は受け付けます。
バンパに障害物が当たったときに、ビープ音を鳴らすPlaySoundも入れられています。
このif文でのSENSOR_1 < 100 というのは、タッチセンサの設定がRAWモードであるために100という値になっていて、通常のままならSENSOR_1 == 1でいいです。この場合は大きく影響しませんが、機能を拡張したい時はRAWモードで、細かい値を設定することが可能になります。
最後には、ちゃんとタスク straghtをstartさせないと、前後退ができないままになってしまいます。

turn turn_left turn_right vertical
このプログラムは、同じような物が何度かでてきました。
ここでは、タスク turningの命令からハンドルを右左にきる動作と、タイヤを垂直にする動作をします。


ダウンロード用プログラム(上記のプログラムをNQCファイルとして保存)


LEGOラジコンモデル本体プログラムフローチャート


実際にこのプログラムを書いて、ラジコンを作ってみてください。その際の本体のケーブルの配線は以下。

ちゃんと動いたでしょうか?
RCXの赤外線はRCXの黒い窓から送受信されます。
ですから、本体の方のRCXは黒い窓を後ろに向けて固定してください。そうしないとすぐ命令不能になってしまいます。
プログラムをダウンロードしてお互いのRCXの電源をいれて赤外線の届く距離へ持っていくと、RCXのディスプレイには扇型をしたマークが表示されますので、その状態なら赤外線は届くということです。
このプログラムでは送信機を何もいじっていなくても送信機からモーター停止の命令がでていますので、 ラジコンを走らせたまま、赤外線の届かないところへ進んでいってしまうと、モーター停止の命令も届かなくなってしまいますので、ラジコンが勝手にまっすぐ走っていってしまいますので気をつけてください。
注意することは、もうひとつ本体のRCXの電源を押す前にタイヤはまっすぐの状態にしておいてください。RUNするとそこのタイヤの位置が垂直の位置となります。

これからの改造ポイント


これで赤外線を使用したLEGOラジコンモデルの解説は終了します。
次からは2足歩行ロボットの製作に入りたいと思います。