Battery Intervalometer
Talk0
539pages on
this wiki
this wiki
Redirected from Battery Miser Intervalometer
This script was written to demonstrate and test the various methods known to extend battery life when using an intervalometer (time lapse) script. These are :
- Lock the autofocus.
- Turn the backlight off.
- Turn the display off (on camera that supports that - typically models with an OVF)\
- Switch to playback mode between shots.
- Enter sleep mode between shots (on cameras with a "short cut" button)
Testing indicates that the using the first two methods will extend battery life about 20%. The other three methods can double or even quadruple battery life.
Discussion thread for this script is here : Battery Intervalometer . Save it with .lua file extension - something like miser2.lua
--[[ @title Battery Miser 6.1 @param s Interval (sec) @default s 60 @param b Turn Backlight Off @default b 0 @range b 0 1 @param d Turn Display Off @default d 0 @range d 0 1 @param p Wait in Playback Mode @default p 0 @range p 0 1 @param k Use shortcut key to sleep @default k 0 @range k 0 1 @param a Enable AF Lock @default a 0 @range a 0 1 @param l Log to File @default l 1 @range l 0 1 @param r Lens Retract Delay (sec) @default r 60 @param v Batttery Stop Voltage (mV) @default v 1000 @range v 0 10000 --]] props=require("propcase") shortcut_key="print" -- edit this if using shortcut key to enter sleep mode sleep_mode=false function restore() set_backlight(1) set_aflock(0) sleep_disable() end function sleep_enable() if( sleep_mode==false) then print("enter sleep mode via shortcut") press(shortcut_key) sleep(2000) release(shortcut_key) sleep_mode=true end end function sleep_disable() if( sleep_mode==true) then print("exit sleep mode via shortcut") press(shortcut_key) sleep(2000) release(shortcut_key) sleep_mode=false end end function log_to_file( string ) if ( l == 1 ) then print_screen(-10) print(string) print_screen(false) else print(string) end end function switch_mode( m ) -- change between shooting and playback mode if ( m == 1 ) then if ( get_mode() == false ) then print("switching to record mode") set_record(1) while ( get_mode() == false ) do sleep(100) end end else if ( get_mode() == true ) then print("switching to playback mode") set_record(0) while ( get_mode() == true ) do sleep(100) end end end end function display_off() -- turn off display by pressing DISP button print("blanking display") count=5 disp_save = get_prop(props.DISPLAY_MODE) repeat disp = get_prop(props.DISPLAY_MODE) if ( disp ~= 2 ) then click("display") sleep(500) end count=count-1 until ((disp==2) or (count==0)) if ( count>0 ) then print("display blanked") else print("unable to blank the display") end end set_console_layout(0,0,45,12) if ( l==1 ) then print_screen(-10) print(" ") print("============================================") print(os.date("%d.%m.%y %X")) print("interval=",s,"retract=",r,"AFL=",a) print("backlight=",b,"playback_idle=",p) print("display off=",d, "vbatt cutout=", v) print("sleep mode=",k,"logging=",d) print("============================================") print_screen(false) end sleep(2000) shotcount=0 interval=s*1000 retract=r*1000 b=1-b switch_mode(1) if( a == 1 ) then -- focus lock ? press( "shoot_half" ) while ( get_shooting() == true ) do sleep(100) end release("shoot_half") set_aflock(1) print( "--focus locked") sleep(500) end if ( d==1 ) then -- turn display off ? if( p==1 ) then print("**Warning: Wait in Playback mode") print("**conflicts with Display Off mode.") print("**Disabling Playback Idle mode") sleep(2000) p=0 end display_off() sleep(5000) end battery = get_vbatt() nextshot=get_tick_count() start=nextshot abort = false -- intervalometer loop starts here repeat switch_mode(1) print("short wait =", (nextshot-get_tick_count())/1000 ) while (nextshot > get_tick_count()) do set_backlight(b) sleep(500) end shotcount = shotcount + 1 tic = get_tick_count()-start nextshot = nextshot + interval lens_retract = get_tick_count() + retract log_to_file(string.format("shot:%d %2.2d:%2.2d %d.%2.2dV", shotcount, tic/3600000, (tic%3600000)/60000, battery/1000, (battery%1000)/10)) if (k==1) then sleep_disable() end shoot() sleep(200) if( p==1) then switch_mode(0) end if (k==1) then sleep_enable() end print( "next shot wait ..", (nextshot-get_tick_count())/1000 ) repeat if( (p==1) and (lens_retract < (get_tick_count()+2000) )) then switch_mode(1) switch_mode(0) lens_retract = get_tick_count() + retract end set_backlight(b) battery = (get_vbatt() + (battery*15)) / 16 if ( battery < v ) then abort=true end if ( is_pressed("menu")) then abort=true end sleep(100) until ((nextshot < (get_tick_count()+3000) ) or abort) until ( abort ) -- all done - user abort or battery below limit if( battery < v ) then log_to_file("battery limit reached") else log_to_file("user abort") end if ( d==1 ) then print("unblanking display") count=5 repeat disp = get_prop(props.DISPLAY_MODE) if ( disp ~= disp_save) then click("display") sleep(500) end count=count-1 until ((disp==disp_save) or (count==0)) end restore()