楽天市場
Amazon.co.jp
・ ・ ・
>>Adobe
>>SONY
>>Panasonic
>>Manfrotto
・
>>楽天市場>>ビデオ近畿
>>SYSTEM5
>>kakaku.com
【Next零 ;Key Contents】
reTMCD
*
Eye-One Display2
レンタル
*
非公式データバンク
EDIUS Bench
*
HVR-S270J
関連レポート
Article offer cooperation
* * *
ACC*Software Leading...
Hosting Management by
* * *
〜 Arduino による、自作LANCリモコン・製作レポート 〜
(提出日:13/09/14)
■ きっかけと思いつき
ビデオカメラを三脚などで利用する場合に、撮影を快適にアシストしてくれるアイテムの1つに「リモコン」がある。SONY や Panasonic のビデオカメラは、カメラを制御する為の独自のワイヤードリモコン規格をもっており、例えば SONYであれば『 LANC 』がそれにあたる。
さて、JVCの GY-HM650 を導入してから半年あまり。
この間に、実に多くのファームウェアアップデートが実施され、様々な機能が追加された。
その追加された機能の中に、「拡大フォーカス」機能がある。
この機能は、他社カメラ同様、マニュアルフォーカスを取る為に、映像の一部をビューファインダーなどに拡大表示して、シビアなピント合わせをサポートする。
拡大フォーカスはカメラの“ASSIGNボタン”に割り当てることで利用できる。
また GY-HM650 の拡大フォーカス機能は、その動作モードが3通り用意されており、
・切り替え(拡大の ON/OFFトグル)
・一時的 (ボタンを押している間だけ拡大)
・一定時間(3秒間だけ拡大)
と、ユーザーの利用シーンによって選択できる。
この中で、私は[一時的]の拡大フォーカス動作が、最も自分の撮影スタイルに適していると考えているのだが、三脚利用の時にはチョット問題を抱えている。
三脚で撮影しながらの場合は、左手はレンズリング付近に、右手はパン棒を握っているのだが、被写体を追いながらの場合だと、右手はパン棒から外せないし、左手でASSIGNボタンを押したところで、[一時的]の場合はボタンから指を離したら拡大が解除されるので、拡大画像を見ながらフォーカスを調整する事は叶わない……。
何よりも、カメラマンとしては撮影中は極力レンズ周りから指を離したくないというのが心情であり、それは他の拡大フォーカスモードを利用しても同じ事である。
<HM650では「拡大フォーカス」を[ASSIGNボタン]に割り当てられるが……。>
そこで GY-HM650 に備わっている LANC互換のリモート端子を利用して、ワイヤードリモコン操作で拡大フォーカスを機能させる方法を模索した。
自作LANCリモコン製作に乗り出すきっかけとなったのは、JVCの技術陣からヒントを頂いたことだ。
それは、「LANCリモコンで[ASSIGNボタン]のコマンドが出せるものであれば、それを介して拡大フォーカスなど、予めカメラのASSIGNボタンに割り付けた機能が呼び出せる。」という物だった。
その時は、既存のリモコンを紹介して頂いたのだが、製品価格もそこそこするため、即座の購入とはならなかった。
しかし、LANCプロトコルの[ASSIGNボタン]コマンドを利用するというのは、極めて簡潔な手段であり【答】そのものだった。
であれば、[ASSIGNボタン]コマンドが出せる LANCリモコンを自作すれば良いじゃないか? という安直な結論に至り、自作LANCリモコンを製作することにした。
■ 自作LANCリモコン製作アジェンダ
今回、自作LANCリモコン製作に当たって、行うべき工程は大きく2つある。1つは、LNACプロトコル中の[ASSIGNボタン]コマンド信号の解析。
2つ目は、解析した[ASSIGNボタン]コマンドを自家生成して発信できるようにすること。
以上である。
まずコマンド信号の解析だが、LANCプロトコル自体は、表向きは SONYと Canon だけしか正式な仕様を知らないことになっている。
様々なメーカーが LANC仕様の製品を出しているのでオープンプロトコルかと思いきや実はクローズドな規格だったのだ。
そのため、ネット上を探し回っても公式の仕様表は出て来ない。
しかし、実際には実に細かなコマンド解析表をネット上で発見できる。
これは、ユーザーが地道にプロトコルを解析した結果である。
SONYとCanon以外のメーカーで LANC製品を出しているところも、LANC信号を自社で解析したりして実装している様である。
さて、ネット上に存在する LANC仕様表に[ASSIGNボタン]のコマンドがあれば、自前でコマンド解析する必要は無くなる。
しかし、残念な事にネット上で最も詳細に解析されたと思われる、ドイツの方の“The SONY LANC protocol:(http://www.boehmel.de/lanc.htm)”にも[ASSIGNボタン]のコマンドの掲載はない。
これは恐らく、[ASSIGNボタン]コマンドが最近LANCプロトコルに追加された新コマンドだからだろう。
[ASSIGNボタン]コマンドは、2008年12月発売の SONYリモートコマンダー“RM-1000BP” の登場によって新設されたと思われる。
その証拠として、当時すでに発売されていた同社のカムコーダー HVR-S270J / Z7J に対しては、RM-1000BP対応ファームアップが後日実施されている。
先述の“The SONY LANC protocol(http://www.boehmel.de/lanc.htm)”の最終更新は「2009-05-31」となっているが、RM-1000BPによって追加されたコマンドまでは手が及んでいない模様だ。
つまりは、やはり[ASSIGNボタン]コマンドを得る為には、自己解析しかないわけである。
■ “Arduino”の採用
コマンド信号を解析するにせよ、発信するにせよ、必要になるのは“マイコン”だ。お馴染み、プログラマーの松ケンに相談してみると“Arduino”というマイコンボードを奨められた。
早速、Arduinoの概要を調べる。
・AVRマイコン採用
・I/O ポートが基板に備わっている
・C言語系統の Arduino言語による統合開発環境
という事らしい。
詳細は各自で調べて頂きたいが、私が気に入ったのは、私の様な初心者にも理解しやすいアーキテクチャの塊であると言うことだ。
勿論、初歩的なオモチャという事では無く、スタンドアロン型インタラクティブデバイスとしても電子プロトタイピング・プラットフォームとしても活用出来る柔軟さがあり、そこからの発展系はいくらでも考えられる
オープンソースハードウェアであることから、ユーザーが様々な電子回路サンプルを公開しており、また先にも列挙したように C/C++ベースのプログラミング言語であることから、開発の敷居が非常に低いのも魅力的だろう。
そもそもの Arduinoのターゲット層というのは、デザイナーやアーティストであり、そしてインタラクティブな物や環境を作りたいと考えるクリエイター達をユーザーとしている。
私の様な、思いつきでインタラクティブなデバイスを開発したいと思うホビイストにもお誂え向きのマイコンボードなのである。
つまり、今までのエンジニアやプログラマといった「技術者」向けのマイコンという存在を、より一般的な「工作人」……いわばホモ・ファベルとしての人類向けに提供されるのが Arduino という訳である(言い過ぎか!?)
さて、Arduinoにはシリーズとしていくつものマイコンボードがリリースされているのだが、試作環境を考慮して、最もベーシックな“Arduino UNO”を導入することにした。
同時に、スターターキットのような物も購入し、私なりに Arduino がどういう働きをするのか最低限を理解するために、簡単な電子回路を組んで、Arduino言語でスケッチを書いて(※スケッチとは Arduinoのプログラムを指す)、入門篇程度の知識を頭に入れてから LANCリモコン開発に臨むことにした。
■ LANCコマンドの解析
まずは、LANCコマンドの解析からである。LANCプロトコルは通信速度9,600bpsのシリアル通信を行っており、その通信を横取りするか盗み見すれば良いわけである。
幸いにして、世界には既に Arduino を用いて LANC解析を行っている先達が幾人も居るようで、その際に必要な電子回路もスケッチも公開されている。
早速、それを参考にして私も電子回路とスケッチをコピペ!
※参照:Control Your Camera: Finding out LANC remote commands:
まずは、手元にある Libec の LANCリモコン“ZC-3DV”と SONY HXR-NX5J をLANC接続。
その接続に割り込む様な形で LANCコマンド取得用のスケッチを書き込んだArduinoを介入させ、パソコンと Arduinoを USB接続。
ターミナルエミュレータの“Tera Term”を用いて、取得されるシリアルデータをバイナリで書き出した。
結果、( 00011000 00110011 )というバイナリデータを獲得した。
これは、16進法で置き換えると( 18 33 ) であり、既存の LANCコマンド表の RECコマンドと合致する。
Arduinoは正常にLANCコマンドを取得することに成功したのだ。
LANCコマンドが問題無く取得できることが分かれば、あとは本命の[ASSIGNボタン]コマンドを盗み見するだけである。
[ASSIGNボタン]コマンドを出せる、既製品は私が知る限りでは SONY RM-1000BP か Manfrotto 521LX ぐらいだ。
幸いにして、SONY RM-1000BP は、“株式会社 千里ビデオサービス”様が所有されているのを存じ上げていたので、代表の笹邊さんに連絡を取り、事情を説明させていただいた上で快く RM-1000BP を貸し出して頂けた。
まずは Arduinoを挟まずに、RM-1000BP で JVC GY-HM650 のASSIGNボタンが反応するのかをテストする。
そして、JVC技術陣の助言通り、問題なく動作する事を確認できた。
LANCの[ASSIGNボタン]コマンドを取得することは無駄足にならないことが確認できたので、早速 RM-1000BP に備わっているボタンを片っ端から押して、LANCプロトコルが出すシリアルデータを解析していく。
結果は、以下のようになった。
ASSIGN_1 | 00101000 10110001 |
ASSIGN_2 | 00101000 10110011 |
ASSIGN_3 | 00101000 10110101 |
ASSIGN_4 | 00101000 10110111 |
ASSIGN_5 | 00101000 10111001 |
ASSIGN_6 | 00101000 10111011 |
Expanded Focus | 00101000 10011111 |
FOCUS Auto/Manual | 00101000 01000001 |
FOCUS Push Auto | 00101000 01000011 |
IRIS Auto/Manual | 00101000 10101101 |
IRIS Push Auto | 00101000 10101111 |
FOCUS の Auto/Manual切替は以前より存在するコマンドだが、IRIS の Auto/Manual切替は新設。押している間だけオートアイリスやオートフォーカスが有効になる FOCUS Push Auto / IRIS Push Auto も新規コマンドだ。(※コマンド名は、便宜上 Next-Zero.com が独自に名付けた物です)
そして、最も欲しかった[ASSIGNボタン]コマンド。
ASSIGNは 1〜6までのようで、ASSIGN_7 は無い模様。
替わりに、Expanded Focus(拡大フォーカス) が固有コマンドとして設けられている。
■ LANCコマンドの生成と発信
さて、この様にして未開拓だった新設LANCコマンドを獲得することが出来た。そうすれば、次は LANCコマンドを発信するリモコンの開発である。
LANCコマンド解析に利用してきた Arduino UNO だが、これを今度はコマンド送信用のマイコンとしてリプログラミングする。
LANCプロトコルは、先にも述べた様にシリアルインターフェイスの一種だが、特徴的な仕様が含まれており、
・1本の信号線を共有する双方向通信
・接続機器の一方をマスター、他方をスレーブとする
・8byte=1packetデータとして扱う
・マスターはスレーブから送出されるフレームタイミングに同期させてコマンドを送る
などとなっていて、LANCリモコンのプログラムを組む場合も、最低限この約束を理解しておく必要がある。
特に同期を取れないとコマンドが無意味な物になったり、単線で双方のコマンドデータを送り合っているので、コマンドの衝突が発生するなどしてしまう。
我々の理解が進み、「5ms静か(HIGH)なあとに、LOを検出したら、それがスタートビットなので、106us後から、1バイト書くよ、と」 と松ケンが言えるぐらいに同期手続きを十分に咀嚼し、参考にしたスケッチにもしっかりと同期対応のプログラムコードが組まれている事が確認できたので、それをそのまま流用する形で済んだ。
LANC信号を発信するスケッチを組むのと並行して、私は電子工作の半田付け作業を行った。
電子工作と言っても、非常に初歩的なもので、抵抗器 x2・トランジスタ x1・ダイオード x1 という超簡単な物。
そこに、コマンド送信用のスイッチを入れるだけの単純な工作で、Arduino から LANC接続を行う際に間に挟む回路だ。
あとは、その基板からの出た5本の信号線を、スケッチに既述したとおりの Arduino の I/Oポートに差し込むだけである。
※参照:Control Your Camera: Arduino controlled video recording using the LANC port:
まずはテストケースとして、リファレンスとした LANCコマンダースケッチを Arduino に書き込み、先ほど作った電子回路を介して LANC端子をカムコーダに接続する。
Arduino自体は、5Vの駆動電圧を要するが それは LANC端子から供給可能で有り、別途電源を用意する必要は無い。
さて、HM650 と Arduino を LANC接続して、簡易接続したプッシュスイッチを押し込んでみる。
うまくいっていれば、スケッチ上で記述している録画コマンドが送信され、HM650 は録画を始めるはずである。
押下!
HM650に赤いRECマークが点灯。
無事に録画を始めた。
そしてもう一度ボタンを押下すると、録画停止。
それを繰り返すも、問題無く録画動作を行う事が確かめられた。
スケッチも電子回路も問題なしだ。
プロトタイプでの動作は問題無いことが証明され、目標が現実のものとして実用の形を求めてくる段階になってきた。
ここからが、松ケンと私とそれぞれでブラッシュアップと完成形を目指す作業だ。
まず松ケンには、リファレンスのスケッチをベースにした改良をお願いする。
リファレンススケッチでは、発信できるコマンドは1つだけで、またその命令の記述も、0と1ごとにコードを書き加えないといけない物だった。
そこで、LANCコマンドの複数個の登録(今回は3つのLANCコマンドを登録できる)と、先のコマンド解析で得た2進数を引数として活用するように改善。
さらに、リファレンスではボタンの長押しが無効だったので、長押しが有効な状態にしてもらう。
これはバウンジング対策用に記述されていた delay を外すだけで済む簡単なものだったが、長押しが出来るかどうかで、HM650 の使い勝手は大きく変わってくるので非常に重要な修正だった。
また、松ケンはリモコンの消費電力の点にもメスを入れてくれ、コマンドを送信していない時は消費電力が1/3程度に抑えられる様に、Sleepコードを付加してくれている。
以下に、今回製作した LANCリモコン用の Arduinoスケッチを公開する。
<Arduino用 LANCコントロールスケッチサンプル>を開く
それと並行して、私のほうは、アイテムとしての完成形を模索する。
三脚のパン棒に取り付けて、撮影の現場に馴染むようなサイズと使い勝手を必要とする。
今回、自作LANCリモコンのスイッチボタンは3つ実装することにした。
例えば、1つにRecボタンを割り当てて、もう1つに拡大フォーカスボタン、もう1つを FOCUS Push Autoボタンなどとする為だ。
またパン棒を握った手の形を極力崩さず、またブラインドで誤操作をしないボタン数が3つぐらいと判断した。
スイッチボックスの大きさは 35×60×20(mm)で小さなマッチ箱ぐらいのコンパクトサイズに全てを納めることにした。
もちろん、このサイズの箱では Arduino UNO は収納できない。
そこで、非常に小型な“Arduino Pro Mini 328 5V 16MHz”を Arduino UNO と同時に購入していた。
Arduino UNO でじっくりとプロトタイピングを行い、そのプログラム的・電子的な成果を、Arduino Pro Mini に統合するという形で、製品化(?)するという道筋を当初から計画していた。
なお、Arduino Pro Mini には幾つか種類があるのだが、駆動電圧 5V タイプを選択することで、LANC端子に掛かっている 5V電源をそのまま Arduino で利用できる。
スイッチボックスに Arduino Pro Mini や自作基板、3つのスイッチなどをお互いに干渉しないように配置。
スイッチの配置は、私がパン棒を握った時の自身の指の配置に基づいて決定。
日頃、全く意識せずにパン棒を握っている私だが、改めてどのような握り方をしているのか観察し、3つのボタンは、その指のホームポジションから極力、指を動かさないで済む様にレイアウト。
2つ並んだスイッチに関しては、スイッチの形状を互いに異なる物にする事で、ブラインドでも誤操作がない様にしている。
なお、スイッチは3色(赤・青・黄)の異なる色にしているが、オペレート上はスイッチを見て操作することはない為、同じ色でも構わない筈である。
しかし、Arduino のスケッチを書き換えて、それぞれのボタンへの割り当て機能を変更する際は、ボタンを色付きにしておいた方が、プログラム・ミスが於きにくい為に、敢えて3色ボタンにしている。
実際、スケッチ内では、
#define RedButton 2
#define BlueButton 3
#define YellowButton 4
と宣言し、
if (!digitalRead(RedButton)) {
send(B00101000, B10110001); //send a command to camera with Red Button
}
else if (!digitalRead(BlueButton)) {
send(B00101000, B10110011); //send a command to camera with Blue Button
}
などと記述している。
またボタン自体は、モーメンタリタイプで、クリック感がない物を選択。
クリック感があると、どうしてもその“カチリ”という押下動作がパン棒を伝わってカメラをブレさせてしまう為、クリック感のないボタンの方が良いと判断した。
■ 完成へ
さて、今回の自作LANCリモコン製作において、最大の障害になるか!?、と思われた事が、1つある。それは、「スイッチボックスをどうやってパン棒に固定するか?」という問題だ。
当初は、小型クランプや再結束型インシュロックタイを使うなど考えたが、クランプはサイズや重量感、インシュロックはボックスの固定強度などを考えると、あまり積極的には採用したくない手法だった。
……と、色々と手段を模索しているなかで、ふと頭に浮かんだのが「自転車用品」である。
基本的に自転車も、パン棒や三脚と同様に丸形パイプから構成されるが、そこには様々なアイテムを取り付けることが出来る。
カップホルダーやGPSユニット、傘差し……などがそうだ。
私の自転車には、LEDライトが取り付けてあり、それは自転車ハンドルのパイプに、ベルトを使ってしっかりと固定されている。
偶然にも、その LEDライトが最近故障して買い換えが必要だと考えていたので、これは使えると思い、同じ LEDライトを発注。
LEDライトは、CAT EYE“HL-EL135”というポピュラーな物で、これは、ライト本体と固定台座が分離できる構造になっている。
今回必要なのは固定台座だけなので、新品の固定台座をLANCリモコン用に徴収し、故障しているライトの台座に、新品のLEDライトを取り付けることにした。
LEDライトの固定台座は、大きく3つのパーツから構成されており、ベルト/ベルト長調整用ダイアル/ライト本体とベルトを繋ぐロック式カプラー、となる。
そのうちカプラーはベルトにネジ止めされており、そのネジを外してカプラーを取り除き、さらにそのネジ穴を再利用してスイッチボックスとベルトの間を、アルミ板で繋ぐ。
スイッチボックス側も、アルミ板とボルトで固定することで、堅牢でブレない取付をパン棒に対して行う事が出来た。
■ 自作LANCリモコンの動作確認
パン棒に実際に取り付けて、GY-HM650にLANC端子を接続して、動作をチェック。結果、問題無く LANCリモコンからのコマンドが認識されて、リモコンに割り当てた機能通りの動作をカメラが行えることを確認できた。
映像では、赤ボタンで「拡大フォーカス」、青ボタンで「フォーカスアシスト」、黄ボタンで「FOCUS Push Auto」が機能する様に設定している。
リモコンの大きさや取り付け位置も、三脚ワークを阻害しない具合に仕上がっている。
ボタンの配置は、先に述べたように私の三脚操作時のパン棒の握り方に合わせてあるだけなので、使用する人に合わせたボタンレイアウトでリモコンを製作することは難しくない。
マルチカメラ体制を踏まえて、あと幾つか同じ様な LANCリモコンを作成しようと考えている。
■ まとめ
今後の発展としては、例えばズームやフォーカスのコントロールも行えるリモコンである。シーソーレバー式にしても良いが、Manfrotto 521LX の様にジョイスティックを採用して、レバーの左右の動きでズーム、前後の動きでフォーカスなどという動きも考えられる。
ロータリーエンコーダを組み込むことが出来ればアイリスダイアルなども考えらるだろう。
これらは、Arduinoを利用すれば十分に実現できる範囲の事だ。
もっとも、そういった多機能なリモコンというのは、市販品で幾つも存在しているので、Arduino を使って製作するものは、シンプルでニッチなニーズを満たすものの方が相応しい様に思える。
今回の LANCリモコン製作では、Arduinoを中核とした工作となったが、LANC特有の同期を取るという作業以外は、極めて単純な仕事をさせているので、Arduinoには些か役不足な扱いかも知れない。
が、Arduinoの扱いやすさが、「軽い思いつき」を「形ある物」に昇華させる上では大切なファクターだったと思う。
センサーとアクチュエーターを繋ぐ“Arduino”というプリミティブでしかし重要なプラットフォームは、遍くクリエータやアーティストに、インタラクティブなデバイスを提供する事が出来る事を実感できた。
今後、私自身の日常で、Arduino を組み込んだガジェットを色々と考えつくことが出来そうで、それが非常に楽しみである。
■ 重要な追伸
なお、解析した「拡大フォーカスコマンド( 00101000 10011111 )」を GY-HM650 に送信しても HM650 の拡大フォーカス機能は反応しなかった。考えてみれば、納得できる話で、HM650は発売当初から LANCリモートはサポートしていたが、「拡大フォーカス」機能が搭載されておらず、後日のファームアップで追加実装されている。
そして、恐らくその際には HM650 に書き込まれている LANCコマンドテーブルは更新されなかったのだろう。
今回の、自作LANCリモコンからの「拡大フォーカス」動作は、一度 GY-HM650 本体の“ASSIGNボタン”に「拡大フォーカス機能」を割り当ててから、その ASSIGNボタンを自作リモコンから呼び出す形で実現している。
この際、折角 HM650 にも拡大フォーカス機能が実装されたのだから、LANCコマンドにも追加で拡大フォーカスコマンドを入れてもらえれば、リモコン利用の際に直接「拡大フォーカス」を機能させられるし、ASSIGNボタンを余計に消費しなくて済むだろう。
GY-HM650 の次回のファームアップデートの際には、是非とも LANCの拡大フォーカスコマンドを追記して頂きたい。
Special Thanks to
株式会社 千里ビデオサービス 笹邊様
参考サイト:
・The SONY LANC protocol
・Control Your Camera
・(続)Libec PH-9アダプタの製作
・J's Garage
・Arduino - HomePage
企画: ACC*visualization/Next-Zero.com
プログラム: 松ケン
※関連商品: