인터벌 촬영이 안되도 인터벌 촬영하기
By suapapa
지난 포스트에 소개했던 카메라 셔터 트리거를 사용해 인터벌 촬영을 시도해 봤습니다.
- 준비물 : DSLR, 삼각대, Arduino, 셔터트리거, 콩, 흙, 컵, 물
콩에 물을 주며 5일 가량이 지나자 싹이 올라오기 시작했습니다. 삼각대에 카메라를 설치하고 Arduino 셔터 트리거를 연결하여 준비 완료!
아래의 에니메이션 GIF가 그 결과물 입니다.
쑤~욱~
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의 최대값을 더해주어 이 문제를 수정했습니다. 위의 소스에 적용됨. 이제 무제한의 기간동안 카메라를 부려 먹을 수 있습니다. 하악하악.