赤外線LEDでNikon一眼レフのシャッターを切る
自分のような初心者の練習に良さそうなネタなので、できるかどうかやってみた。結果としては一瞬でできた。
この手のシャッター操作の自動化はリモートコード経由で行うのが安定的で良いだろうけど、単なる遊びのために手元のリモートコードを切りたくはない。
NikonやCanonの一眼レフは、リモートコードのほかに赤外線リモコンでもシャッターが切れるようになっているので、今回はその機能を利用することにした。ちなみにリモートコードは半押しやバルブに対応しているけど、赤外線リモコンではそれはできない。
発光パターン
赤外線リモコンの仕組みはTVだろうとエアコンだろうと同じで、リモコン側はメーカー固有のパターンで赤外光をON/OFFさせて、受信側はその固有パターンを検出して反応する。
自分はNikon用の赤外線リモコンを持っていないので発光パターンを調べることができない。仕方がないので今回はすでに同じことをしている人の知恵を借りることにする。(ついでにいうと、自分はまだオシロスコープすら持ってないし、赤外線を受信できる素子も持ってないのでどっちにしろ計測は無理。)
この方の調査によると、Nikonのリモコンの発光パターンは以下のようになっているそうだ。横軸が時間。
変調
じゃあこのタイミング通りにLEDをON/OFFすれば解決かというと、話はそこまで単純ではない。赤外線リモコンの発光は変調されている。
というのも、仮に世の中の赤外線リモコンが上のような単純なパターンを送受信していたとすると、他の光源の影響をモロに受けて誤作動する可能性が極めて高いからだ。
そこで大抵のリモコンは信号を38kHzに変調して送信している。そして受信側の赤外線受信モジュールには38kHzの周辺のみを取り出すアナログフィルタがついていて、それによって他の雑多な光源の影響をリジェクトするようになっている。
変調といっても実際にやることは簡単で、38kHzの矩形波をキャリアにすればいい…….要するに下図のように波打たせる。
このようなパターンでLEDを発光させれば、カメラが反応するはずだ。
実装(簡単)
簡単に済ませたいのでArduinoでコードを書く。マイコンは、何かのおまけでもらった “Adafruit Pro Trinker” というArduino互換マイコンを使った。
ひとまずこんな感じで赤外線LEDをつないでD9ピンの電流で駆動させる。ちなみにピンによっては38kHzの速さでスイッチできないものもあるみたい。
Arduinoのコードは以下のようにフラットに書いた。 変なビット操作をしているけど、これはArduinoの digitalWrite(...)
を使うと動作が遅くて発光タイミングに影響するかもしれないのでレジスタの直接操作でピンの出力を切り替えているというだけ。
void setup() {
pinMode(8, OUTPUT);
}
void loop() {
_delay_ms(100);
for (int i = 0; i < 77; i++) {
PORTB |= B00000001;
_delay_us(13);
PORTB &= ~B00000001;
_delay_us(13);
}
_delay_us(28429);
for (int i = 0; i < 17; i++) {
PORTB |= B00000001;
_delay_us(13);
PORTB &= ~B00000001;
_delay_us(13);
}
_delay_us(1636);
for (int i = 0; i < 17; i++) {
PORTB |= B00000001;
_delay_us(13);
PORTB &= ~B00000001;
_delay_us(13);
}
_delay_us(3676);
for (int i = 0; i < 17; i++) {
PORTB |= B00000001;
_delay_us(13);
PORTB &= ~B00000001;
_delay_us(13);
}
}
一眼レフ側で赤外線リモコンの使用を有効にしておく。
Arduinoにコードを書きこんでカメラを近づけたら、あっさりとシャッターが切れた。
おわり。
FETをかます
マイコンの出力ピンで直接LEDを駆動させずに、FET (NMOSFET) でスイッチングするようにしてみた。そうしたほうが十分な電流を流せて赤外線の出力が上がる。マイコンの負荷も少ないだろう。(…というかFETを試しに使ってみたかっただけ)。
今回使った赤外線LEDは、電圧降下が1.7Vで電流は100mAくらい流しても平気のようなので、抵抗は33Ωくらいまで下げてもいい(私は47Ωを使った)。
ストロボでも同じことができそう
Nikonのクリップオンストロボは複数台のストロボを連携させられる機能をもっている。例えば、カメラのシャッターを切るときに内臓ストロボからコマンドを送出して、そのへんに置いてある複数台のクリップオンストロボを同調させて光らせる、とかができる。
この通信も赤外光なので、頑張れば自前で制御可能かもしれない。