Pages

9 October 2014

DIY Canon Intervalometer using Arduino

An intervalometer allows you to take photos at set intervals to view a slow process in super fast speed. Watching paint dry is just as boring in fast motion as it is at normal speed, however, when you point your camera to the clouds in the sky, you can get some amazing effects.

By taking a picture every 3 seconds, and then playing the sequence back at 30 frames a second, you will get to see a 10 minute event in just 7 seconds.To get a nice flowing motion picture, you need to get a good balance between the recording frame rate, and the play-back frame rate.

The recording frame rate is limited by the amount of memory you have in your camera, the length of the captured event, battery charge, and the camera's general capabilities.
The playback frame rate needs to be fast enough to prevent jittering, but not so fast that you lose the event in a blink of an eye. The more you practice with different subject matters, the more you get a feel for how long you need to keep the camera running and how long to leave between shots.

When taking pictures of the clouds, you can generally use a 3-5 second frame rate, depending on their speed across the sky. To capture the flow of traffic, I would recommend a picture every 1-2 seconds. However, for really slow events like a plant growing, you may need to extend the frame capture rate significantly. You will get a better idea once you try it for yourself.

This tutorial follows on from the Arduino selfie tutorial, so you might notice some similarities. However, in this tutorial, we will have more control over the intervalometer by using a sliding potentiometer and an LED bar. The pin layout is slightly different from the Arduino Selfie tutorial - so best to start from scratch to avoid pin misconfigurations.

Warning : Any circuit you build for your camera (including this one) is at your own risk. I will not take responsibility for any damage caused to any of your equipment.

I found out that my Canon Powershot SX50 HS camera has a port on the side for a remote switch. In the "Optional Accessories" section of the camera brochure, it identifies the remote switch model as RS-60E3. I then looked up the model number on this website to find out the size of the jack (3 core, 2.5mm), and the pinout (Ground, focus and shutter) required to emulate the remote switch. Once I had this information, I was able to solder some really long wires to the jack and connect up the circuit (as described below).

I use Time-Lapse tool to stitch all of the pictures together to create a movie/animation.

You will need to download and install the LED_Bar library from Seeedstudio into your Arduino IDE libraries folder in order to use the LED Bar in this tutorial. For more information about the LED Bar - visit the LED Bar Seeed-Studio wiki.

Arduino Sketch

/* =============================================================== Project: DIY Canon Intervalometer using Arduino Author: Scott C Created: 9th October 2014 Arduino IDE: 1.0.5 Website: http://arduinobasics.blogspot.com/p/arduino-basics-projects-page.html Description: Use Arduino as an intervalometer for Canon PowerShot SX50 HS A slide potentiometer is used to control the time between photos. The LED Bar is used to display the delay between photos. A 3 core 2.5mm jack is used to connect the Arduino and Relay module to the Camera.================================================================== *//* You will need to download and install the LED_Bar library from here: https://github.com/Seeed-Studio/Grove_LED_Bar */
#include <LED_Bar.h>
/* Connect 5V on Arduino to VCC on Relay Module Connect GND on Arduino to GND on Relay Module */
#define CH1 7 // Connect Digital Pin 7 on Arduino to CH1 on Relay Module
#define CH3 6 // Connect Digital Pin 6 on Arduino to CH3 on Relay Moduleint potPin=A0; //Connect Slide potentiometer to Analog Pin 0 on Grove Base Shieldint potValue=0; //The variable used to hold the value of the potentiometer
LED_Bar bar1(9,8); //Connect LED Bar to Digital I/O 8 on Grove base shield.//The LED Bar actually uses digital pin 8 and 9.voidsetup(){
pinMode(CH1, OUTPUT);
pinMode(CH3, OUTPUT);
//Turn OFF any power to the Relay channelsdigitalWrite(CH1,LOW);
digitalWrite(CH3,LOW);
delay(2000); //Wait 2 seconds before starting sequence//Focus camera by switching Relay 1digitalWrite(CH1, HIGH);
delay(2000);
digitalWrite(CH1, LOW); //Stop focusdelay(3000);
}
voidloop(){
// Read the slide potentiometer and convert the reading to a value between 0 and 10.
potValue=constrain(map(analogRead(potPin),0,1000,0,10),0,10);
//Use the pot value to create a visual count-down display on the LED bar.for(int i = potValue; i>0; i--){
bar1.setLevel(i);
delay(1000);
}
//If the pot value is less than 1, then delay for 30 seconds.if(potValue<1){
delay(30000);
}
//Turn LED Bar off when taking photo
bar1.setLevelReverse(0);
//Press shutter button for 0.1 seconds. Modify delay if required.digitalWrite(CH3, HIGH);
delay(100);
digitalWrite(CH3,LOW); //Release shutter button
}

The Video

This project shows how to make your Canon Powershot SX50 HS a whole lot smarter using an Arduino. There are so many things that look so different with an intervalometer. While I connected a slide potentiometer to the Arduino to provide extra flexibility, and an LED Bar for visual feedback, there are many other sensors out there that can be combined with the camera. For example, you could use a PIR sensor to take a picture when movement is detected. Or take a picture when a laser trip-wire is broken.
What about sound activation, light activation, leak detection.... the options are limitless.

This has been one of my favorite projects, it was a lot of fun, and very interesting.
I highly recommend that you try it out!

If you like this page, please do me a favour and show your appreciation :