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

BASICスタンプと感圧センサAGB65-4FSの接続
はじめに

 ここでは BASICスタンプIIから浅草ギ研製感圧センサーボード「AGB65−4FS(4 point Force Sensor)」を駆動してみます。

 ※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。


AGB65シリーズとAGB65−4FS

 ロボット神経システムAGB65シリーズはPCやマイコンのシリアル通信機能を使えるスキルがあれば簡単に動かすことのできるモータコントローラ、センサー群です。1つのシリアルラインを複数のAGB65シリーズで共有でき、取り外しや追加も簡単に行えますのでPCやマイコンをホストコンピュータとしたロボットの作成が容易にできます。

 AGB65シリーズについてはこちらにも情報があります。

 今回使用するAGB65−4FSは1つのセンサーボードに4つの感圧センサーを付けて、それぞれの荷重情報だけでなく、4点内の重心位置をXY座標で出力する機能もついています。

 4点感圧センサー AGB65-4FSの詳細はこちらを参照願います。<−このページは必ず参照してください。
  (以後、このページを4FSのページといいます)

 PCとマイコンのシリアル通信の電圧は違いますが、AGB65シリーズは標準ではマイコンと接続するようになっております。PCと接続する場合でもAGB65−232Cというオプションボードが用意されておりますので簡単に接続できます。下の図はマイコンとつなぐ場合のイメージです。AGB65シリーズは各ボードに固有のIDがあり、これを変更できるタイプのものは1つのシリアルラインに同じ種類のボードを複数接続することができます。4FSの場合は1つのシリアルラインに16個のボードを接続できます。

 


接続

 4FSはTTLレベル(0V/5V)でシリアル通信を行いますので、5V系のマイコンと直結できます。ということでBASICスタンプとも直結できます。スタンプはP0〜P15全てのIOピンからシリアル通信(送信か受信)をすることができますのでとりあえずP0とP1につなぎました。

  



センサーの取り付け・実際の接続

<センサ取り付け>
 まずは測定するためにセンサーを固定する必要があります。4FSのページに取り付け寸法がのってます。作業場に有った適当なアルミ板に取り付け穴をあけました。実際にはロボットの足裏や、外装の内側に取り付けることになります。
  

4点と取り付けたところです。真ん中に4箇所ネジ穴が開いてますが、これはこの裏にモジュール部を取り付けるためにあけました。モジュールの取り付け穴ピッチは25x25mm間隔です。AGB65の取り付け穴ピッチは5mm単位なので、製図をせずに、方眼紙を板に貼りつけても正確な穴があけられるかと思います。モジュール部のサイズも、ロボットへの取り付けを考慮して29x29mmと非常に小さく作りました。
  

裏面にモジュール部を取り付けたところです。
  

<電源ケーブル>
モジュールは内部5Vで動いており、7.5V以上(25Vまで)の電源が必要です。添付されている電源ケーブルは9V乾電池用のスナップがついてます。
プログラミング中はずっと通電することもあるかと思いますので乾電池を使いたくない場合はケーブルを加工して外部電源化するのもよいでしょう。私は開発中は、1Aぐらいの出力のACアダプタを使ってます。ACジャックは秋葉原の電子部品店などでも売ってます(私は千石電商で買いました。)。ACジャックと、4FSに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
  
  ※右の写真に「RSCに添付...」とありますが、4FSに添付されたものを使います。(写真使いまわし)

<通信ケーブル>
 スタンプと4FSの接続には4FSに付属の通信ケーブルを使います。これはAGB65同士を接続するように両側にコネクタが付いています。4FSを増設するときは、4FS同士を接続しますのでこのまま使いますが、マスタとの接続の場合はこのケーブルの加工が必要です。
  


 今回はスタンプをキャリアボードに挿して4FSと通信することにしましたので、ケーブルの片側にヘッダピンをハンダ付けしました。実際にはマイコンボードに合ったコネクタを自分で取り付けたり、直接マスタ側の基板にハンダ付けします。
 TXEラインはAGB65シリーズ同士をつなぐときにだけ使いますので接続しないでOKです。写真では黄色の線ですが、線の色は決まってませんので注意して下さい(別な色の場合もある。事情により。)。
  

 実際の接続は下の写真のようになりました。プログラミングのところで説明しますが、電源はBASICスタンプと4FSの両方を同じ電源を使った方が良いです。
 



その他細かい接続や注意点は4FSのページを参照願います。


プログラミング〜重心を表示するプログラム

 AGB65−4FSは、それぞれの荷重を数値で取得できるだけでなく、4点から重心を割り出してXY座標で返す機能もあります。ここでは、一番使われるであろうこの機能を使うプログラムを考えます。  


重心読み取りのフォーマットを4FSのページで確認しますと、命令60と80があります。80の方が現在の荷重を中心にセットできるのでこちらの方を使ってみます。

<命令送信フォーマット>
[255] [ID] [長(1)] [命令(80)]

<結果返信フォーマット>
[255] [ID] [長(3)] [命令(80)] [X] [Y]

とありますので、単純に4バイトの命令を送って6バイト取得するプログラムを作ります...というわけには行きませんでした。以下、ダメな例を説明した後に、OKなプログラムを紹介します。


<ダメだったプログラム>
 マイコンのプログラムをしていると、ソフトだけでなくハードの要因もありますので思いもよらないことが起こりえます。
 上の仕様から単純に下記のようなプログラムを書いてみました


'{$STAMP BS2}

RX CON 0
TX CON 1
SNC CON 255

PAUSE 1000

LOOP:

'読み取り命令発行
SEROUT RX,84,[255,100,1,80]

'結果受信
SERIN TX, 84, [B1,B2,B3,B4,B5,B6]

'結果表示
DEBUG CLS,"SNC=",DEC B1,CR
DEBUG "ID=",DEC B2,CR
DEBUG "LENGTH=",DEC B3,CR
DEBUG "COMMAND=",DEC B4,CR
DEBUG "X=",DEC B5,CR
DEBUG "Y=",DEC B6,CR,CR

PAUSE 1000

GOTO LOOP


一行目は、スタンプエディタでアイコンを押すと自動挿入される行です。
4FSのIDは出荷時設定で「100」番なので、命令80を送るのは[255,100,1,80] の4バイトとなります。
結果は6バイトで返されるので、SERIN命令でバイト長レジスタのB1〜B6に返信データを格納しようとしました。

が、このプログラムでは、受信のところでとまってしまいました。試行錯誤した結果、受信の行を

SERIN TX, 84, [B1,B2,B3,B4,B5]

と一つ減らしたら、下のように一行ズレて結果が出力されるようになりました。


本来であれば、一番初めはシンクロバイトの 255 が返されるはずですが、一番初めに入ったのは2番目のバイトの 100 が入ってます。
色々と測定した結果、実は「4FSからの応答が速過ぎて、受信準備ができる前に応答が来てしまっていた」といことでした。(普通のマイコンやPCは大丈夫です。速くても対応できます。)

スタンプの受信ラインの波形でタイミングを表してみます


BASICはインタプリタなのでSERINで「6バイト受信」というプログラムだと、6バイト受信するまでは次の行に行かなくなってしまいます。上のようなタイミングですと5バイトしか受信できないので、最後のバイトをずーっと待ってしまい、一見フリーズしたように見えてしまいます。スタンプにあまり詳しくないとかなりハマる要因ではないでしょうか。以後、別の機器(無線とか)でスタンプのシリアル通信の受信をする場合や、複数のAGB65をスタンプで駆動しようとする場合は気をつけましょう。
上の場合、たまたまシンクロバイトが255でフラットな波形だったので、2バイト目からは問題なく受信できてますがこれはたまたまです(こうゆうのもあってシンクロバイトは255にしてます)。

ちなみに、普通のCやアセンブラで記述するマイコンは、シリアル通信のピンは、始めから該当するピンを受信か送信に固定して設定しますので、このような切替のタイムラグは発生しません。また、設定などの速度も速いので問題にならないです。


<正解のプログラム>

 ということで1バイト減らして受信し、1バイトズラして表示すれば良いことになります。ということで出来たのが次のプログラムです。


'{$STAMP BS2}

'定数
RX CON 0
TX CON 1
SNC CON 255

'変数
ID VAR Byte
COMMAND VAR Byte
ID=100

'4FSが正常に起動するまで待つ
PAUSE 1000

'メインループ
LOOP:

'読み取り命令発行
COMMAND=80
SEROUT RX,84,[SNC,ID,1,COMMAND]

'結果受信
SERIN TX, 84, [B1,B2,B3,B4,B5]

'結果表示
DEBUG CLS
DEBUG "X=",DEC B4,CR
DEBUG "Y=",DEC B5,CR

PAUSE 100

GOTO LOOP


今度は、プログラムが長くなった場合を考えてデータを変数宣言して [SNC,ID,1,COMMAND] のようにわかりやすくしています。

 はじめの PAUSE1000 ですが、これは、4FSが起動する前にコマンドを送ると、正常に動作しなくなるのを防ぐのに、1秒待っています。4FSとスタンプは同じ電源を使っていますので、これで4FSが立ち上がる前にデータが送られるのが防ぐことができます。よって電源は同じものを使った方が良いです(まあロボットに積むのであれば電源は少なくすると思いますが。)

 受信は、始めの1バイトが受信できないので SERIN TX, 84, [B1,B2,B3,B4,B5] のように5バイト受信にしています。通信設定値 84 は、9600bpsで反転なし という設定になります。

 結果はXY座標だけわかればよいので、該当するレジスタだけを表示しました。DEBUGのCLSは画面クリアですので、常に左上に表示されます。

 その後、PAUSE100 としてますので、0.1秒置きにコマンドが実行され、結果が表示されます。

実際の結果は次のようになりました。

結果はこのような感じでPC上に表示されます。(DEBUG文の機能)

荷重が無い場合、命令80は初期値は127を表示します。0が最小、254が最大、127は中心位置です。任意のときに命令70を発行すると、そのときの荷重状態が中心位置に設定されます。以下、初期値のままで実験しました。

【右を軽く押した】−>Xが少し増加
 


【左を押した】−>Xが減少
 



【下を押した】−>Yが減少 
 



【上を強く押した】−>Yが大きく増加
 

となりました。



センサー取り付けのポイント

 取り付け時のポイントですが、センサー部は点なので、接触部がその点以外の場合は当然荷重を検知できません。この場合、たとえば二足歩行ロボットの足裏につける場合は、足裏が床と平行に接触する場合でないと全センサーポイントからの値を読むことができません。床が水平でない場合も同様です。これではせっかくセンサーを付けた意味が無いので、全ポイントに荷重されるように構造的に改善するしかないかと思われます。
 これは重要なポイントなので、浅草ギ研では引き続き、対象物が水平でなくても4点に荷重されるようなパーツを検討していきます。これらの情報については開発が終了しだい、4FSのページにてお知らせいたします。


おわりに

 
浅草ギ研では、4FSと同じようにコントロールできるセンサやコントローラを順次リリースする予定があります。感圧センサーだけでなく、他のセンサーやサーボモータコントローラも同様にコントロールできますので、これらを使えばロボットのアプリケーション開発に注力することができるでしょう。是非、高度なロボットを作成してみてください。

2006年4月12日

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