MewProとアプリケーションの使い方

MewPro (ミュープロ) を最初に使う方法を説明します。GoPro (ゴープロ) カメラの制御の基本も説明します。今回はセンサーの説明はしません(センサーの例はこのあとのポストで説明することになると思います)。

注: MewPro は、GoPro というビデオカメラに接続して、ビデオカメラを制御するためのオープンソース/オープンハードの電子工作キットです。販売はこちらのページで行っています(もちろん、日本国内にも発送します)。


必要なもの

MewPro を GoPro のコントローラーとして使うためには次のハードウェアが必要です:

GoPro Hero 3+ Black (ゴープロ ヒーロー 3+ ブラック)
これ以外の機種は MewPro では動きません。Hero 4 Black はサポートできるはずですが、お約束はできません。
MewPro
表面実装のパーツや Herobus コネクタ、Arduino Pro Mini 3.3V 8MHz (アルドゥイーノ プロ ミニ 3.3ボルト 8メガヘルツ) がハンダ付けしてあるもの。もっと高性能なマイコンがいいのなら、MewPro のアプリケーションは Teensy 3.1GR-KURUMI をサポートしています。
Arduino Pro Mini 用の臨時 FTDI ヘッダー
このサイトのショップから MewPro をお求めの場合には、このヘッダーが商品のパッケージに含まれています。
Sparkfun FTDI Basic Breakout – 3.3V と USB ケーブル
FTDI ボードは 3.3V 版にしてください。互換品で構いません。


注意: Arduino Pro Mini の代わりに Teensy 3.1 を使う場合には、Arduino Pro Mini 用の臨時 FTDI ヘッダーと Sparkfun FTDI ボードは不要です。このサイトのショップにはArduino Pro Mini / Teensy 3.1 変換基板がありますのでご購入をご検討ください。

Teensy の場合の警告: Teensy 3.1 を MewPro で使う場合、基板の VUSB と VIN の間のパターンを切ってください (Teensy のハンダ用パッドがたくさんある側にカットするための特別なパッドとその隙間があります)。MewPro は RAW に GoPro 本体のバッテリーから約3.8Vを受けています。ですから、もし VUSB (5V) を MewPro の RAW につなぐと GoPro 本体のバッテリーに 5V がかかることになります。これでは GoPro が壊れます。

ソフトウェア:

Arduino IDE 1.5.7 beta またはそれの新版
Arduino IDE の古い版は Wire ライブラリーにバグがあるため MewPro が動きません。
MewPro アプリケーション
これはオープンソースのソフトウェアです (MIT ライセンス)。 改変や配布が好きなように行えます。


注意: あなたがもし Teensy 3.1 または GR-KURUMI を使うというのなら、あなたは間違いなく「ハッカー」です。というわけで、そんなおかたは Arduino IDE の代わりにどんなソフトウェアを使えばいいかなんてとおの昔にご存知ですね。


接続

Arduino IDE を PC にインストールし、それを起動します。Arduino IDE で [File]→[Open...]→ とし MewPro.ino を開きます。

注意: MewPro.ino には以下のファイルがタブとして含まれています。 a_Queue.inob_TimeAlarms.inoc_I2C.inod_BacpacCommands.inoe_Shutter.inof_Switch.inog_IRremote.inoh_LightSensor.inoi_PIRsensor.inoj_VideoMotionDetect.inoもし、Arduino Pro Mini の中でどんなことが起こるかを理解したいのなら、これらのファイルを読めばよいということです。

MewPro を PC に FTDI ボードと臨時ヘッダーを使って接続します。
IMG_5942
さらに GoPro Hero 3+ Black に接続します。
IMG_5943

Arduino IDE の中で次を選びます。[Tools]→[Board]→[Arduino Pro or Pro Mini]、[Tools]→[Processor]→[ATmega328 (3.3V, 8MHz)]、[Tools]→[Port]→[(FTDI を接続したポート)]. そして “Verify” をクリックして MewPro スケッチをコンパイルし、”Upload” をクリックして Arduino Pro Mini にアップロードします。

注意: Teensy 3.1を使う場合 c_I2C.ino のコンパイルができません。最初の4行を次のように変更してください。
#if defined(__MK20DX256__) // Teensy 3.1
#include <i2c_t3.h> // *** please comment out this line if __MK20DX256__ is not defined ***
#else // Arduino Pro Mini
//#include <Wire.h> // *** please comment out this line if __MK20DX256__ is defined ***


GoPro をコントロール

Arduino IDE のウインドウで “シリアルモニター” を開きます (右上隅の “虫眼鏡” アイコンをクリックします)。右下隅のプルダウンメニューで [57600 baud] を選び、真ん中のメニューは[Newline]、左はチェック入れて[Autoscroll]とします。

11.57
@‘ (アットマーク1文字) をシリアルモニターの入力窓に入力し、リターンキーを押します。

12.00
camera power on” というメッセージが表示され、GoPro Hero 3+ Black の電源がオンになります。

シリアルモニター” に表示されるメッセージは、Arduino と GoPro の間の通信の詳細を表しています。もし、これが MewPro と GoPro を初めてつないだ場合なら、あたかも間違いが起こっているかのような “>01 08” というのが繰り返して表示されます。これは MewPro のボード上にある I²C EEPROM の正しい初期化がまだされていないからです。そこで、もう1つの1文字コマンド ‘!’ (びっくりマーク) をシリアルモニターの入力窓に入力しましょう。

12.001

すると GoPro からいままでとは違うメッセージが表示されます。
12.002
“role change” というのは BacPac™ としての役割が変更になったことを表します。今回は役割が “マスター” になりました。(Dual Hero BacPac™ における役割に関しては、ちょっと前のポスト (英文) をご覧ください)。

役割が “マスター” のとき、カメラ本体のシャッターボタンは押すことができなくなっています。しかし、コンポジットビデオ信号を Herobus コネクターを通して出力させるコマンド “VO1″ を使うことができるのはこの役割のときだけです。”マスター” のとき、MewPro はこのコマンドを GoPro に向けて自動的に送出しますが、その様子が上のスクリーンショットで分かります。

次に役割を “スレーブ” に変更します。そのためには、1文字コマンド ‘!’ をもう一度入力してください。’!’ コマンドは “マスター” と “スレーブ” の役割を切り替えます。
12.003
12.010

上のスクリーンショットでは、GoPro本体からいろいろな情報が引き出せた様子がわかります。

さて、これで MewPro ボード上の I²C EEPROM は “スレーブ” として正しく設定されました。役割が “スレーブ” のときには、GoPro 本体のシャッターボタンを押すことができます。ですから、MewPro はこの役割で普段お使いになることをおすすめします。

これ以後は、Arduino から GoPro のほとんどすべての操作をすることができます。I²C コマンドの一覧は 以前のポスト (英文) にあります。

“SY1” と入力してみましょう。その次には “SY0” を入力してみましょう。 (録画が始まります! 録画が停止します!!)

もう終わりにしたければ “PW0” と入力しましょう。 (GoPro の電源がオフになるはずです。)

それではお楽しみください!


最後に注意: “SY1” コマンドは GoPro が電源投入時と異なるモードにある際には動作しません。つまり、カメラ本体の mode/power ボタンを指で押したり、”CM” (SET_CAMERA_MODE) コマンドを送出した場合、以降の “SY” コマンドは動作しなくなります。これは GoPro のファームウェアの制約で、MewPro 側ではどうにもなりません。この制約を回避するには、モードを変更する際には “DM” (SET_CAMERA_DEFAULT_MODE) で変更先のモードを指定し、”PW0” コマンドで電源をオフにします。そのあと ‘@‘ コマンドで電源をオンにすれば “SY1” コマンドが動作します。