はじめに
前のページでは、無線機R80をつかってPCからAT−WALKERを動かす方法について解説しましたが、ラジコンプロポのような感じで携帯型のコントローラが作れると楽しそうです。ここではAT−WALKEの無線コントローラを作ってみます。せっかくなのでコントローラもATmega32で作ってみます(このページでは面倒なのでAT−WALKERのキットのマイコンボード流用してますが、本に書いてある方法で自作も可能です。)。
尚、 ここで使用するAT-WALKEについてはAT-WALKERの紹介ページを参照願います。尚、AT−WALKERの製作・プログラミングの基本については書籍「二足歩行ロボット製作超入門:オーム社」(以下「本」)を参照願います。
コントローラの作成
ハードウェア詳細は
■R80との接続関連−>「AT−WALKEをPCから無線で操縦する」「微弱無線モジュールR80の紹介」
■スイッチの判定−>「本」の5−1、タッチセンサーのところ
を参照願います。本を一通りやった方はそんなに難しくないかと思います。
AT−WALKERマイコンボード(以下マイコンボード)とそれぞれの接続は今回、下記の通りにしました。
R80のTX : マイコンボードのTX(PD1)
R80のRTS : PB6
プッシュスイッチx8個 : PA0〜PA7
プッシュスイッチ8個をポートAに接続しており、ポートAを一回読めば各キーの状態が全部わかるというものです。(8個のキーが各ビットに対応している)
回路図は割愛します。その他、電源やGNDなど、当然配線してます。スイッチとATmega32の接続は本に詳しく書いてます(5章)。無線関係は他のページを見てください。
実際に作成したものは下の写真のようになりました。
ゲームスイッチ(以下キー)は、通常は1KΩ抵抗で5Vにプルアップされており、スイッチを押すとGNDに導通するようになっています。つまり、通常は「1」でキーを押すと「0」が入力されます。このスイッチは千石電商で売ってます。結構安かった。
R80を送信にするにはRTS端子をHighにします。今回、こちらのコントローラ側は常に送信なのでRTSを抵抗経由でHighにプルアップでもよかったのですが、送信毎にLEDが光るとカッチョいいのでPB6ピンでわざわざRTSコントロールをすることにします。−>と思いましたが、後で実験してみるとRTS切替後の1バイトがこけるので通信できず。よってRTSは常にHighにしてます。RTSはPB6ではなくプルアップしても同じです。このような場合は普通はソフト的に解決しますが、今回は簡単に済ませた。
まず、無線無しで、キーの値が取得できているかを確認するプログラムを作りました。キーはPA0−PA7、つまり同じポートにつながってますのでポートAの値をそのまま出力すればどのキーが押されたかわかります。スイッチは押すと「0」で負論理なので、結果を「11111111」とXORし、ビット単位で反転させて正論理にします。
XORの真理値表
元の数 |
演算する数 |
結果 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
演算する数は「1」で固定なので、元の数(ビット)が0なら1、1なら0になる。
XORのC言語の記号は^です。(カタカナの「へ」のキー)
プログラムは次の通り。
※書いている途中なので不要なコードも入ってます。
※resultの変数宣言が間違ってますね。でも変数が作られてるようです。
本をクリアして、RCサーボの駆動もマスターしている状態ならば難しいところは無いと思います。
キーはポートAに次のように接続しています。
結果は次の通り
各キーを押すと上の写真の番号が結果として得られます。
この形式のキー入力で優れているのは、複数のキーを組み合わせることもできるということです。つまりこの8コのキー=8ビットで256通りのコマンドが入力できるということです。1つのキーが1ビットに対応しているわけですね。
オレンジ上と下を同時に押すと0x03が、緑と黄色を同時に押すと0xC0が...という具合になります。まあ、実際には256通りもモーションを作るのはしんどいのでだれもやらないと思いますが。。
キー入力が確認できましたので、TXピン(PD1)を通してR80にデータを送るプログラムが次のようになりました。
TXからデータ送信といっても、あらかじめ関数ができているのでそれを使うだけ(putc()関数で1文字送信)です。使い方はベステクのサンプルコードをみるとわかります。
通信毎にLEDを光らせたかったのですが、やってみるとRTS切替後の一発目の通信がコケるようで、やはりRTSは常にHighにしてます(行38)。
ソースコードはこちら PANDAM_S_CON.c (右クリックで対象を保存)
これでコントローラ側の完成です。
今回、あまり詳しく解説(とくにハード)してませんが、本やら他のページやらを参照してください。
ロボット側の作成
受信側、つまりロボット側ですがコレは基本的には「AT−WALKEをPCから無線で操縦する」でやったものと同じ考え方です。エレキ系はそちらのページを参照願います。
今回、フレームも新作にしました。とりあえず作ったのはこんな感じ。AT−WALKERの上にR80を取り付けて、その上に段々にフレームを重ねてサーボ3つ追加してます(計7個)。
サーボはPRS3401+浅草ギ研製メタルホーンを使ってます。このメタルコーンですが、作ったとたんにメーカー(JR)からローハイトメタルホーンが出て、全然売れてないというもの。ウチのはメーカーのよりバックラッシュが無いんですがねぇ。
なんだこの手のひねりは???(A5052の1.5mm厚をペンチで強引に曲げてます。疲れた、)
と、思った方がいると思いますが、
またやってしまいました。
この、手の角度を調整するのに一時間...何をやってるんだか...
起き上がりなどの機能的な構造はまったく考えられていない、かわいさだけを追求したフレームです。
とりあえず、パンダム−Sと命名。
このパンダのぬいぐるみは普通のサイズと小さいのとありますがこれは小さい方です。小さい方でも背中を切ればAT−WALKERにかぶせられます。(しかし、このパンダはUFOキャッチャーには置いてないようです、だいぶ前から。レンタルボックスでまれに売られている。)
実はデモ用なので外部電源仕様になってます(首にACアダプタを挿す)。
背中は太いゴムひもでつないでます。
それではコントローラからのデータを受信してモニタしてみます。プログラムですが、「AT−WALKEをPCから無線で操縦する」
でテストしたものと同じものを使いました。
送受信が固定なので、ロボット側(受信側)の電源を入れた後に、コントローラ側(送信側)の電源を入れます。正常に通信できる状態になれば、送信側LEDが赤、受信側が緑になります。順番を逆にすると受信側が緑になりません(受信状態にならない)。
上のプログラムをロボット側に入れて、シンプルタームで結果を表示したのが下のようになります。
オレンジの左右キーを同時に押したところです。0x04と0x08のキーを同時に押したので0x0Cが表示されました。
ということで後は受信したデータを動きに割り当てていけばよいだけです。
モーション、操作結果
マイコンを使ってRCサーボを駆動するには基本的にタイマと割り込みを使って、RCサーボの信号線に特定のパルス信号を加えます。このあたりのプログラムは本の方に詳しく書いてあります。
モーションデータを関数化しておき、受信したデータによってswitch文でモーションを呼び出せばロボットを操縦することができます。
今回のロボットはデモ用なので、外部電源で動きっぱなしになることが想定されます。AT−WALKERは小さいので、足部のサーボを脱力しても倒れません。よって、動作毎にサーボを脱力させることにしました。上の482行のように、割り込みを不許可にすればサーボ駆動用の割り込みルーチンが呼び出されないのでパルスがフラット=サーボ脱力となります(パルスフラットはサーボによっては脱力でないものもありますので注意。S03Tは脱力します。)。逆に、モーションに飛んだときにこのTIMSKのOCIE1Aをセットすればパルスが発生してサーボが動かせるようになります。
※特殊レジスタの特定のビットを1にすることを「セット」、0を「クリア」と表現します。ATMEL(ATmega32のメーカー)では。
ロボットにより、モーションデータの数値は違うと思いますので、全プログラムを紹介してもあまり意味が無いと思われますが、念のため、全プログラムはこちらになります。
PANDAM_S_ROBO.c (右クリックで対象を保存)
いろいろなプログラムを切り貼りしてつくったので、一部不要な変数などもありますので注意して下さい。
ということで、映像をアップしておきます。下の写真をクリックすると見れます。
自分で言うのもナニですが、かなりかわいいです。
AVIファイル5.8MB
ちなみに、このパンダムは初代パンダムと交代で、秋葉原のツクモロボット王国さんで客寄せパンダとして働いてます。お立ち寄りの際は是非、操作してみてください。
2005年11月18日
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできかねますのでよろしくお願いいたします。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
|
|
|