SmartTrigger開発ストーリー

kunimasu kunimasu

myphoto
最近このアイコンに変えた人です、くにますです。
このブログでは初登場なので簡単に自己紹介します。Cerevoでは主にCEREVO LIFE、LiveShell(LiveShell PRO) DashboardでJavaScriptとかPythonとか書いてきました。早くしろという声が心なしか聞こえてきたので早速参りたいと思います。

今回はCerevo DASHで誕生し、皆様の支援があって製品化することができたSmartTriggerの開発についてご紹介します。
smarttrigger

遡ることちょうど去年の今頃でしょうか。テレビのドキュメンタリー番組を見て始めてタイムラプスというものに出会いました。ちょうどその頃はデジタル一眼レフカメラを買った頃でもあり、早速やってみたい衝動に駆られましたが純正品は高くてどれも見た目が同じようなもので物足りなさを感じました。ということで、早速作ってみようとネットで調べつつ手持ちのものでなんとかできる方法を探したところ、AndroidとArduinoで出来るというところにたどり着きました。詳しい方法は割愛しますが、フォトカプラなど使って電気的にスイッチの回路を作ればフォーカスやシャッターができるというところを理解し早速試作を作ることにしました。

まず最初に作った試作は、Arduino UnoとUSBホストシールドを組み合わせ、MicroBridgeを使ってAndroidからシャッターをリモートコントロールするという1点に注力です。MicroBridgeは、ADKに対応していないような古いバージョンのAndroidでも動くように組み込みのADB実装を提供し、AndroidとArduino間の通信を可能にするライブラリです。Arduino Androidで検索すると情報量も多くお手軽に始められると思います。必要なライブラリは、MicroBridgeページのDownloadからMicroBridge-Arduino.zipを取得して、解凍した後にできるAdbディレクトリをArduinoから見えるパスにおくという感じです。使い方は簡単で、TCPサーバをAndroid内で起動し、Arduino内ではAdbライブラリを使ってサーバーに接続をするだけです。そうするとAndroidから何かデータが飛んでくる度に、接続時に渡したハンドラーが呼ばれ、独自の処理を実装することができます。サンプルもDownloadページにあるServoControl.zipでAndroid、Arduino側それぞれ参考にすることが出来ます。
この頃はまだAndroidからArduino、Arduinoからデジタルカメラまでの全てがケーブルで接続されている試作でした。
prototype1

Cerevo DASHで公開する前に今度はmbedを使って試作を作りました。Arduinoから変わった理由がなんだったかはわすれましたが、NXP LPC1768を使ってみようとかBluetoothのライブラリを使おうといったポジティブな理由だった気がします。Arduino版の一号機から改良された点は、実際にBluetooth通信を行いSPPプロファイルでAndroidとデータのやりとりを行うというものでした。mbedにはmyBlueUSBという素晴らしいライブラリがあって、それを使うことでUSB、Bluetooth周りの面倒な部分をある程度お任せして自分の実装したい部分に集中できるメリットがあります。Androidアプリの方は、サンプルとしてBluetoothChatが存在するので、それを参考にすれば大きく開発が進むと思います。
当初は単3電池を使った試作。レリーズ端子をCanon EOS Kissにつなげて実際にリモート撮影、タイマー撮影、タイムラプス、ジャンプ撮影できるところまで開発。
prototype2

え、また?と思いになるかもしれないですが試作機はArduinoに戻ります。試作3作目からBLE(BTLEというのかな)を使うようになりました。最近ではBLEに関する情報が増えてきて、FacebookにもGroupがあるくらい開発者にとって環境が整ってきたと思います。SmartTriggerではムラタエレクトロニクス社のBLE Singleモジュールを登載しています。詳しいことは言えませんが、BLEモジュール製品ページにも書かれている通りUARTインターフェースでコマンドやりとりをするだけなので、Arduinoを使ってシリアル通信をした経験がある方であれば容易に開発できると思います。プロファイルはSmartTrigger開発者ページで紹介している通りカスタムプロファイルで、SmartTriggerとアプリ間でやりとりされる基本機能はすべてカスタムプロファイルの特定Service下のCharacteristicsに割り当てられています。
prototype3

iOS側の開発はもっぱらCoreBluetoothとの戦いになるのですが、その戦いもAppleさん提供のサンプルコードやAPIリファレンスを駆使し、それに加え弊社でもSmartTrigger用アプリ作成のサンプルコードを提供していますので、SmartTrigger開発者情報ページを参照して頂ければと思います。
SmartTriggerに限らずですが、Cerevo製品の多くはファームウェアのアップデートで製品の改良を日々続けています。SmartTrigger自体もファームウェア更新を行うため、インターネットに繋がる環境であれば最新のファームウェアが存在するかチェックします(* 一応工場出荷ファームウェア且つアプリでチュートリアルを実行すると、アプリに同梱されたファームウェアでまず更新するという機能もあります)。ファームウェアや更新有無のチェックURLの先はAmazon S3なので、LiveShell(LiveShell PRO)同様今回もAmazonさんにはお世話になりっぱなしです。さらにヘルプページもS3にデプロイしているのでもう頭があがりません。iOSではキャッシュが強力的なのでキャッシュポリシーを自前で設定するか、S3側でCache-Controlを設定してあげる必要がありますが、今回は両方とも対処しているのでキャッシュが残ってファームウェアが更新できないとかヘルプページが古くてっという状況は起きないと思っています。
また、ヘルプページに関して1点頑張った点が。SmartTriggerは赤一色のLEDが1つのみなので現在のステータスを伝えるにも限界があります。それに点滅の意味を覚えたりするのも難しいかと思います。そこでLEDの点滅がどういうことを意味しているかを示すページを作りました。”LED点灯を確認する”をクリックすることでページ内の該当するSmartTriggerのLED部分が赤く点灯/点滅し状況を伝えてくれます。さらに、ヘルプしたいのにインターネットに接続できないからヘルプできないということを避けるため、オフラインの場合はアプリ内に同梱されたヘルプでオンラインと同等の情報を確認することが出来る作りになっています。

さて、製品化が決定し、さらなる試作を作るにあたり3Dプリンターで実際の製品サイズにしてみたり、電子基板を何度も起こしてみたりといった工程を経て着々と進むSmartTriggerですが、実際に製品として世に出すには事務的な作業がいくつか必要になります。Bluetoothのリソース(Bluetoothと謳うことやロゴを使うこと)を使うためにはBluetooth SIGへの登録が必要なのですが、ムラタエレクトロニクス社のモジュールを使っている関係で、最終製品としての登録を済ませるだけでいいのでコスト的にも手間的にも大変助かりました。End Product Listingといわれる登録作業はBluetooth.org内で行い製品に必要な情報(製品名や会社名、製品の説明や写真など)を登録すると問題なければ数日の内に承認されます。しかしアプリの審査は一筋縄ではいきませんでした。審査スタッフがテストをするためには、BluetoothアクセサリとしてSmartTriggerを、それに接続するアプリとそしてデジタルカメラをも審査に提出する必要があり荷物をまとめて送ったのですが、通関時に色々もめてしまい一ヶ月近く審査開始までに時間を消費してしまいました。審査は一発OKでパスしリリースに間に合いましたが、ドキドキハラハラの日々は忘れられません。

最後に、製品化し皆様のお手元に届くまでに繰り返した試作は大きく上記のような行程を経ていますが、スマホ側のアプリ開発の工程も少なくありません。実際に列挙してみるとSmartTrigger製品版iOSアプリ以外に、最初期の原理試作Arduino向けのAndroidアプリ・Cerevo DASH公開用iOSアプリ・SmartTriggerのファームウェアを実装するためのデバッグに特化したiOSアプリ・SmartTriggerの工場量産時テスト用iOSアプリ、といった種類のアプリが支えになり、途中で役目を終えていくアプリもありましたが、ハード、ソフト共に多くの行程を経て、今年2月末に皆様に無事お届けできました。

開発ブログではありますが、一言お礼申し上げます。
製品化を信じご支援くださいまして、ありがとうございました。引き続きSmartTriggerをよろしくお願いします。
SmartTrigger Facebook Page