■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...


AT-WALKERをPCから無線で操縦する

R80は生産中止となりました。
現在、次の無線モジュールを開発中です。

はじめに

 ここでは浅草ギ研のデータ通信用R80を使って、PCから無線でAT-WALKERを操縦する方法について考えてみます。
R80の仕様や動作についてはR80の紹介のページを参照願います。


PC側のシステム

 PCからロボットを操縦しようとする場合は、R80をPCとハード的に接続し、PC上でアプリケーションプログラムを作成する必要があります。

 PCと無線機R80とのハード的な接続は「R80のPC側のボード作成」を参照願います。

 PCのCOMポートからデータを送信するアプリケーションプログラムについては「PCから無線でデータを送信するソフトの作成」を参照願います。

 今回、PCからなんらかの命令を送って、無線を経由してその命令をAT−WALKERで受信し、命令を解読してなんらかの動きをする、という方法を考えて見ます。データの通信方向はPCからAT−WALKERへの一方方向なのでPC側の接続は下のようになります。

 <PC側接続図>

  

 PC側の実際の接続は「R80のPC側のボード作成」に詳しく紹介されています。


 以降はこれらのページの内容を実験し、理解しているという前提で話を進めます。


AT-WALKERとR80の接続

 AT−WALKER側は受信しか行わないので無線のRXDだけをつないで入ってくるデータを監視していれば良いことになります。尚、通常は信号GNDをAT−WALKERマイコンボード側とR80側で共通化する必用があります(R80の信号GND端子も接続しなくてはならない?)が、下の図では同じ電源(9V乾電池)を使いますので電源部分でGNDが共通化されているので信号GNDをつながなくても大丈夫です。

 <AT−WALKER側接続図>

  

 <実際の接続>

 以下、実際の接続例です。こうしなければならない、ということではなく、あくまで一例です。

 まず、1つの9V電池でAT−WALKERマイコンボードとR80両方を動かすために分岐ケーブルを作りました。それぞれに添付されているケーブルを合体させてます。



 信号線はRXDしか使いませんので、R80に添付されているケーブルのRXDだけに2550コネクタをつけます。黄色い線がRXDです。下の写真では圧着工具で2550コネクタ端子をつけてます。2550コネクタ関係は浅草ギ研でも販売しています。



2550コネクタを差し込みました。他のケーブルは切っても良いのですが、後で双方向やら5V電源供給をしたいばあいもあるかと思って、とりあえずまるめてます。ちなみに、R80の+5Vは50mAまでしか供給できませんのでご注意。



 AT−WALKERにR80を取り付けるためにネジ穴をあけます。穴ピッチ(R80紹介ページに寸法が出てます)を書いた紙を貼り付けて、



 φ2.5ドリルであけて、M3タップを切りました。この後、5mmスペーサとM3L8ネジでR80を取り付けました。



 AT−WALKER側の信号端子ですが、BTC067のマニュアルもしくはATmega32データシートを見ると、Rx端子は
PD0(ポートDの0番)と共用になっていますのでPD0にヘッダピンを取り付けます。PD0はボードに向かって左上になります。AT−WALKERマイコンボード上に白い字でPD0と印刷されているところです。下の写真ではPD0の左のGNDとその左の5Vにもヘッダピンをハンダ付けしてますが、コレは念のためで今回はPD0しか使いません。
 ここに、R80のRXD出力(黄色の線)をつなぎます。



 9V電池はAT−WALKERに内蔵します。9V電池の下にはサーボ用のバッテリ(近藤科学の5N−600平型がちょうど入る)が入っています。



 配線したところです。

※BTC067はAT−WALKERマイコンボードに装着された状態で販売されています。


BTC067の改造

 これで無線機の接続ができましたので、PCからAT−WALKERにデータを送れる...とはいきません。

 実は、BTC067はシリアル通信でPCからプログラムを転送しますが、PCと直接接続できるようにシリアル通信部分に電圧変換ICが入っています。上の接続ではこのICが接続されている状態なので、R80から出た受信データをそのまま入れようとすると波形が変わってしまいます。
 尚PCとマイコンのシリアル通信時の電圧の違いについては「Windowsアプリを作ってみる」で詳しく説明しています。このページのMAX232Aと同じ働きをしているのが下のMAX3313になります。



 JP1は出荷時にはつながっており、PCからプログラムが受けられるようになってます。

 下の図は実際にこの状態でR80から通信を受けたときの波形です。
 下の図のレンジは1マス2Vで、Highの状態は5Vですが、LOWが0Vではなく2.2V近辺に上がってしましました。実際にプログラムでデータを受け取ろうとしましたがこの波形では全てHighと認識されてしまい、データは受け取れませんでした。



 BTC067ではJP1の接続を切れますので、MAX3313の影響が出ないようにするために、JP1を外して実験してみます。

 基板中央右に四角に囲まれた JP1 というところがあり、ハンダが盛られています。このハンダを取り去ると接続を切ることができます。



ハンダ吸い取り線でハンダをとりました。(実際にはこの上からハンダゴテをあてます)



 JP1のハンダが取れて、接続が切られているのがわかります。

(なんか、裏側にニコチャンマークがありますね。ベステクさんの遊び心でしょうか)


 波形を観測すると、今度はきちんとLOWが0Vまで下がり、データを受け取ることができました。


 が、しかし、今度はMAX3313の接続が切られているので、新しいプロウグラムを入れようとするとAVDUDE(*1)を起動してもプログラムが転送されません。
(*1)GDLで作ったプログラムをATmega32に転送するプログラム。詳しくは浅草ギ研の書籍「二足歩行ロボット製作超入門」かBTC067のマニュアルを参照。

 この対策として、ここではJP1にプッシュスイッチを取り付けて、「プログラムを転送している間はスイッチを押す」ということにしました。




 こんな感じになりました。


これでハード的には無線通信可能となりました。


通信実験環境

 では早速通信実験をおこなってみます。
 通信をモニタするには、ATmega32で受け取ったデータをPCに表示する必要があります。また、送信側はPCを使いますので送り側と受け側で2つのPCが必用となります。もしくはPCに2つ以上のCOMポートがあれば、1つのPCでも実験することができます。今回は作業場にある1つのデスクトップPCで行うことにしました。

 通常、デスクトップPCであってもCOMポートは背面に1つだけしかないと思いますので、USB−シリアル変換アダプタを使用してもう一つCOMポートを増やしました。今回は浅草ギ研で販売しているUSB−シリアルアダプタを使用しましたが、他のものでは通信が上手くいかない場合があるようですので注意して下さい。とくに、フロー制御線まできちんとサポートしていないものは無線機との通信などができない場合があります。(PCにもともと付いているCOMを使う場合は問題なし。)

 COMを増設しましたが、USBアダプタを使う場合はその都度COMの番号が決まるのでWindowsのデバイスマネージャで番号を確認します。XPの場合、デバイスマネージャは次のようにして開けます。
「コントロールパネル」−>「その他のハードウェア」−>「システム」−>「ハードウェア」−>「デバイスマネージャ」


 ポートのところを見るとCOM1とCOM4があるのがわかります。COM1がもともとあったもの(背面のもの)で、COM4がUSBで増設したCOMポートです。上ではCOM4になってますが、私の環境だと、何回かUSBを抜き差ししてみたところ、COM5になるときもありました。

  PCからデータを送る場合はCOM1、ATmega32で受けたデータを表示させるにはCOM4を経由することにします。次で説明しますが、このために、GDLの設定をCOM4にする必要があります。


プログラム

 <PC側>

 PC側で使うプログラムは「PCから無線でデータを送信するソフトの作成」で作ったものを同じものを使用します。以下はそのリストです。詳しくはそのページを参照願います。
 尚、このプログラムは.NET FrameWork 環境のVisualC#で作られています。他の環境や言語(VisualBASICとか)を使用する場合は自分でプログラムを作る必要があります。
 C#については「Windowsアプリを作ってみる」でも解説しています。COMポートから通信を行うプログラム(AGComm.dll)の使い方と組み込み方についてはこのページを参照ねがいます。


 このプログラムでは1秒おきに A,B,C,D (ASCIIコードで65,66,67,68) のキャラクタデータを3回送っています。

<AT-WALKER側>

 通信を受けるプログラムは次のようになります。



#18行まではベステクのホームページで取得できるサンプルプログラムとほぼ同じです。ここまででシリアル通信機能の設定をおこなっており、printf関数などが使えるようになります。 #17行の通信速度ですが、今回、無線は9600bpsなのでその設定になっています。

#21行では受け取る値を入れる変数を宣言しています。

#23行で受信バッファをクリアしてます。この程度の通信ではこの行は無くても問題ありませんが念のため。この関数についてもベステクのサンプルプログラムのコメントで解説されています。

#26行でループを開始し、#28行が1バイト受け取ったら表示するところです。printf関数は、BTC067のTxラインからキャラクタデータを送信します。GDL環境の場合は簡易モニタソフトの SIMPLE TERM が付いておりGDL上から起動できますのでprintf関数で送られてた文字をみることができます。

<プログラムの転送>

 さて、プログラムの転送ですが、プログラムをAT-WALKERに送るのに、COM4を使います(AT-WALKERマイコンボードのプログラムポートをとPCケーブルをCOM4、USB-シリアルアダプタにつないでいる)のでGDLの設定が必要です。GDLでは初期値でCOM1が指定されていますので、「ツール」−>「外部ツール設定」−>「AVRDUDEATmega32)」−>「オプション等」の最後を次のようにします。



最後に -P COM4 を追加するとプログラムをCOM4から転送するようになります。

 AT-WALKERマイコンボード上のBTC067のプログラムスイッチをWrite側にして電源を入れると緑LEDが数回点滅してプログラム転送可能状態になります。PCケーブルをつないで、「上でJP1に取り付けたプッシュボタンを押しながら」AVDUDEを起動するとプログラムが転送されるかと思います。
ココを押すとAVDUDEが起動する。
正常に転送される場合は####が3本見えて終了します。
AVDUDEが開いたままでなにも起きない場合は、ケーブルが接続されているがプログラム受け入れ可能になっていない場合が多いです。
####が表示されずに一瞬のうちにAVDUDEが閉じてしまう場合は、指定したCOMが使えないか、ケーブルがつながっていない場合が多いです。SIMPLETERMが起動している場合も同様です。プログラムを転送する場合はSIMPLETERMを閉じましょう。

<SIMPLE TERMの設定>

下のアイコンを押すとシンプルタームが起動します。


これも初期値でCOM1が設定されているので設定を変えます。設定を変えるには下のアイコンを押します。


設定画面で今回使用するCOMの設定、(COM4、9600bps)にしてOKを押します。


電話から上矢印が出ているアイコンを押すと、通信を始めます。

<通信実験>

 AT-WALKERマイコンボードに載っているBTC067のプログラムスイッチをWriteと逆側にするとプログラムが走ります。まず、プログラムの#25行で START と表示させているので SIMPLE TERM に START と表示されるかと思います。

 次に、PC側、つまり送信側のセットを起動すると、送信側のR80の通信表示LEDが赤になり、AT-WALKER側のR80は緑になるかと思います。これで無線の通信が可能になりました。

 PC側のC#のプログラムを起動すると


このようなWindowが表示されるかと思います。”送信成功”はR80に対してデータを送れたことを表し、すくなくともデータを送信するのは成功していることになります。


AT-WALKER側をモニタしている SIMPLE TERM には次のように表示されるかと思います。
尚、電源を入れるタイミングによっては、R80同士が通信できない状態になっている場合があります。受信側のR80を先に電源を入れるとまず間違いなく通信できる状態になります(受信側が緑LEDになっているか確認しましょう。送信側はRTSをHighにしているので間違いなく赤になっているかと思います。)


 これでPCから送信した ABCD のデータをAT-WALKERで受信することができました。

 これらを利用して、PC側で例えばキーボードによって文字を送信し、AT−WALKER側で、ある文字を受け取ったら前進、などのプログラムを組むことにより、無線操縦ができるかと思います。実際の操縦についてはここでは行いませんが、皆様は色々と試してみてください。

 尚、このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできかねますのでよろしくお願いいたします。



2005年10月8日
 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示