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.
