Arduino Intervalometer for Time-lapse Photography

Arduino-Intervalometer3Arduino-Intervalometer2Last fall when I built my first intervalometer and then used it for some time-lapse photography, the limitations of such a design became apparent. With an analog timer the circuit is limited by component values to function in a fixed way. The timing ranges cannot be changed without rebuilding the circuit and there is no way to be truly precise in your timing. A few months ago I came across this design for an Arduino intervalometer which is very basic and requires reprogramming for any timing changes. After some planning I decided to take the best features of my original intervalometer and combine it with an Arduino’s flexibility to make a much more versatile intervalometer.

Key features to keep from the original were:

  • Camera interface isolation
  • Timing range options
  • Battery or AC adapter power options
  • Camera connection flexibility
  • Manual controls

Additional features that I wanted to add were the following:

  • Power supply flexibility
  • LCD readout
  • Start/Stop the timing cycle

Arduino-Intervalometer1Arduino-Intervalometer-SchematicIn order to maintain what worked best in the original design I simply copied it directly over to the new version. I used the same relay isolation for shutter triggering, as well as hard-wired pushbuttons for manual focus and shutter control. I also used the same 3.5mm jack to connect to the camera as the original. For power I decided to use a coaxial power jack as I had previously but this time I did not place a battery inside the enclosure. Instead, I made an adapter cable with an N style coaxial DC power plug on one end and a USB plug on the other end. With this cable I can power my new intervalometer from any 5V USB power source (PCs, wall adapters, MintyBoost, etc). In order to keep this build as simple and inexpensive as possible I decided to use the Arduino Pro and a basic LCD for a total cost of $36. The Arduino Pro is the same as a standard Arduino, except it uses all surface-mount components and has no USB interface. This keeps the cost down and reduces the board size. The LCD was simple to wire requiring only +5V, ground, 6 data lines and a dimmer potentiometer input. The final features were all implemented in the Arduino code.

I ran into a few problems while developing the code for this project:

  • How to adjust the timing interval value
  • How to start & stop the timing cycle
  • How to switch timing ranges

For adjusting the timing interval I had originally planned to use pushbuttons, however, after playing with the idea I decided against it. I found that it was much quicker and more user friendly to use a potentiometer as a virtual selector switch. In order to do this I used the map function, to divide up the potentiometer’s analog input values into the specified number of steps.

Starting and stopping the timing cycle was not as easy as it first appeared because the simplest way to wait a specific amount of time between events is to use the delay function. The problem with this is that while the program is delaying for the set amount of time, no other commands are being run and inputs are not recognized. To get around this I used a technique I found on the Arduino website which blinks an LED without using the delay function. Instead it sets a preset interval and then checks how much time has past using the millis function until enough time has gone by to trigger the desired event. This allows the processor to keep scanning the code while the timing cycle is taking place. Now if I want to cancel the timing cycle I can do so without resetting the Arduino.

To switch timing ranges I used this clever piece of code that allows you to use one button for two functions. When the button is pressed the Arduino keeps track of how long it was pressed. For short presses it performs one function and for longer presses it does another. I used this method to implement both timing range switching as well as toggling between set mode and timing mode as shown in the video below.

After getting all of my code together I assembled my new intervalometer in a 6″X4″X2″ project box from Radioshack. This is somewhat oversized for these purposes, but it’s cheap and readily available. Overall I am very pleased with this project. The responsiveness of the interface is very good and it triggers my camera shutter perfectly. The two timing ranges I preset in the unit are 5-60 seconds in 5 second steps and 30 seconds to 10 minutes in 30 second steps. These should cover the most common intervals I will use, and I can change them at any time if I have to. This is by far the most complicated Arduino coding that I have done and it was a great learning experience. Check out the video below for a demonstration of the device.


Note: the LCD requires the updated LiquidCrystal Library, checkout this tutorial if you are using version 0016 or earlier of the Arduino software.

15 thoughts on “Arduino Intervalometer for Time-lapse Photography”

  1. is there any way you can share the code with me? after trying to choose between this one and two other intervolmeters i decided to go with this setup. I find it to be the most functional and cost effective as I have most of the parts already 🙂

    thank you

  2. Rolf,

    Let me know of any specific questions. As far as a parts list, see below:

    1 – Arduino Pro (you could substitute another type of standard arduino if you wanted, Note: the Pro requires an FTDI cable to program)
    1 – 16×2 LCD (you can use any model you want as long as it uses the HD44780 chipset)
    1 – 1K Ohm Resistor
    1 – 5K Ohm Potentiometer (panel mount)
    1 – 15K Ohm Potentiometer (through hole mount)
    1 – Power switch (toggle, rocker, push on-off, it's up to you)
    3 – Push Buttons (any momentary buttons will work)
    1 – 5V Reed Relay
    1 – 3.5mm Stereo Jack (you can eliminate this if you wire directly from the circuit board to the camera adapter)
    1 – 5V Power Supply (I used a Mintyboost, but you can use whatever you want)
    1 – Knob for 5K Ohm Potentiometer
    1 – Enclosure (I used a 6x4x2 project box from RadioShack)
    Adapter cables appropriate for your camera

  3. Hi Joe, I wonder if you could help me with this proyect, im very interested, but im not very good in electronics, if you could help me with the material list and such stuff please

  4. Ali,

    Glad to hear you had success with this project. I had a lot of fun making it and I am happy to see others benefiting from my efforts.

    Regarding Sony compatibility, the program should work fine with any camera that supports this type of remote shutter triggering. The only thing to worry about is the physical interface with the camera. I am not sure what type of connector Sony uses but you will need to modify the project to match your friend's particular camera model.

    Thanks for the feedback.

  5. Hi Joe Caldwell.I have finished your project and working fine.A BIG thank you to you.Just to verify with you,is the programming code is universal to other brand /model?Now my other friend wanted me to built him your project and his camera is Sony.Thank you and have a nice day.

  6. Ali,

    Correct, the timing range adjustment potentiometer is a 5K ohm, however, you could technically use a different value and it should still work. The other potentiometer is used to adjust the LCD’s contrast and its value is therefore up to the user to determine. Once you have everything built and running adjust the pot until the text on the LCD is most readable to you.

    Good luck.

  7. Hi Joe Caldwell,just want to confirm with you is the the value of the potentiometer 5k?At what resistance is the other trimpot is set?Thanks.I’m now about to make this project as most items have arrived.

  8. Ali,

    The 40D should work fine, except I believe the connector for the camera is different from my XSi. The program should work with just about any standard Arduino board.

    Thanks for the interest, I hope you get your version working.

  9. Hi.I’m very impressed on your Arduino Intervalometer.May i know can this program used for Canon 40d?Is there any different to the program if i used Arduino Duemilanove instead Pro?Thanks.Great Project.

  10. Is there a quick-n-dirty tutorial for using this? Ive built it, but I’m not too sure about its operation.

    My code-fu isnt strong, and i really just want to get out there and take cool photos.

  11. There is an unused Arduino in my junk box and I need an intervalometer for my Nikon D90.
    Congratulations to your work ! It will help much to make it work.

  12. Oh my gosh, this is exactly what I’ve been looking for! I’m hoping to build an intervalometer for my Panasonic GH1. What camera are you using with this? The GH1 apparently uses different resistance values for half-shutter-press and full-shutter-press. It looks to me like you’re simply setting the shutter connection to high vs. low, but I suppose this is a simple modification for me to make, no?

    This would be my first Arduino project but I’m excited to take the plunge!

Leave a Reply

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