NIKON D70用タイマーリモコン制作
EOSにも対応!!
by船長っ
○事の始まり キャノンから発売された「EOS Kiss D」につづいて04年に発売されたデジタル一眼レフ「Nikon D70」。船長っはこれを待っていました。 デジタル一眼が出始めた頃からとても興味はあったのですが、当時はウン十万と言う途方もない値段で、中古のFG−20を高校時代から使っている船長っには高嶺の花でした。そこにキャノンから10万円台で買えるデジタル一眼レフが発売になり、「これは近々Nikonからも出るな」と待っていたんです。何でNikonにこだわるのかと言うと、既にNikonのレンズを何本か持っていたから。ただそれだけです。 で、買ってみたD70ですが、シャッターボタンにレリーズを取り付けることが出来ないんですね。これは、天体写真を撮る際は大きなハンデになります。シャッターのON/OFF時にブレますからね。で、どうするのかというと赤外線リモコンを使って操作するんです。これを使うと、以前のFG−20よりも遥かに操作性が良いんです。船長っ的にはこれでもかなり満足していたんです。 D70に関しては掲示板やメールでいろんな情報(天体写真に関するもの)をいただいていたんですが、その中に「タイマーリモコンが発売された」と言うものがありました。これは便利なものが!!と思ったのですが、問題は値段だったんですね。高かったんです。材料や手間など考えると妥当な線なんですが・・・。ちょっと手が出ませんでした。 |
![]() D70はNikonから出た廉価版(?)のデジタル一眼レフ。現在はIRカットフィルターを光映舎のものに交換してあります。散光星雲の写りは格段に良くなりました。 |
○調べてみる
ちょうど、PICマイコンにハマっていて、これまたちょうど、デジタル温度計の制作に行き詰まっていたところでした。何か他に取り組める題材はないものかと思っていたんです。「赤外線リモコン」、作るのもおもしろいかもと飛びついてしまったのです。 もともと赤外線リモコンについて全くと言っていいほど知識が無かった船長っは「ふっ、結局チカチカと赤外線LEDが点滅するだけだろうよ!」と軽くみていたんですね。 早速、赤外線を「見る」ために、エビライブに使っているデジカメでリモコンの作動状況を見てみることにしました。 ・・・・馬鹿ですよねぇ、本当に船長っはアホです。「見れば点滅の状況が解る」と思っていたんです。解るわけないです。点滅は速すぎて見た目は「ピカァ」と一瞬光るだけでした。当たり前です。 で、これはイカンと調べてみたら、赤外線リモコンについてはこんなページやこんなページが出てきました。(直リンクごめんなさい) 大まかに言うと赤外線リモコンのフォーマットは家電製品フォーマットとNECフォーマットと独自フォーマットがあり、搬送波(船長っは全く理解していません・・・・)はだいたい38KHzなんだそうです。そして、ピカッと光った後に続く消灯している時間の長さで0と1の信号を区別するんだそうです。 ここまで調べても船長っの頭の中では「点滅を繰り返すだけ」と言う理解のみが渦を巻いていたのでした。 |
![]() これが純正のリモコン。2000円程度します。 |
○信号の解析 点滅させるにもその間隔を調べる必要があります。そのためのツールとソフトはこのページのものをそのまま使わせていただきました。この装置もPICマイコンで制作するもので非常にシンプルです。PCにRS232Cで接続してPC上で操作するようになっています。オリジナルではこの装置の電源はRS232Cから取るようになっていたんですが、船長っの工作が悪いのかうまく動かなかったので、船長っの場合は外部電源を接続して使うように一部変更しました。 D70用のリモコンの信号を解析した結果は下の通りでした。 bit 点灯 消灯 1 2200us 0us 2 600us 1400us 3 600us 3400us 4 600us 0us
「us」は「マイクロ秒」の意味で書いてます。要するに1us=1×10^−6秒って事ですね。この解析ソフトでの分解能は100usだそうで、600usというのは実は550usかもしれないし650usぐらいかもしれないと言うこと。また0usと表示されるのは25500us以上と言うことなんだそうです。 何回か反復して調べてみましたが、パルス数は4で、その点灯と消灯の長さは上記に近い値が出てましたので間違いないだろうと判断しました。 要するに2200usピカーっと光って消えている時間が25500us(以上)、そして次にまたピカーっと600us光って・・・を繰り返せばよいと言うこと。 ここまで解ると、船長っ的には「出来たも同然!!」・・・・・・のはずでした。
|
![]() これが「e電子工房」の記述を元に作成した解析ツール。 PCにつないで使用します。これ自体もPCからコントロールするリモコンになります。とっても役に立ちました。今後もこれで遊べそう。 |
○作ってみる
これは、案外簡単だと思いました。と言うのも、一般的なリモコン信号のパルスは最大で48以上あるらしいので、D70用のパルス数4はかなり少ないんです。 普通、リモコンの信号は「リーダー部」「カスタムコード部」「パリティー部」「データコード部」「データ部」「トレーラー部」などに分かれて全部でかなりのパルスを作る必要があるようです。こういう場合はプログラム中に0と1の2種類を出力する部分を作って、これに「101000111・・・」などとデータを送る事によってLEDを光らせるんでしょうが、船長っはそんな高級(かな?)なプログラムを作れませんので、1パルスごとに点滅を繰り返す単純なプログラムで対応しました。今回は幸運にも4パルスなのでプログラムも比較的簡単です。 PIC16F84Aというマイコンを使ってこのプログラムで動かします。まずはブレッドボード上に回路を作ってみました。これで、D70のシャッターが「ガシャ!」と降りるはずです・・・・・ |
![]() ブレッドボード上に組んでみた「タイマーリモコン」 |
○そんなに甘くない 期待に胸をふくらませて、出来たばかりの回路に取り付けたスイッチを押してみます。「・・・・・・・」、おかしい、もう一回、「・・・・・・・」ウンともスンとも言いません。プログラムを何度見直しても、解析した結果通りに点滅しているはずです。でもダメ。なんで?もしかしたら「0us」の所が本当に「0」なのでは?とも思ったのですが、そうなら、解析したときに次の点灯と区別が付くはずが無いし。または「25500us」以上と言うことなので、もっと長いのか?とも思ったのですが、あんまり長くても意味のない部分だし、2倍程度まで色々試しましたがダメでした。 デジタル温度計につづきまたも暗礁に乗り上げたか? いったいオリジナルのリモコンと何が違うんだ?と思い、最初に制作した解析ツールで信号を調べてみることに・・・。そうしたら、なんってこった!パルス数は調べるたびにテンでバラバラ、各パルスの長さもまちまち。まるででたらめに点滅しているかのような解析結果。原因は一体何?これでしばらく悩みました。回路上で発生するノイズの影響?LEDの点滅って・・そんなに敏感なの?それともLEDの応答速度が問題なのか?でもそれだったら、リモコンに使用されているLEDは特殊なものなのか?謎は深まるばかりでした。 |
○原因判明そして・・・
1週間ほどこれで悩んでいたんですが、最初に調べたホームページを読み返していたら、重要そうな事を全く反映していないことに気づきました。「搬送波は約38KHZ」これです、これ。でも、搬送波が38KHZって言われても、元々ど素人の船長っにはどうしていいやら・・・・。単純に点滅させることしか考えていなかったものですから。 ・・・・・?そう、単純に考えると38KHZの周波数でLEDが点滅している状態なんでしょうか?消えている時間はどうなんてんの? どう考えても消えているときは消えているんだろうから、じゃ光っている間、たとえば最初の2200usの間をさらに細かく38KHZで点滅させてみてはどうか?まぁ、ダメ元でやってみることにしました。 プログラム上で38KHZに相当する約26usのタイマーを作り(注)、それに従って点灯している間はこのタイマーでさらに細かく点滅させてやることにしました。 (注)最初のプログラムではLEDのONとOFFの間隔を約26usとしていたため、約19KHzとなっていたようでした。 改良版ではLEDの点滅間隔を約半分の13us程度に修正してあります。 そしたら、、、動きましたー!やりましたー!、そして感動しました。やれば出来るじゃん、船長っ! その後何回か試してみたら、失敗するケースが結構あったので、各パルスの間隔を26usで割れそうな長さに調整したら、ほとんど失敗しなくなりました。 |
○そしてタイマーリモコンへ シャッターが降りるような信号が送れるようになったので、後は比較的簡単です。目標としては連続撮影の枚数を設定して、露出時間も1分から十数分ぐらいまでを1分間隔で設定できること。欲を言えば、D70のノイズリダクション機能にも対応できること。それからついでに普通のリモコンとして使えること。 PICの達人達は「スリープ機能」を使って消費電力を格段に押さえたり、「内蔵タイマー」や「外部割り込み」などを使って正確な時間を作り出したりするんですが、船長っの知識では消費電力や時間の正確さはあんまり考慮できません。 しかし、最低でも撮影枚数と露出時間(少々の誤差はO.K)の設定はしたいところです。 PIC16F84Aは入出力に使えるポートが2つあって、一方はポートAで0〜4の5ビットがあり、もう一方はポートBで0〜7の8ビットがあります。合計13ビットが使えるんですね。このうち連続撮影シャッターボタンとLEDの発光にそれぞれ1ビットの合計2ビットを使用します。それから、撮影中のパイロットランプ(LED)にもう1ビット、単独シャッター用に1ビットで、これでもあと9ビットあります。 連続撮影時の枚数は10枚前後もあれば十分かと思い、3ビットを使用することにして1〜8枚まで設定できるようにしました。(3ビットは2の3乗で8種類設定できる) 露出時間は1分から15分程度で良いかと思い、4ビットを使用することにして1〜16分まで設定できるようにしました。 これでもまだ2ビット余っているので、もう1ビットを使ってノイズリダクションのON/OFFを設定できるようにしました。ここがONなら、露出終了後、露出時間+αの待ち時間をおいて次の露出に移るようにプログラムします。 ブレッドボードに回路を組んで動かしてみた結果、好調です。凄く良いです。露出時間の正確さに不安があったのですが、何度か調整して16分露出(960秒)の設定で960.5秒になりました。船長っ的には「オッケ〜」ってかんじです。ちなみに1分時は60.2秒でした。 あとは、ケースに入れて完成です。公開している回路図にはありませんが、電源スイッチ、電源ランプ(LED)、ノイズリダクションと信号発信中のパイロットランプ(LED)を追加しています。 プッシュスイッチの品質の問題だと思うんですが、シングルシャッター時に「シャッターが何度も押される」という現象が発生しました。おそらくスイッチのチャッタリングだと思うんですが、安いのを使ったので、仕方なく公開しているプログラムを若干修正しています。 その後、友人のY−da様のリクエストにこたえて、EOS用も作成しました。さらに搬送波の周波数が半分だったことを修正し、D70とEOS両用とするためにRA4の入力によって信号をD70とEOS用に切り替えられるように改良を施しています。 ※実際に制作したら、露出時間の誤差が大きくなっていました。おそらく、セラミック発振子の誤差があるんだろうと思います。誤差のバラツキは水晶発振を使えばかなり軽減されると思います。 |
![]() 上の方の小さな○は各状態を表すLEDです。右から「電源」、2番目(一段低い位置)は「ノイズリダクション」、三番目はリモコン信号が出るとき同時に光ります。一番左は連続撮影中に点灯します。 赤と黄色の丸いボタンは、赤が「連続撮影」、黄色が「シングルシャッター」です。 そのボタンの下の二つスライドスイッチは電源とノイズリダクションONN/OFF用のスイッチ。 中段上の四つ並んだスライドスイッチは露出時間設定用です。すべてOFFにして1分、2進数的にONN/OFFをしてすべてONの16分まで1分おきに設定できます。 その下、三つ並んだスライドスイッチは、連続撮影時の枚数の設定用です。これも2進数的に設定してすべてOFFで1枚、すべてONで8枚まで設定できます。 プログラムはこちら ※非常に頭の悪そうなプログラムですが、ご勘弁を・・・・ 回路図はこちら D70/EOS両用のプログラムはこちら ※相変わらず頭の悪そうな・・です。 改良版の回路図はこちら |
このページは「船長っの船」の一部です。トップページはこちらです。質問などありましたら、話題の寄せ鍋か船長室(いずれも掲示板です)へお願いします。船長っの能力の範囲でお答えします。