Timelapse-o-Tron™ 9000, part 1

posted in Electronics by Cargo Cult on Wednesday June 13 2012

Computers are way too fancy these days, with their gigabytes of memory, gigahertz of multiple processing cores, hyper-parallel GPUs and terabytes of storage. Sometimes we nerds yearn for a simpler age, when processors were real processors and programmers were real programmers.

So last year, I got into microcontrollers, via the hipster-compliant, super-straightforward Arduino platform. 16MHz! 32KiB program memory! A whopping 2KiB of SRAM! All in a neat and tidy little circuit board with oodles of connectivity:

32KiB of ABSOLUTE POWER

But what to do with such a thing? I rapidly got it to blink morse code on a tiny on-board LED upon receiving terminal data, but that seemed too simple. I needed something altogether fancier; something that tied in with my frankly excessive number of cameras; a project that absolutely nobody had ever thought of before. So, an Arduino Intervalometer was it - seemingly a nice and straightforward introduction to programming something less powerful than my first computer, back in 1988.

Some research online revealed pinouts for EOS external trigger sockets - the 'communications protocol' turning out simply to involve short-circuiting things to the camera's ground. Flashy new diagrams here for maximum information-dump-ness:

2.5mm connector, causes short-circuits on the way in and out - nice.
Low-end Canon (350D, 400D, 450D etc.) external trigger. Short 'focus' to 'ground' to focus, 'shutter' to 'ground' to release shutter.
No short-circuits, completely non-standard. Yay!
High-end Canon (40D, 7D, 5D etc.) external trigger. Same as before. Best to test wires inside the cable by shorting them while it's connected to the camera - otherwise it's impossible to identify the gits.

My Canon PowerShot G10 had the 2.5mm connector, the same as my converted-to-infrared EOS 350D. But the 7D? A distinctly non-standard Canon effort. How to obtain a connector without buying an expensive Canon remote trigger? Turned out to be simple - by buying a cheap trigger from Amazon. Easy! Chop cable and connector off, tease out internal wires, identify them and that's it.

I decided on using 3.5mm audio cables as extensions, using a 3.5mm-to-2.5mm adaptor for the lower-end cameras and soldering a 3.5mm headphone-style jack onto the end of the higher-end cable when it eventually arrived. A 3.5mm headphone socket would act as the connector into my circuitry.

After breadboarding-up a brainless version with a couple of microswitches, I started looking into interfacing with the Arduino. One problem being that the protocol is so utterly dumb that it ignores such niceties as 'digital levels' and 'known voltages'. I needed something to isolate the camera with its mysterious voltages and currents. Relays? Too chunky, and moving parts are noisy and prone to wear. Only one thing for it: opto-isolators.

While trying to find where to buy the blighters (Radio Shack had a fine line in antiquated relays suitable for Edison-style currents), I checked SparkFun online - where they not only had some opto-isolators perfect for interfacing with an Arduino, but someone in the comments had already used the things to control a camera.

So, let's breadboard it up:

Fritzing's PNG output is terrible; this is a screenshot.
The connector may or may not be round the right way. Please take with a pinch of salt - reverse '6' with '7' if it goes wrong. Bonus schematic here. Actually, I did get it the right way round. Yay!

Only one thing for it now - write a program to take photos with a camera. Simple enough: do this in setup(), with 'focus' connected to pin 6 and 'shutter' connected to pin 7:

pinMode( 6, OUTPUT ); pinMode( 7, OUTPUT );

... and this in loop():

digitalWrite( 6, HIGH ); delay( 800 ); digitalWrite( 7, HIGH ); delay( 200 ); digitalWrite( 7, LOW ); digitalWrite( 6, LOW ); delay( 9000 );

And there I had it - an intervalometer taking a photo every ten seconds. Focus 800ms, shutter 200ms, wait 9000ms.

Was that it?

Please excuse the picture quality, I hadn't built the connector for the 7D yet

Obviously not. I now had to turn it into something fancy. To be continued!

Article is now closed for commenting.