CHDK(Canon Haker Develpement Kit)는 원래 Canon 카메라에서는 제공하지 않는 여러가지 기능을 추가할 수 있는 캐논 펌웨어 확장도구입니다.
예를 들어 히스토그램을 본다거나, RAW 파일을 저장한다던가 등 아주 많은 기능을 사용할 수 있습니다.
제가 CHDK에 관심을 갖게 된 것은 APM:Copter 등에서 CHDK를 직접 제어할 수 있기 때문입니다. 즉, 별도의 하드웨어를 장치하지 않아도 (변형된) 케이블만 있으면 조종기에서 원할 때 사진을 촬영하던가 자동 임무에서 정해진 시간/거리 마다 사진을 촬영하도록 할 수 있기 때문입니다. 자세한 내용은 여기를 읽어보시면 됩니다.
이 글은 CHDK를 설치하는 방법을 주로 다루고 있으며, 사용방법에 대해서는 아주 간략히만 다루고 있습니다. 자세한 내용은 http://chdk.wikia.com/wiki/CHDK_for_Dummies를 비롯해 원본 문서를 참고하세요.
CHDK가 지원되는 카메라
- CHDK를 사용할 수 있는 카메라
- 똑딱이 카메라만 가능. DSLR은 지원하지 않음
- 최신 제품은 없을 수도 있음
- 여기에서 확인 가능.
- 카메라에 따라 지원되는 CHDK 버전이 다름
- Firmware 버전도 맞아야 함.
- Canon 카메라의 Firmware 버전을 확인하는 방법
- SD 메모리카드의 루트 폴더에 "ver.req" 혹은 "vers.req" 라는 이름의 빈파일을 생성.
- SD 카드를 넣고 Play 모드로 카메라를 켬
- [FUNC SET]을 누른 상태에서 [DISP]를 눌러줌. ([FUNCSET] 을 누르고 [DOWN]을 눌러야 할 때도 있음)
- 화면에 아래와 같은 내용이 뜸. 여기에서 GM뒤에 있는 부분이 펌웨어버전임. B1xxx 이런식으로 써졌을 경우에는 베타버전임.
Canon PowerShot A650 IS
P-ID:315B NT D
Firmware Ver GM1.00D
NoError
Jul 6 2007 12:41:33
아래는 제가 테스트용으로 구매한 IXUS 870 IS의 펌웨어 버전을 확인해 본 모습. 펌웨어 버전이 1.02B 임.
CHDK 설치방법
- 원본은 여기 참조
- CHDK 설치전 준비사항.
- Camera Platform ID Table에서 카메라 발매년도 확인(IXUS 870 IS 는 2008)
- Firmware 버전 확인
- CHDK Download Page에서 해당 CHDK를 다운로드 받음. Stable 버전과 Unstable 버전이 있음.
- CHDK는 SD 카드에 설치. 두 가지 방법이 있음.
- Firmware Update Method
- Bootable SD Card Method
- 저의 경우에는 Bootable SD Card Method는 안되었습니다. 4가지 방법이 제시되어 있는데, 이중 첫번째 두번째 방법을 적용해 봤으나 안되더군요. 아마도 제가 사용한 SD 카드(Eye-Fi)가 좀 특수한 카드라 안되었을 수도 있고... 하여튼 여기서 포기했습니다.
Firmware Update Method
- 카메라에 원래 있는 "Firmware Update..." 메뉴를 사용하여 PS.FIR 혹은 PS.F12 파일로부터 CHDK를 읽어오는 방법.
- 가장 쉽지만, 카메라를 켤 때마다 시행해야 함.
- 참고 : 카메라 펌웨어 자체에는 전혀 변함이 없음
- SD 카드 준비방법
- 해당 카메라로 SD 카드를 포맷시킴.
- PC에서 CHDK 의 압축을 푼 뒤, 그것을 SD 카드에 넣어줌. CHDK 폴더도 SD카드에 복사. 루트 폴더에 ps.fi2 또는 ps.fir 파일이 존재해야 함(베타버전인 경우 없을 수도 있음. 이 경우에는 이방법 사용할 수 없음.)
- SD 카드를 카메라에 넣고 (Play 버튼이나 Play 스위치를 사용해서) Play 모드로 카메라를 시작함. On/Off 스위치를 사용하면 안됨
- 메뉴키를 눌러서 "Firmware Update..." 메뉴를 찾을 것. 아래 그림 참조.
- "Firmware Update..."를 선택하고 FUNC SET 버튼을 누름.
- "Update firmware version?"이라고 나오면 OK를 눌러줌. 아래 그림 참조
- 정상적으로 설치되면 잠깐 아래와 같은 화면이 스쳐갈 것임.
- 이제 Camera 모드로 들어가면 화면에 새로운 것들이 나타남.
Bootable SD Card Method
- 카메라를 켤 때마다 자동적으로 수행되도록 하는 방법
- 이 방법을 사용하려면 이 목적에 맞도록 SD 카드를 특별하게 설정해 둬야 함.
- 아래의 방법으로 포맷을 한 뒤, 카드의 잠금 스위치를 "LOCK"으로 둠.
- 그 다음 카메라에 SD 카드를 꽂고 켜면 CHDK 로고가 잠깐 나타남.
- Bootable SD 카드 준비 방법. 조금 복잡함.
- 2011 이전에 발매된 카메라는 약간 변형된 부트 블럭이 있는 FAT16 파티션이 있어야 함.
- 2011년 이후에 발매된 카메라는 FAT16 과 FAT32 모두 사용 가능하지만, 부트 블럭을 개조하는 방법이 다름
- SD 카드의 용량에 따라서도 다른 선택이 가능함.
- 4GB 이하의 경우, FAT16 으로 포맷하고, 더 큰 경우에는 500KB를 FAT16 로 파티션을 만들고 나머지를 FAT32로 포맷하는 게 좋음
- 부트블럭의 offset 0x40에 "BOOTDISK"라고 고쳐줌.
- 하나의 파티션을 경우에는 CHDK 파일들을 복사만 해두면 됨. 파티션이 두개일 경우, DISKBOOT.BIN, PS.FI2/PS.FIR 만 FAT16 파티션에 복사하고, 나머지는 FAT32 파티션에 넣어주면 됨.
- 870 IS (2011년 이전. 2009년) 4GB 의 경우
- 전체를 FAT16으로 포맷.
- 부트블럭의 offset 0x40에 "BOOTDISK"라고 고쳐줌.
- 적합한 CHDK 를 압축을 푼 뒤, 루트 디렉토리에 넣어줌
- 이 모든 과정을 STICK 유틸리티를 사용하면 한꺼번에 해결됨
STICK 사용법
- STICK (Simple Tool for Installing CHDK
- Java application. 먼저 여기에서 Java를 설치
- 여기에서 STICK 다운로드 받아 설치
- STICK 폴더에서 적당한 버전(stickx.cmd) 실행
- CHDK를 설치하고자 하는 카메라로 사진을 촬영.
- 사진을 STICK에 드래그드랍으로 넣어줌. (안되면 Browse 버튼 이용)
- 그 다음부터는 Step 2/3/4 등에 따라 필요한 버튼을 눌러주면 됨.
- Histogram 보기 - 현재 화면에 나타나는 영상에 대한 히스토그램을 보기
- RAW 파일 저장 - JPEG 파일 외에 RAW 파일을 별도로 저장
- Bracketting/HDR
- Noise 제거
- Script 읽어들이기
- CHDK script는 ubasic/Lua의 변형된 버전.
- 스크립트를 사용하면 CHKD 및 카메라 기능을 제어할 수 있음.
- <ALT>를 누르고, FUNC SET 을 누르고 "Load Script from file"을 선택한 다음 원하는 스크립트를 선택하면 됨.
- GRID 선 추가
- CHDK 비디오 기능 - M-JPEG 포맷(bitate가 높음)의 비디오 기록
- 비디오 촬영시 optical zoom 활성화
Script를 불러오는 방법
CHDK에서 원래 지원되는 새로운 기능외에도, Script를 이용하면 새로운 기능을 만들어 넣을 수도 있습니다. 여기에서는 Script를 테스트해보는 의미에서, 일정한 시간 간격으로 셔터를 터뜨리는, intervalometer 를 연습해보겠습니다.
먼저 아래 내용을 DM_intervals.bas로 저장합니다. 원본은 여기. 이 파일은 매 2초마다 5분간 사진을 촬영합니다. (총 150매) 필요하시면 수정하면 됩니다.
@title DroneMapper Intervalometer
@param a = interval (sec)
@default a 3
@param c Time active (m)
@default c 5
@param j Zoom-step
@default j -100 rem step 30 is equivalent to 50 mm SLR focal length
@param z Start delay (s)
@default z 5
rem e is time for script to remain active in milliseconds
e=c*60000
rem First shot
rem set_zoom j
rem shoot
rem Delay
for n=0 to z
print "Starting DroneMapper in: ";z-n;"s"
sleep 1000
next n
rem g is time elapsed and f is start time and p is shots
g=0
f=get_tick_count
p=0
do
set_zoom j
s = get_tick_count
shoot
sleep a*1000 - (get_tick_count - s)
g=s-f
rem t is time remaining in milliseconds
t=(e-g)/1000
p=p+1
print "DroneMapper Script Running..."
print "Interval:";a;"s; Zoom:";j
print "Time Remain:";t;"s (";c*60;"s)"
print "Shots Taken:";p;" (";c*60/a;")"
print "(Press shutter to quit)"
if g>e then shut_down
until ( 0 )
다음으로 이 파일을 CHDK 가 설치된 SD 카드에 넣어야 합니다. SD 카드를 컴퓨터에 연결하고, CHDK-> Scripts 에 이 파일을 복사해서 넣어주면 됩니다.
그 다음 이 파일을 실행시켜줘야 합니다. CHDK가 실행된 상태에서 Print 버튼(혹은 Play 버튼인 경우도 있음)을 누르면 <ALT> 모드로 들어갑니다. 이때 Menu를 누르면 아래와 같이 CHDK 메뉴가 나타나게 됩니다. 여기에서 Script... 를 누르고
그 다음 Load Script from file 를 누르고 DM_intervals.bas 를 선택합니다.
그러면 아래와 같이 DroneMapper Intervalometer 아래로 여러가지 값을 설정할 수 있습니다. interval(sec)은 사진 촬영 간격, Time active(m)은 몇분동안 작동하게 할 것인지, Start delay (s)는 처음 몇초동안 대기할 것인지를 결정합니다.
따라서 아래와 같이 설정할 경우, 처음 5초간 대기하다가 1분간 3초간격으로 촬영하게 됩니다. 총 13장이 촬영되죠.
이 상태에서 Back을 누르고 빠져 나오면 아래와 같이 <ALT> 상태가 됩니다.
여기에서 셔터를 눌러주면 이 Script가 실행됩니다. 현재 3장을 촬영했고 앞으로 40초를 더 촬영해야 한다는 등의 내용이 있네요.
여기까지.... 카메라에 CHDK는 잘 설치되었고, Script도 잘 실행되는군요. 이제 Pixhawk를 통한 제어가 남았습니다. ㅎㅎ
민, 푸른하늘