2-3일간 잘 작동하던 카메라가 특별한 이유 없이 중단 되는 경우가 있었습니다.
이럴 때는 컴퓨터와 연결을 해제해도 전혀 동작을 하지 않는 것이
마치 카메라의 펌웨어 (카메라 내부의 운영 프로그램)가 다운 된듯한 증상이었습니다.
그러나 단순히 카메라의 전원을 껐다 켜 주면 다시 잘 동작 하였습니다.
그러나 카메라가 멀리 원격지에 있다면 이 '전원을 껐다 켜는' 일이 말처럼 쉬운 일이 아닙니다.
따라서 이 일을 해 줄 수 있는 원격 스위치 하드웨어와 프로그램을 만들었습니다.
하드웨어 구성
릴레이: 전자적으로 켜고 끌 수 있는 스위치를 말합니다.
중국에서 저가 제품인 HRS4H-S-DC05V 를 구입하였습니다.
10개에 5.9 달러입니다.
저가이긴 하지만 5V 신호로서 250V 까지의 신호를 껐다 켰다 할 수 있습니다.
PC와 통신을 담당하고 릴레이에 가할 5V 전압을 만들기 위해 아두이노 나노를 사용하였습니다.
ebay 에서 개당 6달러에 구입하였습니다.
릴레이는 5핀으로 되어있는데 구조는 대동소이합니다.
평소에는 3과 5가 연결되어있다가 1과 2 사이에 5V 전압이 걸릴 때만 3과 4가 연결됩니다.

EOS 무한 전원 아답타의 7.4V 신호 라인을 끊어 릴레이에 연결하였는데
저는 통신이 되지 않을 때에도 카메라가 켜져있도록 3과 5에 연결했습니다.
그런 다음 제어를 위해 아두이노의 GND를 릴레이의 2에, D3 핀을 릴레이의 1에 연결했습니다.

모두 연결한 후에는 절연 테이프로 감았습니다.

아래와 같은 프로그램을 만들어 아두이노에 전송하였습니다.
PC와 시리얼 통신을 하여 릴레이를 제어할 수 있고 현재 상태를 PC로 전송합니다.
// N : on
// F : off
// G : sent last status
int relayPin = 3;
int incomingByte = 0;
int lastVal = LOW;
void setup()
{
Serial.begin(9600);
Serial.print("N");
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, lastVal);
}
void loop()
{
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
if(incomingByte == 'G')
{
if(lastVal == HIGH) Serial.print("F");
else Serial.print("N");
}
else if(incomingByte == 'F')
{
Serial.print("F");
lastVal = HIGH;
digitalWrite(relayPin, lastVal);
}
else if(incomingByte == 'N')
{
Serial.print("N");
lastVal = LOW;
digitalWrite(relayPin, lastVal);
}
}
}
PC 측 소프트웨어
MFC로 간단한 시리얼 통신 프로그램을 만들었습니다.
아래 라이브러리를 사용했습니다.

단순히 시리얼 통신을 통해 온 오프 명령만 전송하고 결과를 표시합니다.
동작시켜보니 잘 작동합니다.
이 원격 스위치는 전천 카메라 뿐만아니라 전등이나 모터 등 어떤 장치든 사용할 수 있을 것 같습니다.
첨부 파일로 전체 프로그램 소스 코드를 공개합니다.
추가 사항
2014-12-24
Reset 기능 추가했습니다.
COM10 이상 연결 안되는 버그 수정