AndroidエミュレータでGainerを使う


Gainerとはユーザー・インタフェースやメディア・インスタレーションのための開発環境で、安価で多機能なUSB対応 I/Oモジュールです。
本エントリではAndroidにGainerを繋げるシステムの説明と、Gainerを使ったアプリを紹介します。

Gainerにはセンサーやアクチュエータなど、あらゆるA/Dモジュールを繋ぐ事ができます。一方で、GainerからUSB接続したPC側ではGainerに対する統一的な処理をプログラミングするだけでよく、とても簡単にあらゆるモジュールを操作できます。

Gainerを使ってみると分かるのですが、とても簡単にデバイスをプログラミングでき楽しいです。しかも、扱うデバイスを簡単に拡張、変更できるところが魅力です。

ということで、AndroidでGainerを使えるようにしました。

システム構成

全体のシステム構成はこんな感じです。

GainerとPCはUSBで接続します。
PC側にはUSB用のドライバをインストールしておきます。
ドライバとシリアル接続しAndroidへSocket通信するサーバ(GSP:Gainer Serial Proxy)を設置します。
Androidハードを持っていないのでエミュレータを使います。
GSPとSocket通信し、イベントをハンドリングするライブラリを使ってアプリケーションを作ります。

では、さっそくシステム環境を構築していきます。

環境整備

Gainerの準備

まずGainerを入手します。検索して頂ければ、オンラインで購入も可能です。自分でハンダ付けする素のGainerや、既にハンダ付けされているモノ、周辺モジュールを含んだパッケージ等が販売されていますので、適切なものを購入して下さい。
今回のアプリケーションは加速度センサー(KXM52-1050)を使いますので、それも準備して下さい。
Gainerと加速度センサーの接続は下の配線図の様になっています。

(参考:+GAINER—PHYSICAL COMPUTING WITH GAINER

ドライバのインストール

PC側のプラットフォームに対応したドライバをインストールして下さい。ドライバの説明はGainerのページ「Drivers - Gainer.cc」を参考にして下さい。私は「Mac OS X (Intel)」をダウンロードしてインストールしました。

Gainer Serial Proxy for Android

GainerとAndroidを接続するライブラリ群を作りましたので、gainer-lib-androidのDownloads/gainer_lib_android0.3.zipをダウンロードして下さい。
中に含まれる「/gainer_lib_android0.3/serial_proxy/mac/gsp」がプロキシサーバ・アプリです。
ダブルクリックで起動できます。
GSPを起動すると、このような画面が出てきます。

なお、このGSPはGainer.ccの本家で公開されているモノをベースにAndroid用に修正を加えています。

アプリケーションのダウンロード

Gainerの加速度センサーを利用したアプリとして、フライトシミュレータを作りました。ソースコードはgainer-lib-androidのDownloads/flight_gainer1.0r1_v2.zipをダウンロードして下さい。
flight_gainer/libにgainer_lib_android.jarを配置して下さい。
ダウンロードしたソースコードをEclipseで読込みます。
そして、プロジェクトのライブラリに/lib/gainer_lib_android.jarを追加して下さい。

Androidアプリの設定

AndroidでMap系アプリを使うときはGoogleからMap APIを利用するKeyを取得する必要があります。Keyの取得方法は私のブログ「AndroidでGoogle Mapsを使う最も簡単なサンプル」を参考にどうぞ。
Android Maps API Keyは/flight_gainer/res/values/settings.xmlのmap_api_keyの要素へ記入して下さい。

お疲れさまでした。これで準備完了です。
後はAndroidでGainer対応アプリを楽しむだけです^^

アプリを実行

実行順序

実行の手順は以下の通りです。

  1. GainerをPC(Mac)に接続する。
  2. GSPを起動する。
  3. Androidアプリを実行する。

この順番を間違えるとうまくいきませんのでご注意下さい。
アプリの終了順は逆順で3から順に終えていきます。
なお、AndroidアプリとGSPを通信するSocketのPort番号は初期値で2000です。
この値を変えたい場合は、GSPと同一フォルダ内にあるsetting.txtの内容を編集して下さい。GSPはこのファイルを読み込んでPort番号を設定しています。

アプリの起動

このアプリはGainerの傾きを得て飛行機の進行方向を曲げるフライトシミュレータ「Flightner」です。Flightnerを起動したらIPアドレスを問われます。ここにはPC(Mac)のIPアドレスを入力して下さい。

このIPアドレスとPort番号からGSPへSocket通信します。Flightner側のPort番号はソースコードにハードコーディングしていますので、ご自由に編集下さい(初期値は2000です)。
IPの入力が完了してOKをタップすると無事Flightnerが起動できます。

GainerのUSB側を前にして左右に傾けて下さい。
中心の飛行機が方向を変えます。
前後傾けると下降/上昇します。
デモ動画をどうぞ。


AndroidでGainer対応アプリをプログラミングする

ここで紹介したアプリは下準備さえ整えば簡単に作成できます。
基本的にgainer_lib_android.jarへパスを通すだけです。
もしAndroid上でGainerをプログラミングすることに興味を持たれましたら、Google Code:gainer-lib-androidのWiki:ProgrammingSamplesを参考に、入門してみてはいかがでしょうか?
不明な点やバグなどありましたら管理人の私に連絡下さい。

おわりに

Gainerを使うと統一的なインタフェースでプログラミングができるので、とても簡単にデバイスプログラミングが楽しめます。Androidをハード的に少し拡張してみたい場合など、Gainerはとても魅力的だと思いました。

Funnel
Gainerの後継として開発されて、今はGainerと組合わせて使えるFunnelがとても気になっている。今後はGainerに加えてFunnelもAndroidに繋げていきたいなぁと妄想しています。

添付サイズ
flightner_ip.jpg55.81 KB
flightner_demo.jpg54.55 KB
eclipse_lib_path.jpg103.97 KB
gainer_acceleration_sensor.jpg16.41 KB
gainer_android_sytem.jpg67.94 KB
gainer_image.jpg60.57 KB
gainer_serial_proxy_for_android.png49.74 KB
eclipse_lib_path.png124.89 KB

やってみています

これをみるとすごく参考になりました。
今、やってみているところです。

ちょっとだけ確認したいものがありまして、androidにgainerを拡張する時にはJavaではないとだめみたいですね。
gainerが公式サポート言語Flashなどは直接に使わないですよね。

面白!

Gainer欲しくなりましたぁ。
実機にも是非組み込みたい機能ですね→傾き&加速度センサー

KXM52-1050の出力自体はアナログ?だとしたらA/D変換はGainerですよね。

ますます興味深いですなぁ。

面白いですw

Gainerは本当に面白いです。
H/W超初心者の私でも2,3日で何とかなりました。
"簡単に"ハードを拡張でき、"簡単に"プログラミングできる。
それが私の感じたGainerの魅力です。

実機には、ユーザが"簡単に"、"自由に"、拡張できる、
ある種の特区を設けておくと面白いかもしれませんね。(というか欲しいw)

Gainerの本体はPSoCです。
とてもユニークなのが、ソフト的にデジタル・アナログ入出力ポートのレイアウトを変更できます。
調査の参考になれば…

コンテンツの配信
(c) open-mobile.jp
プライバシーポリシー