지난 포스트에 소개했던 카메라 셔터 트리거를 사용해 인터벌 촬영을 시도해 봤습니다.

  • 준비물 : DSLR, 삼각대, Arduino, 셔터트리거, 콩, 흙, 컵, 물

콩에 물을 주며 5일 가량이 지나자 싹이 올라오기 시작했습니다. 삼각대에 카메라를 설치하고 Arduino 셔터 트리거를 연결하여 준비 완료!

아래의 에니메이션 GIF가 그 결과물 입니다.

쑤<del>욱</del>

7시간 동안 10분 간격으로 촬영한 Raw이미지들을(45장 가량) ufraw-batch를 통해 일괄 변환하고,
GIMP를 사용해 프레임간격을 100ms로 설정하여 에니메이션 GIF로 만들었습니다.

조명을 잘못 생각하고 설치해서 -역광으로- 콩이 너무 까맣게 나왔네요. 🙁
하지만 인터벌 트리거 기능이 없는 펜탁스 K100D로도 이런게 가능하다는걸 확인할 수 있었습니다. 🙂

다음의 Arduino 코드를 사용했습니다.

// Arduino Interval Trigger  
// Homin Lee  
// 6-24-2008  
// https://homin.dev

#define GROUND_PIN 4  
#define FOCUS_PIN 3  
#define SHUTTER_PIN 2  
#define LED_PIN 13

// adjust following three values for interval  
long INTERVAL_HOUR = 0;  
long INTERVAL_MIN = 10;  
long INTERVAL_SEC = 0;

long previousMillis = 0;  
long interval = 0;

static void do_focus()
{  
digitalWrite(FOCUS_PIN, LOW);  
delay(800);  
digitalWrite(FOCUS_PIN, HIGH);  
}

static void do_shutter()
{  
digitalWrite(SHUTTER_PIN, LOW);  
delay(800);  
digitalWrite(SHUTTER_PIN, HIGH);  
}

static void count_led(long elaspe)
{  
if ((elaspe/1000)%2 == 0)
digitalWrite(LED_PIN, HIGH);  
else  
digitalWrite(LED_PIN, LOW);  
}

void setup()
{  
pinMode(LED_PIN, OUTPUT);  
digitalWrite(LED_PIN, HIGH);

pinMode(GROUND_PIN, OUTPUT);  
digitalWrite(GROUND_PIN, LOW);

pinMode(FOCUS_PIN, OUTPUT);  
digitalWrite(FOCUS_PIN, HIGH);

pinMode(SHUTTER_PIN, OUTPUT);  
digitalWrite(SHUTTER_PIN, HIGH);

previousMillis = 0;  
// shutter interval in ms  
interval = (INTERVAL_HOUR\*60\*60 + INTERVAL_MIN\*60 + INTERVAL_SEC)\*1000;

do_shutter();  
}

void loop()
{  
long elaspe = millis() - previousMillis;  
if (elaspe < 0) elaspe = elaspe + 2147483647; // long max value; 2,147,483,647 if (elaspe >= interval) {  
previousMillis = millis();  
do_focus(); // wake up camera  
do_shutter(); // take it!  
} else {  
count_led(elaspe);  
}  
}

-알려진 문제점 : 인터벌 타임을 체크하기 위해 millis()를 사용했는데 이 함수가 long type의 크기 제한으로 인해 7시간 이후에 오버플로우 되는 현상이 있습니다. 소스 코드의 Todo 부분에 이부분의 처리가 필요합니다.-

다음의 Arduino 012 버젼 부터는 millis의 제한이 4일 정도로 늘어난다고 하네요. long 보다 더 큰 타입을 사용하였거나, millis()의 단위를 수정했지 싶습니다.

하지만, 그와 상관 없이, 오버 플로우 되었을때 long의 최대값을 더해주어 이 문제를 수정했습니다. 위의 소스에 적용됨. 이제 무제한의 기간동안 카메라를 부려 먹을 수 있습니다. 하악하악.