How to Make a DIY Camera Timer for About $60

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…

I tried the phone apps for my cameras and they miss a very basic feature: bulb mode timing. Meaning, when you set the camera to bulb mode and start the exposure, most apps do not display how long the shutter is open already. It also eats battery life from the camera as Wi-Fi or Bluetooth needs to be turned on in the camera. In the mid-range, there are intervalometers that can be programmed through a small display and some buttons and usually work quite well.

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.

Uiflow Coding

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.

Initial Screen
Set Hours
Set Minutes
Set Seconds
Set Number
Set Delay
Shutter Open
Waiting for Delay

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 about caffenol film developing 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.