前回に引き続き、レーザーで国際宇宙ステーション(ISS)の場所を指し示す“ラピュタの飛行石”を作ります。後編の今回は、AndroidとArduinoのアプリの開発、電子回路設計とはんだ付け、木材加工を行い、飛行石を完成させます。

AndroidとArduinoのアプリ

図4●Androidアプリのディレクトリー構造
図4●Androidアプリのディレクトリー構造
[画像のクリックで拡大表示]
写真9●Arduinoの開発ツール
写真9●Arduinoの開発ツール
Ubuntu上で飛行石のソースを開いたところ。

 今回作成したAndroidアプリのEclipseプロジェクトファイル「levistone_android.zip」は、日経Linux 2012年2月号の付録DVDに収録しています。またこちらからダウンロードできます。Android2.0以上をターゲットにした新規Androidプロジェクトを作成した上でインポートすると、すぐに飛行石のソースを参照できます。プロジェクトのディレクトリー構造を図4に示しました。

 Arduinoのアプリも、Windows、Mac OS X、Linux上で開発でき、開発環境は無償です。公式サイトの「Download」リンクをクリックし、表示されたページで利用するOSを選ぶと、圧縮された開発環境をダウンロードできます。ダウンロードしたファイルを好みのディレクトリーで解凍し、生成されたディレクトリー内の「arduino」を実行してください。「File」-「Open」を選択し、日経Linux 2012年2月号の付録DVD内の「levistone_arduino.pde」を選択すると、飛行石のソースを参照できます(写真9)。levistone_arduino.pdeを圧縮したlevistone_arduino.zipはこちらからもダウンロードできます。

 この記事ではArduino開発環境の基礎的な使い方は省略しますが、公式サイトのチュートリアルや、「File」-「Examples」-「Basic」-「Blink」(LEDの点滅プログラム)などを選択してサンプルを見ると、すぐに飛行石のソースも理解できるようになるでしょう。

 日本語の参考書やトレーニングキットも充実していますので、Amazon.comなどで「Arduino」と検索してみてください。Arduinoは安価な上に、内蔵のLEDを点滅させるだけでも大変楽しいので、プログラミング初挑戦の方にもお薦めです。

AndroidとArduinoの連携

 次にAndroidスマートフォンとArduino(Bluetooth付き)の連携方法について解説します。

 Bluetooth機器を使用する際は通常、デバイスの検出、ペアリング、接続を順に行う必要があります。しかしAndroidアプリでは検出後にいきなり接続を試みると、初回のみ自動的にペアリングモードに移行してくれるので実装が比較的簡単です。

図5●AndroidアプリでBluetooth通信を行うプログラム例
図5●AndroidアプリでBluetooth通信を行うプログラム例
[画像のクリックで拡大表示]
図6●Androidアプリからのコマンドを処理するArduinoのプログラム例
図6●Androidアプリからのコマンドを処理するArduinoのプログラム例
[画像のクリックで拡大表示]

 公式ドキュメントの通りに行えば、どのBluetoothデバイスであってもすぐに接続できます。Androidアプリで接続が確立すると、BluetoothSocketというオブジェクトを使用できるようになり、それを使ったコマンド送信は図5のように非常にシンプルです。

 受信側のArduinoもシリアル通信のサポートがしっかりしており、Bluetoothモジュール経由であっても簡単にデータを受信できます。

 後は、AndroidとArduinoの間でコマンドの仕様を共有すれば連携できます。例えば方位角180。、仰角90。に向かせたいときは「R18090」、レーザーのスイッチ制御は「S0」または「S1」のように送ることにすると、受信側のArduinoアプリは図6のようになります。

写真10●飛行石を制御するAndroidアプリのメイン画面
写真10●飛行石を制御するAndroidアプリのメイン画面

 実際にはサーボの90。と方位90。は一致しませんので、飛行石を実際に利用するときに、サーボの角度を校正(キャリブレーション)する必要があります。具体的には、Androidスマートフォンをハードウエアに正対させ、内蔵コンパスの値でリアルタイムに補正したコマンドを送信します。そのためAndroidアプリにはメイン画面(MainActivity)の他、キャリブレーション画面(CalibrateActivity)を用意しました(写真10)。実は飛行石は、ハッブル望遠鏡など他の衛星も指し示すことができ、その選択画面(TargetListActivity)もあります。

 今回は無線で済ませたかったためBluetoothを採用しましたが、長時間放置すると時々接続が切れることがあります。このため2011年の「Google I/O」で発表されたUSB接続の「Open Accessory Development Kit」(ADK)を使用した方がよい場合もあると思います。