Message Ball Millennium Edition


概要

LEGOは、代表的な組み立てブロックおもちゃとしてご存知の方も多いと思います。子供のころ、家や、車などを作り、遊んだ方も多いのではないでしょうか?

最近では、このLEGO社が、プログラム可能なブロックキット、MindStormsというシリーズを販売し、世界的にブームになっています。

MindStormsシリーズの中でも、Robot Invention System (RIS)と呼ばれる製品は、タッチセンサーや、ライトセンサー、角度センサーなどを入力し、3個までのモーターを制御できるRCXというH8 CPUを搭載したコントローラーを持ち、簡単に自律動作するロボットを組み立てられます。

このロボットで、何かを探査させたら、愉快だろうと言うのが、今回Message Ballを作る動機となりました。

でもLego MindStormsのRCXは、ごく近くのものでも、純正部品だけでは、なかなかうまく探査できません。ライトセンサーは、全然遠目がきかないし、タッチセンサーでは棒を振りまわして、物にぶつけるなど接触による検知しかできません。

超音波や、赤外線を利用した自作センサーを作れば、結構離れた物体を検知できます。KimKosakaさんは、梵天丸にヒントを得て、RCXの一つの入力ポートにつなぎ、左右にある障害物をそれぞれ異なる入力値で表現しRCXで識別できるIR-eyeという特殊センサーを自作しました。

また、ななしのさんは、左右に異なる赤外線メッセージを交互に送信するユニットを自作し、これをロボットの上に乗せ、反射光をRCXの赤外線ポートで受信し、反射の有無でIR-eye同様に、離れた障害物を左右を分離して、検知する事に成功しました。

これらは、PIC, AVRなどの超小型RISCマイコンで製作されています。

しかし障害物は検知できても、赤外線を反射するものすべてに反応するので、特定の物体を探査する事はできません。なんとか離れた場所から「目標物」を見つけ、それを捕獲するしくみを実現したいと思い製作したのが、このMessage Ballです。


動作説明

RCXは、3つのセンサーポート以外に、赤外線で信号を送受信し、パソコンや、他のRCXなどと通信する機能を持っています。この機能のうち、RCXのプログラム動作中に認識できるものは、"Message"と呼ばれています。Messageは、1〜255の番号をつけて送り受信側でこれを識別し、条件文で分岐させることが出来ます。

Messageを使えば、センサーポートを占有することなく、第4のセンサーの替わりに赤外線ポートを使えることになります。

しかし、赤外線ポートは、信号強度をセンスすることが出来ません。Message自体は、2400bps, 8bit, 1 stop bit, odd parityで送信される38kHzで変調された、赤外線パルスのバースト信号で、既知のフレーム構造を持つものですが、受信モジュールで復調され、H8 CPUのCPUのSCI に入力されているので、正しく受け取れたか否かの、2値でしか掌握できないのです。

何かを探査しようとするときは、多少は信号強度を察知し、より信号が強くなる方向に進むほうが、良い結果をもたらすでしょう。既製品になっている受信側に細工をするのは避けたいので、送信側で出力を可変し、その強度に応じたMessageを送信することでこれを解決しました。

つまり、受信できたMessageによって、逆に届いている信号強度を察知するわけです。はじめは、PICの出力にDAコンバーターを付けLEDに流す電流を可変しました。これが初期のMessage Ballです。

しかし、38kHzのシグナルを作るとき同時にPWMをかけ、Duty比を可変すれば、DAを付けなくても同様の効果がえられることがわかりました。そうしてこの方法で実現できたのが、Message Ball v2, Message Ball v3になります。

さらに、Message Ballとして使うだけでなく、前述の赤外線障害物センサーの機能を持たせられないか検討しました。LEDを3個に増やし、円周上に120°毎に外側を向けて配置し、強度、方向毎にそれぞれ別のMessageを順番に送れば、これをRCXの上に乗せたときは、赤外線障害物センサーとして使え、直接床に置けば、Message Ballとして機能することになります。これが今回のMessage Ball Millennium Editionです。

RCXの上に乗せたときは、Message Ballからの赤外線は直接届かないので、もし、信号を受信できたとすれば、それは障害物による反射を捉えていることになります。また、方向毎にMessageが違うので左右どちらの反射かも識別が可能です。

送信するMessageは、受信プログラムで容易に処理できる様、方向を示す上位4bit、強度を示す下位4bitで割り当てました。実際これをPIC12C509に実装し、10分で自動的にSleepすることで電源の切り忘れを防ぐ機能をつけて完成させました。

方向
0x33 0x32 0x31
0x23 0x22 0x21
0x13 0x12 0x11

実際4MHzのPIC12C509では、38.4kHzは1周期が26 stepになり、これをPWMで制御しながら、2400bpsのシリアル信号のフレームを作り送信するため、ちょっとトリッキーなコードとなっています。


製作

組み立てた基板を示します。私は試作用に万能基板で作りました。JinSatoさんは、同じ回路を自作プリント基板で頒布予定です。

回路図をここに、プログラムははここに置きます。MP Lab用に書いてあります。

 

この基板を薄い円筒形の透明ケースに入れ、MindStormsのRCXを使用し作ったロボットで、探査捕獲できます。プログラム次第では、鬼ごっこの様に、1台のロボットの上に乗ったMessage Ballを、別のロボットが追いかけたり、複数のロボットが1個のMessage Ballをサッカーなどの球技の様に奪い合ったりすることも出来ます。

下のイメージはJinSatoさんよりいただいた、サッカーロボットのCADによる組立図の一部です。

赤外線受信ポートは、RCX(中央の黄色い箱状のもの)の下部についていて、前正面にもっとも強く指向性が向くよう工夫されています。

 


MindStormsの洞窟へ戻る

Google