はじめに
このページでは、AGB65−ANDROIDとAGB65-RSC2を使い、スマートフォンからRCサーボを動かすプログラムの作り方を説明します。前回作ったAccessoryクラスを使えば、簡単なプログラムで、スマートフォンからアクセサリにデータを送ることができます。
※以下の情報は2012年6月現在のものです。ご注意ください。
AGB65-ANDROIDについてはこちらを参照願います。
スマートフォンとの通信部分は前のページ「スマートフォンとの接続」を参照願います。
前に作ったアプリと今回のアプリを1つのスマホに混在させるとエラーが起きますので、前に作ったAGB65-ANDROIDのアプリがインストールされている場合は、「設定」−>「アプリ」からアプリを選択し、「アンインストール」しておいてください。
サンプルプログラム
サンプルプログラムはこちらになります。
サンプルプログラムのダウンロード
ダウンロードしたファイルを解凍〜スマートフォンへ書き込み、までは前のページを参照願います。
スマートフォンにプログラムを書き込んだら、AGB65-ANDROIDに電源を入れ、スマートフォンをUSB接続します。
今回はRCサーボを駆動するためのLiPoバッテリで電源を供給しています。サーボにに電源を供給するだけでなく、各AGB65とスマートフォンにも電源を供給しています。
サーボはAGB65-RSC2の#0番につないでいます。RSC2のIDはDIPスイッチで”3”に設定しておきます。RSC2の2つのジャンパピンはどちらもさします(115Kbps設定、およびバッテリ電源を基板電源へバイパス)。
アクセサリを認識すると、次の画面が出ます。
OKを押すと接続となります。尚、この時、「このUSB...」の横のチェックボックスにチェックを入れると、次回からはこのウィンドウは出ずに自動的にアプリが立ち上がります。
アプリの画面です。灰色のところで Device connedted と出ているのがわかりますでしょうか。接続時にはこのような表示を出しています。画面左上のステータス表示のところにUSBマークが出て、ハード的にUSB接続されていることも表示されます。
それぞれのボタンを押すと、それぞれのサーボ位置になります。
ケーブルを外すとタイトルには Device not connected と表示されます。
動作の様子
動画
プロジェクトの構成
プロジェクトはこのような構成になっています。ファイルは6つ。
−ソースファイル−
AGB65_ANDROID_sample2Activiti.java : アクティビティのソース
AccessoryManager.java : アクセサリとの通信関連のソース。UsbAccessoryライブラリを使用。
−アクセサリフィルタ−
accessory_filter.xml : 接続するアクセサリの情報を設定します。
−マニフェスト−
AndroidManifest.xml : ライブラリの使用の指定、USBが検知されたときに通知されるインテントの設定、など。
−画面定義ファイル−
main.xml :画面を定義するxmlファイル
−文字列定義ファイル−
strings.xml :ボタンの文字などを定義するファイル
AndroidManifest.xml / accessory_filter.xml
/ AccessoryManager.java の3つはUSB接続に関するファイルです。これらについては前のページを参照願います。
画面の構成
Androidでは、画面を構成するのに、プログラム中でJavaで記述するパターンと、xmlファイルで記述するパターンがあります。初級本などを読むとxmlファイルで記述するパターンが多いので、ここでもxmlで記述してみます。プログラムで記述するのは、ビュー(ボタンなどのコンポーネント)を動的に配置(ボタンの数が変わったりとか)する場合に使うようです。
Activity(アプリの中の1つの画面)のonCreate(画面が生成されるイベント)中で、 setCopntentView(R.layout.main); のようにして画面構成のxmlファイルを指定します。
以下、main.xml の中身です。
画面の作り方については本やインターネット情報を参照願います。
ここでは単純に1つのLinerLayoutの中に、3つのButtonを配置しています。それぞれIDがbutton1,button2.button3と付けられています。プログラム中ではこのIDでどのボタンかを判断します。
ボタンに表示される名称は、 android:text="xxx" のように指定しますが、名称は別ファイルの string.xml に記述するようです。なぜそうしているのかは私のレベルではよくわかりませんが、何か意味があるのでしょう。
アクティビティ
アクティビティを説明します。
今回はボタンを配置しますので、onCreateイベント(アプリ起動時のイベント)でボタンを生成します。33〜35行でmain.xmlのボタンに対応させています。行37で各ボタンに、「ボタンがクリックされたときのイベント」を登録しています。
次の部分が今回のポイントです。
AccessoryManagerクラスでUSBの通信を管理していますが、アクセサリにデータを送信する場合は単純にバイト配列を引数としてwriteメソッドを実行するだけです。行132の部分です。
行125〜131はAGB65-RSC2の仕様に沿ったデータパケットを作っています。
ボタンがクリックされたときのイベントを記述する部分です。イベント時に実行される部分をイベントリスナーといいます。行37で登録したものです。
ボタンなどのコンポーネントはAndroidではViewと呼ばれています。このイベントリスナーでイベントをキャッチしたときに、押されたViewの情報が v に入ります。行140のところ。
その後、行148でViewの情報からIDを取得しています。このIDはmain.xmlで記述したものです。
その他についてはプログラム中のコメントを参照願います。
さいごに
これを応用すれば、自作ロボの頭脳部分をAndroidスマートフォンで構築できるのではないでしょうか。試しに実際に二足歩行ロボを作っています。
現在は、Bluetoothを使って、もう一つのスマートフォンをコントローラにし、モーション再生で操縦していますが、AGB65シリーズのセンサーボードも搭載しているので、将来的にはクラウドを利用した自律動作もしてみたいです。余談ですが、このロボットで2012.7.15のわんだほーろぼっとかーにばるに参加予定です。わんだほーは、非常にゆるーい二足歩行ロボット大会で、作ったばかりのロボットを実験してみるには最適です。
次は受信について。センサーからのデータをスマートフォンに送り、表示させてみます。
2012年7月5日
|