A must-have tool when shooting a number of photography genres, including the night sky, is a remote release trigger for your camera. Triggers range from very simple cable releases over phone apps that connect to your camera’s Wi-Fi to very specialized intervalometers. I wanted to build something even better…
In this article, I will share how I created my own open source DIY camera timer for about $60. Note that you will need a fair amount of knowledge in hardware and software to follow this tutorial.
Table of Contents
When “Quite Good” is Not Enough
There are quite a few commercial products available that sound nice on paper, but for me, they offer too many options that I mostly will never use. Also, they are often quite expensive.
On the other end, there are cheap offerings, but then they lack a feature that I would like to have. I have of course not tried all remote timers, but I tried some and none of them really fit my needs. The most annoying thing for instance is not being able to light up the display of a timer while it is running.
The only off-the-shelf intervalometer that looks like a winner is the LRTimelapse Pro Timer 2.5. With a price of around €175 (~$206), it is not on the cheap side, but I guess it’s worth every cent. Gunther Wegner, the man behind LRTimelapse, also has a very nice tutorial on how to build your own intervalometer, which exceeds my build by miles in terms of features.
The Options I Considered
I could have just built a LRTimelapse Remote Timer Free but I dislike the 2×40 Display, the outdated Arduino Uno, and the size of it. There are smaller Versions now available through the LRT Forum but the one I am interested in, is closed source at the moment, and that doesn’t fit my style. If I build something, I also want to mess around with the code.
While looking for other options I came across a project from Markus Kail, which looked promising. A small enough housing with integrated LCD, buttons, battery, and charging circuit. I contacted Markus to get the Arduino code since the link was broken on his website, and he showed me the current status of his timer, which looks really polished with really nice graphics and a super sleek user interface. Markus was kind enough to send me this version and I installed it on my just-delivered M5Stack.
It looks just stunning, has a very powerful preset system, and is very easy to set up as it calculates movie lengths, times, etc. for a very good experience when using the timer for its main purpose: timelapse shooting. (The pictures above do not show the current state of his Timer.)
No Option Fully Met My Needs
There was nothing wrong with those products, whether self-built or commercial. They just don’t fit me, because my needs are special (read: strange).
In my case, the intervalometer is not used to shoot timelapse photos and create a timelapse video out of them. My timer gets used in the dark when hunting for the stars, the Milky Way, or meteor showers. I shoot stacks of pictures for noise reduction, for composite pictures of meteors, or for creating star trail pictures. When mounted on my MSM Star Tracker I want to have total control over the first few exposures to dial in my settings.
If you don’t know the Move Shoot Move Star Tracker, make sure to check it out, as it is an amazing small device that makes polar alignment easy. I have successfully shot 4 minutes subs without any trailing. (Oh, and if you use the coupon code DIRK at checkout, you will get 5% off from your complete purchase).
My Requirements for a Camera Timer
To make a product that suits me, I first need to get my requirements:
- Start-Stop Bulb Mode
- Timed Shooting
- Graphical, lit display
- Settings survive a reset
- Universal for all my cameras
- USB chargeable
- Small, but not too small in terms of display size
- Wi-Fi or Bluetooth for later updates (e.g. as a remote trigger for my DIY Pixelstick)
As I had already the M5Stack lying around, and it ticks the boxes for USB charging, display and size, I thought I would reuse it. In addition, I would only need a small breadboard to create the electronics for the camera trigger and some wires to build my adapters.
The List of Ingredients
Here is the complete list of things I used to build “Timy”, as I named it (sans 3D printed parts):
Of course, you need a cable that suits your camera or, like I did, just use the cable from a timer that I already had.
The total cost for all of this was about €50, or about $60.
The Code Brains
I first tried to program with the amazing M5ez library, but the M5Stack has a very neat feature that I wanted to keep. If you use Uiflow, the code can be updated wirelessly. You can also have more than one script on the M5Stack and select the desired program during startup.
Uiflow is a bit different, as you “program” your code using predefined blocks and Uiflow creates micropython code out of it. Not every function from MicroPython is implemented in Uiflow, but you can get around this using custom ‘execute’ blocks and writing your own code.
To make the M5Stack listen to keypresses while counting I used MicroPython’s built-in _thread library which sadly is not available as a predefined block. Variables in Uiflow are always set to global, which is one thing to keep in mind if programming. With Uiflow and the concept of updating your code wirelessly, you can get really fast results and try them out very quickly.
It also features a UI Editor, so no more guessing at what the end result will look like.
The Electronic Guts
To connect the shutter to ground I used a small breadboard and soldered together the following schematics. If you want to control the focus pin of the camera through software, you can use pin 29; I don’t need autofocus, so I simply connected the focus and shutter pin together to pin 26 of the M5Stack.
The Case Body
To make everything fit together neatly I designed a case and 3D-printed it in PLA. Everything fits together without screws, the lid just slides onto the bottom of the case.
To support the M5Stack at the top, I just turned off elephant foot compensation in PrusaSlicer. This creates a very small lip to prevent the M5Stack from falling out at the top. Everything prints without supports and fits together snuggly. The case also has a carabiner mount for attaching it to a tripod if you dislike the other mounting options.
If you need to make edits to the mounts or have other ideas for your own case, my design is available on Tinkercad.
How the DIY Camera Timer Works
Timy currently has two modes:
Bulb Mode. I use this to get my baseline Exposure and to compose the camera for later timed shoots. I usually shoot at a higher ISO and then calculate the right time for my lower ISO shots. It can also be used as a remote trigger in this mode. Easiest mode ever.
Press Start to open the shutter, Stop to close the shutter. Stop is actually Pause. The Reset Button then resets the time to zero. The Display can be turned off when running to save battery. The LED bars on the side show a Knight Rider light while running.
Timelapse Mode. Although not really used for timelapse in my case, it can be used to shoot timelapses but is only made for Bulb mode timelapse beyond 1-second exposures. If there is a need for a classic timelapse timer, it’s easy enough to implement.
All Settings are saved in EEPROM and survive a reset/reboot. The delay setting is mainly to give the camera enough time to save the picture to the SD-card and only really matters on sub-10-second exposures. If exposing for minutes, a zero millisecond delay setting will not really matter and will take picture after picture as fast as possible.
My Olympus E-M10 camera, for instance, needs a 450ms delay to get consistent timings under 60 seconds. An Exposure always starts with the set delay.
Download the Project
Interested in building Timy yourself? All downloads for the components in this tutorial can be found in my GitHub for this project.
A Video Demonstration
Here is a 12-minute video in which I discuss remote timers and demonstrate how the DIY camera timer works (with some USB charging madness as a bonus):
About the author: Dirk Essl is an IT Solution Architect working for a German television network. He’s not a programmer, but he likes writing software if something that he needs is not available. He also runs the caffenol blog and the largest caffenol community on the Web. You can see more of his work on his website, or by following him on Facebook and YouTube. This article was also published here.