Arduino intervalometer for Digital Cameras

This intervalometer / remote timer has been built and based on code kindly provided by “the roaming drone” and then modified :) . The main function of this intervalometer system is to allow automated exposure control of the camera using the bulb mode by varying the length of the control pulse that keeps the shutter open using an external light sensor to calculate the correct camera settings. When used for time lapse photography it should minimise the dreaded flicker that occurs when Av or TV modes are used to adjust the exposure over a long time lapse sequence.

img_3902

The Box

As the system is based on the Arduino mega microprocessor I decided to expand the options available to me by including the Toas TSL230R IC for exposure control using bulb and iso ramping and the DS1307 RTC for pre-programming a shooting sequence. The automated bulb ramping and iso ramping functions are being developed to cater for the lighting changes that occur during dawn and dusk without manual intervention so that the shutter speed and iso settings can be adjusted together without changing the exposure.

img_3905

The in’s and out’s

Reprogramming the Arduino allows me to do pretty much anything I want with my cameras so I’ve no doubt it will be used for a lot of projects. A simple ramping intervalometer programme can be found here

The code is written to avoid any delay() type functions so it is non-blocking and the keybuttons remain fully functional even when the camera is being controlled.

Currently the box is programmed to control the Camera shutter and focus functions, it has a feedback circuit triggered by the flash socket on the camera which confirms the camera fired. It can manually or automatically vary the shutter speed in bulb mode from as little as 60 milliseconds to days.

img_3907

I won’t even begin to describe how the dynamic exposure metering works but would highly recommend Chris’s website for a wealth of information.

Inside the aluminium project box:

  • An Aduino Mega microprocessor.
  • A 2200 mAH rechargable lithium battery for standalone use.
  • A DS1307 RTC (real time clock).
  • A Taos TSL230R frequency to light convertor IC
    that handles the exposure control.
  • A 20 x 4 backlit LCD display.
  • 5 momentary push buttons
  • A green ‘shutter open’ led
  • A lot of wire and stuff.

img_3904

img_3903

The Taos TSL230R IC

The basic interface to the camera shutter and focus using 4N35 opto isolators to remove any possibility of unwelcome voltages getting into the camera.

digital_sw

Typical interface using the 4N35 opto isolator

Things to do:

  • Improve the user interface and the GUI.
  • Develop the bulb ramping and iso ramping process to allow the system to adjust the exposures during sunsets and sunrises.
  • Interface the Arduino to a netbook so the DSLR Remote Pro library can be used to adjust camera parameters, again without touching the camera.
  • Add HDR functionality for bracketing photographs across the boundary of 30 seconds. i.e avoiding the need to touch the camera to switch from manual to bulb modes.
  • Add the schedule programmming for non-attended shooting.
  • Sort out a method to retain the last user settings in the EEPROM memory

This is the first post on the project and a lot more will follow :)


23/05/10 – First test with the new system

Time lapse – Arduino ramping Test from Kevin Lewis on Vimeo.

A time lapse test with the Arduino control system taken from 30 minutes before sunset at 2130 until 2.5 hours after it finishing at midnight. The session was used to tune up an automated control system aimed at minimising flicker. If the clouds hadn’t come along then I would of carried on shooting.

The initial exposure was 1/80 second @ f5.6 iso 100 and at the end it was 22 seconds @ f5.6 iso 1000

The Canon 7D and 10-22mm lens were connected to an arduino which was running a program to control the bulb exposure length based on the readings from an external light meter. The arduino also controlled the iso ramping during the sequence

Until the exposure was longer than about 1/20second it was necessary to use manual adjustment of the shutter speed and iso using DSLR Remote Pro running on a netbook. From about 45 seconds the system did everything, I do need to work on controlling the progression of the exposure sequence to stop the slight bouncing that is visible and I’ve also found some hot pixels :( BUT I think I’ve resolved that after doing a quick test here

No attempt has been made to remove birds, flicker or process the images before compiling the video.

Early days but getting there :)


Simple arduino code can be copied from here to run the project as a normal camera intervalometer.

This entry was posted in PhotosbyKev and tagged , , , , , , , , , , , , , , . Bookmark the permalink.

12 Responses to Arduino intervalometer for Digital Cameras

  1. quite intriguing post

  2. Christoph says:

    Hi Kev,

    two thumbs up for your work on that project, absolutely stunning!

    If you manage to get this system running smooth, the Guys at TimeLapse.org and a lot of other Astro-TimeLapsers like me (fighting with Day-Night-Transition and back), sitting hours and hours in front of our Machines doing NEF/RAW-Post supersecret/whizz workflows, will be more than thankful. I guess you could sell a Zillion of that little box!!! Pls let me know if you plan to do a small series. If I do not have to sell my home for it, I’d take one, that is for sure.

    Cheers,
    Chris

  3. Pingback: My first Arduino project and a brief introduction to time lapse photography with DSLRs | Along the way

  4. john says:

    Hi Kev,

    Thanks for all the help. Have my second prototype working now. I’ve written a post with some sample footage here:

    http://www.johncarolin.com/?p=2027

    Next step will be to get a handle of ISO and aperture ramping directly over USB. Need to find the time somewhere.

  5. john says:

    Thanks for the prompt reply Kev! I’ve definitely learnt a bit from your write up and response.

    Have you taken a look at the library that is being developed to control Canon’s over USB? This seems like it might be a very simply way to trigger a camera, with the required iso settings without having to use DSLR Remote pro:

    http://www.circuitsathome.com/canon-eos-cameras-principles-of-interfacing-and-library-description
    http://github.com/felis/Arduino_Camera_Control

    I would be interested to hear your thoughts!

    @photosbykev

  6. john says:

    Very interesting write up and great looking finish too! I’ve taken a look at this and the roaming drone arduino intervalometer and I really like the ISO ramping that you have introduced here. I am really interested to understand how you have been able to communicate ISO to the camera, if you are in fact doing this, which it looks like you are. Or are you adjusting the aperture and ISO with DSLR Remote Pro based on the LCD output calculated by your code? I had previously only thought it possible to adjust the exposure by using the bulb setting, unless you are using a servo on the aperture ring of a manual lens? (Which leaves the ISO question unanswered). I would very much appreciate the answers to this question and look forward to hearing about any of your updates.

    Thanks,
    John

    • photosbykev says:

      I’ve started playing with a hotkey script that communicates via the DSLR Remote pro library to vary the iso on the camera. The script waits for a serial communication from the arduino to make this iso change and at the same time adjust the bulb duration to maintain the exposure value. This serial communication simulates a keypress which the hotkey script responses to. It’s relatively simple to do but I haven’t played with it seriously other than to prove it works. Remote control of the aperture can be done using a servo drive and there is a chap on the Timescapes forum that is active with that system.

      The main reason why I’ve looked at this is to avoid any contact with the camera during the timelapse sequence and to allow me to expand the time over which I can remotely control the camera suring the changing light conditions during dawn and dust.

      regards
      Kev

  7. Deyan says:

    Thx for the fast respond.
    I will tray it, and if I have a problem I will ask you if isn´t a problem.

    Thanks

    Deyan

  8. Deyan says:

    Hi,
    this is interestin thing thing that I have to make. Culd you post some sircuit diagram to try it. I sow the drone page, but as I am new to this I don´t undersend it very good.

    Thanks

    Deyan

    • photosbykev says:

      The important circuit I’ve posted i.e the opto-isolator to protect the camera against any voltage spikes. This is my pin assignments for the project which will help, the datasheets for the TSL230Rand DS1307 ICs will provide the pin outs from them

      Pin Assignments

      Camera functions

      Shutter trigger – digital pin 22
      Focus tap – digital pin 23
      Pc Sync – digital pin 24
      Cam Triggered LED – digital pin 25

      20 x 4 Blue LCD using LiquidCrystal library

      LCD Vss to Gnd
      LCD Vdd to +5v
      LCD RS pin to digital pin 31
      LCD Enable pin to digital pin 33
      LCD R/W pin to Gnd
      LCD D4 pin to digital pin 35
      LCD D5 pin to digital pin 37
      LCD D6 pin to digital pin 39
      LCD D7 pin to digital pin 41
      10K trim pot for contrast:
      Pot track ends to +5V and Gnd
      LCD VO pin to Pot wiper
      LED +ve to digital pin 29
      LED -ve to 0v

      DS1307 RTC module using Wire.h library

      RTC SCL to Arduino SCL
      RTC SDA to Arduino SDA
      RTC +5v to +5v
      RTC Gnd to Gnd

      TSL230R Light to Frequency convertor

      TSL S0 to digital pin 42
      TSL S1 to digital pin 43
      TSL S2 to digital pin 44
      TSL S3 to digital pin 45
      TSL OE to Gnd
      TSL Vcc to +5v
      TSL Gnd to Gnd
      TSL OUT to digital pin 2 (interrupt)
      0.1microF capacitor (stamped 104) between +5v and Gnd
      maybe Interrupt on digital pin 8 from TSL OUT using Lightrail

      (leave pin empty)

      Push buttons (HIGH = pressed)
      Btn 0 to digital pin 49 – Left
      Btn 1 to digital pin 50 – Right
      Btn 2 to digital pin 51 – Up
      Btn 3 to digital pin 52 – Down
      Btn 4 to digital pin 53 – Centre

      Li Battery Voltage Sensing hardwired to analogue pin 0
      (do not use Analogue pin 0 for anything else)

  9. Pingback: Arduino Intervalometer Source Code for Digital Cameras | PhotosbyKev

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>