Arduino Intervalometer for Time-lapse Photography
Monday, July 20, 2009 at 7:07PM ![]()
Last 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
In 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.
Joe
Since I first made my arduino intervalometer two years ago, I have used it several times and come to the conclusion that I could make a few improvements to it. The first change I wanted to make had to do with powering the unit. The original design allowed for an external power source and while this allowed for maximum flexibility, it also made the device somewhat unwieldy. Whenever I wanted to setup for a timelapse shot I had to not only bring the intervalometer but also a mintyboost or other power source as well as a power cable. The other major change I wanted to make was to reprogram the timing ranges to something more useful.
![]()
![]()
In order to power the unit I could have simply placed a mintyboost inside the intervalometer and changed the wiring accordingly, however, I did not want to have to open the device to change batteries. To get around this and still be able to provide the 5V power I needed I decided to use a lithium polymer rechargable battery. This requires both a charging circuit and a voltage booster to convert the battery's 3.7V to 5V. Luckily Sparkfun Electronics makes just a device that charges the battery via a micro-USB port and is also very compact. Since the intervalometer draws only 28mA while running I chose a 1000mAh battery which not only fits inside the case it should also power the device for over 30 hours, more than enough for a typical timelapse session. Now I have a completely self contained, rechargable intervalometer.
For timing ranges I changed the low range to 1-60 seconds in 1 second steps and the high range to 5-300 seconds in 5 second steps. I think this should end up being much more useful since most of the timing intervals I have used are under a minute in duration and having the capability to more finely tune that interval will be very handy.
Joe |
15 Comments |
Arduino,
Electronics,
Photography,
Videos 
Reader Comments (15)
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. http://www.instructables.com/id/Panasonic-G1-GH1-Remote-Shutter-Release/ 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!
Aha. Canon Rebel... found it in the older intervalometer post. Sorry for the premature question!
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.
Most excellent design! I will be eager to start the project.
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.
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.
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.
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.
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.
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.
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 - 16x2 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
thank you