カメラオタクに電子工作をさせるとカメラ用のリモコンを作り始める
— 詠み人知らず
前回は赤外線を使って一眼レフを制御した。今回は、有線リモコン(レリーズ)として使ってみたい。
有線リモコンについて
一眼カメラには大抵有線のリモコン(いわゆるレリーズ)を挿せるような穴が空いている。単純な有線リモコンの場合、中身は金属板3枚で、回路としては単純なスイッチとなっている。リモコンのボタンは本体のシャッターボタンと同じように使えて、半押しするとAFが作動し、全押しすると実際に写真が撮影される。
マイコンを搭載した高機能な有線リモコンを作りたい場合は、電気的に制御されたスイッチを使う。電気的なスイッチといえばトランジスターだが、カメラ本体とリモコン側の回路は電気的に絶縁させておくのが無難だろう。つまり、トランジスターではなくリレーやフォトカプラを使う。
また、単純なリモコンにおいては、「全押し」は「半押し」を兼ねる。つまり、シャッター側が導通している場合は常にフォーカス側も導通している。マイコン制御のリモコンを作る際は、これを守るようにしよう。
問題は、カメラに挿すためのコネクターである。カメラメーカーによってはリモコン用に独自の端子を採用しており、有線リモコンの自作にあたっての障害となっている。
その点、Canon製の一眼(入門機やミドルクラスの機種)はリモコンの端子が(オーディオにも使われる)2.5mmステレオ端子であり、有線リモコンの自作が容易となっている。他の会社のカメラにも2.5mmステレオ端子を採用しているものがあるようだ(ペンタックス等)。
各社の有線リモコンの仕様については、以下のページが詳しい:
www.doc-diy.net :: camera remote release pinout list
今回作る装置には、リモコン側にもステレオジャック(メス)を使う。つまり、カメラとの接続には汎用品の2.5mmステレオケーブルを介することになる。こうすることで、ケーブルの長さを変えたくなったときに違う長さのケーブルを買ってくるだけで済むし、ケーブルの部分さえどうにかすれば他社のカメラにも対応できる可能性が生まれる。
(適当なところを探すとそういう「一方が2.5mmステレオでもう一方がカメラメーカーの独自端子」なケーブルが売られていたりするし、最悪の場合その辺の安い互換リモコンからケーブルを引きちぎってくるという手がある。)
試作(ハードウェア面)
今回筆者が使ったパーツは次の通りである。
- 2.5mmステレオジャック
- 使ったのは MJ-070N φ2.5ジャック(ステレオメタルパネル用)
- 他には マル信無線電機 MJ-071H φ2.5ジャック(ステレオパネル用) など
- 基板上に実装できるものがあると良い気がするが、3極のものは店頭では扱っていないようだった。
- フォトカプラ
- 数年前に購入したTLP621を使用。生産終了らしいので新しく買う場合は代替品を見繕うべし。
- 2回路入りのものを使う。
- 抵抗
- M5Stackの場合、GPIOの電圧は 3.3 V である。フォトカプラのデータシートと比べて、適切な抵抗値を算出する。
- 筆者の場合は200Ω
ブレッドボードを使って配線した様子はこちら。M5Stackのボトムに生えているGPIOを使っても良いが、せっかく買ったSideBBを使ってみた。

今回はシャッター全押しに対応するピンは GPIO2 を、フォーカスに対応するピンは GPIO5 とした。別のピンを使う場合はプログラムの該当部分を書き換えることになる。
プログラム例
赤外線リモコンと比べてハードウェア側が複雑になった代わりに、プログラムの側は赤外線の場合よりも単純となる。単に対応するピンの電圧を変えれば良い。
注意点としては、最初に書いたように、シャッター側を導通させる場合はフォーカス側も導通させるようにする。
#include <M5Stack.h>
const int SHUTTER_PIN = 2;
const int FOCUS_PIN = 5;
void setup() {
M5.begin();
M5.Power.begin();
M5.Lcd.print("Camera remote");
pinMode(SHUTTER_PIN, OUTPUT);
pinMode(FOCUS_PIN, OUTPUT);
}
void loop() {
M5.update();
if (M5.BtnA.isPressed()) {
M5.Lcd.print("Trigger");
digitalWrite(FOCUS_PIN, HIGH);
digitalWrite(SHUTTER_PIN, HIGH);
} else if (M5.BtnB.isPressed()) {
M5.Lcd.print("Focus");
digitalWrite(FOCUS_PIN, HIGH);
digitalWrite(SHUTTER_PIN, LOW);
} else {
digitalWrite(SHUTTER_PIN, LOW);
digitalWrite(FOCUS_PIN, LOW);
}
}
動作の様子(動画)
実用的なリモコンを作るために
M5Stackで一眼レフのシャッターを制御する「実験」としてはこれで十分だ。ただ、もっと「実用品」に近づけたい場合は、他にも色々考えることがある。
ちゃんとしたモノにするなら、ブレッドボードじゃなくて基板に実装したい。M5Stackで使う場合は、M5Stackに積み重ねる感じにできると良さそうだ。3Dプリンターでガワを作ると良いのかもしれない。
機能面では、「単にボタンを押す」だけのリモコンではつまらない。方向性としてはいくつか考えられる:
- スマホ等からWi-FiやBluetoothで接続できるリモコンを作る
- インターバル撮影ができる高機能リモコンを実装する
- ボタンが3つでは各種パラメーターの設定が厳しい。GPIOを使って別途ボタン等を増設するか、Webサーバーを立ち上げてスマホをUIとして使う、などの方向性が考えられる。
スマホ等で制御することを考えると、M5Stackをカメラ本体か三脚に固定できると良い。そのためにはアクセサリーシュー用の足や三脚用のねじ穴があれば良さそうだ。
ピンバック: M5StackおよびM5StickCを一眼レフの赤外線リモコンにする | 雑記帳
ピンバック: M5Stackでカメラのタイマーリモコン(タイマーレリーズ)を作ってみた | 雑記帳