My camera was point-and-shoot Canon A1100is. I epoxied cardboard tube over the camera lens so that it could stick out through the walls of the box.
The camera was configured to take a picture every 5 seconds. If you’re a Canon user, you know that it’s not a standard functionality that comes with the camera. I used Canon Hack Development Tookit (CHDK) to program the camera. It took a bit of experimentation to come up with the following camera “upgrade” process:
Step 1. Used “STICK” utility to format the SD card and install CHDK onto it.
Step 2. My SD card was 16GB, so STICK created two partitions: one for CHDK and one for photos. I used “WASP” utility to swap the two partitions and make the right one visible to Windows.
Step 3. Copied this script to SD card, into “scripts” directory
--[[ High Altitude Balloon Camera script for Canon A1100is @title Balloon Camera @param i Shot Interval @default i 5 @range i 1 60 @param d Display @default d 0 @values d 0 1 --]] props = require("propcase") set_console_layout(1 ,1, 60, 15 ) print_screen(-1) print("HAB Camera") print(os.date()) sleep(1000) local is_record, is_video, mode_number is_record, is_video, mode_number = get_mode() mode_number = bitand(mode_number, 0xFF) if (mode_number ~= 2) then print("!!! WRONG MODE "..mode_number.." !!!") print("!!! WRONG MODE "..mode_number.." !!!") print("!!! WRONG MODE "..mode_number.." !!!") print("Set P mode and restart camera") sleep(10000) post_levent_to_ui('PressPowerButton') end -- conf.subj_dist_override_koef = SD_OVERRIDE_INFINITY if (get_config_value(108) ~= 2) then print("Enabling distance override") set_config_value(108, 2) sleep(500) end if (is_record == false) then print("Switching to photo capture") set_record(1) while (get_mode() == false) do sleep(100) end sleep(1000) end print("Setting AF-Lock") set_aflock(1) set_prop(props.AF_LOCK, 1) sleep(1000) print("Setting focus to infinity") set_focus(60000) sleep(3000) local image_count = 0 print("---") while(true) do if ((image_count == 3) and (d == 0)) then print("Turning off display...") sleep(3000) set_lcd_display(0) sleep(1000) end image_count = image_count + 1 local battery_voltage = get_vbatt() local temperature = get_temperature(0) local disk_kb = get_free_disk_space() local disk_mb = disk_kb / 1024 print("Time: "..os.date()) print("Battery: "..battery_voltage.." mV") print("Temp: "..temperature.." C") print("Space: "..disk_mb.." MB") if (disk_mb < 10) then print("Out of disk space!") break end print("Image: "..image_count) press("shoot_half") repeat sleep(50) until get_shooting() == true local av = get_av96() local sv = get_sv96() local tv = get_tv96() local bv = get_bv96() local fc = get_focus() print("Exposure: AV="..av.." SV="..sv.." TV="..tv.." BV="..bv) print("Focus: "..fc) press("shoot_full") sleep(500) release("shoot_full") repeat sleep(50) until get_shooting() == false release("shoot_half") print("File: "..get_exp_count()); print("---") sleep(i * 1000) end print("Power down") post_levent_to_ui('PressPowerButton')
Step 4. Swapped partitions again, made SD card write-protected, and put it into the camera.
Step 5. Configured camera:
- Reset all settings
- Went to settings and set:
- AF Frame = center
- AF Assist beam = off
- IS mode = off
- Mute = on
- Power saving = off
- Review = off
- Switched camera to…
- Mode dial = P
- Face select = off
- Exposure = evaluative
- Focusing zone = infinity
Step 6. Configured CHDK:
- Override subject distance = Inf
- Disable overrides on startup = off
- Enable custom ISO = on
- Minimum shutter speed = 1/500
- Load script from file = HAB_Cam.lua
- Autostart = on
- Restart on Lua error = on
Step 7. Tested it. Once the camera is switched on, it automatically loaded the script, extended the lens, and started shooting every 5 seconds. After 3 shots, it turned off LCD screen to save power. It continued shooting until it ran out of batteries or disk space on SD card.