前回は、Androidアプリケーションを開発する際に必要な環境構築方法について説明しました。今回は、実際にアプリケーションを開発していきます。Android用のDeveloper Toolを利用して、脳波データを取得するサンプルとして、脳波データをグラフで表示するアプリケーションを開発します。
Developer Toolsをダウンロードする
NeroSky社からAndroid用のDeveloper Toolsが無料で提供されていますので、こちらからダウンロードします。
[Add to Cart]をクリックします。
注)Developer Toolsは無料で利用できますが、利用する前にメールアドレスや本人情報の入力が必要になります。
ダウンロードが完了したら、ファイルを解凍して中身を確認します。ファイルは、以下のような構成になっています。
ThinkGear.jar | Developer Tool本体 |
api_doc | ThinkGear.jarのAPIドキュメント(Javadoc) |
android_development_guide.pdf | 利用ガイド |
src | Developer Toolsのサンプルソース(HelloEEG) |
Android Projectの構築を行う
前回、構築したEclipseの環境を利用して、Android Projectを構築しましょう。こちらからProjectファイルをダウンロードして解凍します。解凍したディレクトリを見ると、以下のような構成になっています。
主なファイルとディレクトリは次のとおりです。
AndroidManifest.xml | アプリケーションを構築する際に必要な情報を定義しています |
srcディレクトリ | Javaのプログラムが格納するディレクトリです |
resディレクトリ | 画像ファイルや画面のレイアウト定義などのリソースファイルを管理するディレクトリです |
libsディレクトリ | 外部のjarファイルを格納するディレクトリです。 |
Projectをインポートする
解凍したAndroidのプロジェクトファイルを、インポートして実際に中身を見ていきます。
Androidのフォルダから、Existing Android Code Into Workspaceを選択して、[次へ]をクリックします。
Existing Android Code Into Workspaceダイアログが表示されるので、[参照]をクリック後、先ほど解凍したディレクトリを選択して[次へ]をクリックします。
プロジェクトエクスプローラーの画面に「mainActivity」が追加されたら、プロジェクトのインポートに成功しています。
ThinkGear.jarをインポートする
Neurosky社からダウンロードした、Developer Toolsを利用できる状態にするため、ThinkGear.jarをインポートします。先ほど、解凍したフォルダの中に、ThinkGear.jarというファイルがありますので、ドラック&ドップで[Main Activity]>[libs]の中に入れてみましょう。そうするとインポートされると思います。
AndroidManifest.xmlを確認してみる
AndroidでBluetoothを利用する場合、AndroidManifest.xmlにBluetoothを利用することを記述しなければなりません。AndroidManifest.xmlに以下の一文を追記することで、アプリケーション内でBluetoothが利用できるようになります。
Bluetoothを利用するため、AndroidManifest.xmlに追記しています。
レイアウトを構築する
レイアウトの構築をするには色々な手順がありますが、今回は「Graphical Layout」を利用して、レイアウト上に画像を貼り付けて作成していきます。
レイアウトに利用している画像ファイルは、[res]>[drawable-ldpi]ディレクトリの中にあります。
プログラムの中身を見てみる
[src]ディレクトリの中身を確認すると、2つのJavaプログラムがあります。
それぞれのプログラムは、以下の役割を持っています。
- ThinkGear.java:ThinkGear.javaは、脳波デバイスとBluetoothを接続したり、ThinkGearのDeveloper Toolsを利用して脳波データを取得する機能です。
- MainActivity.java:MainActivity.javaは、主に脳波デバイスの接続状況や脳波データを受け取ってグラフをダイナミックに表示する機能です。
実際のソースコードを確認しながら、もう少し詳しく見ていきます。
脳波デバイスとBluetoothの接続を行う
Bluetooth接続してイベントハンドラを登録します。
BluetoothAdapter.getDefaultAdapterメソッドで、BluetoothAdapterオブジェクトが返却されます。BluetoothAdapterがnullの場合は、デバイスがBluetoothをサポートしていない状態になります。Bluetoothとの接続に成功すると、TGDeviceのコンストラクタで、イベントハンドラの登録を行います。
脳波デバイスからデータを受け取る
Handlerクラスでは、脳波デバイスから受け取ったメッセージに対応した処理を呼び出します。
受け取ったメッセージを処理します。
取得できるメッセージの概要は、以下のとおりです。
TGDevice.STATE_CHANGE | デバイスとの接続の状態(後述) |
TGDevice.MSG_POOR_SIGNAL | デバイスとの通信状態(0~200) |
TGDevice.MSG_HEART_RATE | 心拍数 |
TGDevice.MSG_ATTENTION | 集中度 |
TGDevice.MSG_MEDITATION | リラックス度 |
TGDevice.MSG_BLINK | 瞬き |
TGDevice.MSG_LOW_BATTERY | 脳波デバイスのバッテリーが少ない状態 |
TGDevice.MSG_EEG_POWER | 脳波データのより詳細なデータ(後述) |
TGDevice.MSG_POOR_SIGNALが0の場合は、ノイズがない一番いい状態です。心拍数、集中、リラックス、瞬きの情報を取得する際には、TGDevice.MSG_POOR_SIGNALが0の状態になっている必要があります。0でない場合は、ノイズが入っている状態ですので、脳波デバイスの装着状態を確認してください。
脳波デバイスとの接続状態を取得する
TGDevice.STATE_CHANGEでは、デバイスとのステータスを取得することができます。
TGDevice.STATE_CONNECTING | 脳波デバイスと接続した |
TGDevice.STATE_CONNETED | 脳波デバイスと接続が完了した |
TGDevice.STATE_NOTFOUND | 脳波デバイスの信号を取得できない |
TGDevice.STATE_NOTPAIRED | 脳波デバイスとのペアリングに失敗 |
TGDevice.STATE_DISCONNECTED | 脳波デバイスとの通信が切断 |
より詳細な脳波データを取得する
TGDevice.MSG_EEG_POWERでは、より詳細な脳波データを取得することができます。取得できるデータと簡単な説明は以下のとおりです。
delta | 深い眠りの状態 |
theta | リラックスしている状態 |
lowAlpha | とても集中している状態 |
highAlpha | lowAlphaほどではないが、集中している状態 |
lowBeta | 日常生活 |
highBeta | やや緊張している状態 |
lowGamma | やや興奮状態 |
highGamma | イライラしている状態 |
これら詳細データは、0~16777215の数値で格納されています。詳しくは、Developer Toolsに含まれるAPIドキュメントを参照してください。
では次に、データをViewに表示させましょう。
Viewを構築する
脳波デバイスからデータを取得することができるようになったので、取得したデータをアプリケーションに表示するようにします。
脳波デバイスとの接続状況を表示します。
脳波デバイスとの接続状況は、Stringで持っています。接続状態によって表示文言を変更させたいので、ステータスによってViewの表示を変更するメソッドを呼び出しています。集中力とリラックスのグラフアニメーションを描画します。
Scaleアニメーションを利用して画像を拡大縮小します。
波などの詳細データをグラフアニメーションで描画します。
Scaleアニメーションを利用して画像を拡大縮小します。
円グラフや棒グラフをアニメーション的に表示する部分に関しては、画像を拡大したり縮小したりすることができる、ScaleAnimationを利用しています。このクラスを利用することで簡単にアニメーションを表示することが可能になります。
デバックする際の注意点
AVD(Android Virtual Device)ではBluetoothを利用したデバッグができません。Bluetoothを認識させてデバッグを行うには、実機にアプリケーションをインストールする必要があります。アプリケーションを実機にインストールするには、Android端末を販売しているメーカから提供されているUSBドライバをダウンロードしてください。
全3回にわたり、ATLの取り組みの1つである脳波に関して紹介をさせていただきました。次回からは、また新しい取り組みを紹介しますので楽しみにしてください。