Building a DIY Shutter Speed Tester

With a little adventurousness, a few Euros, and a handful of Lego, you too can have your very own (if somewhat janky) shutter speed tester.

💬

Building a DIY Shutter Speed Tester
Camera under test

My collection of analog cameras is in a state. Specifically, in the state of “I have no idea whether the shutter speeds on these things are the least bit reliable”. I also don’t have a ton of money to throw at just getting everything CLA’d. And sometimes getting a CLA isn’t a guarantee that the shutter is actually working as expected…ugh.

So what is an ex-electrical engineer to do? Build their own shutter speed tester. Follow along, and learn how to shoot lasers at your cameras for fun.

Theory

The idea is that we can shoot a laser through the shutter at a high-speed laser detector. Then we can time how long the detector is activated to calculate the shutter speed. Laser detectors are much faster than other kinds of light detectors, and we’ll need that speed to accurately measure shutter speeds of 1/1000 or faster. we’ll also need a small computer to measure the speed, and calculate and display the results.

Shopping List

Here’s what we need to get started.

  • Arduino Uno. This is a basic, inexpensive microcomputer to coordinate everything. There are thousands of cheap clones on the market that are just as good as the original: You don’t have to get the brand name.
  • Arduino Prototyping Shield (or small breadboard). This is a small expansion board for the Arduino that breaks out a few connectors that we need. You can also use a small breadboad if you like. Again, you can get the cheapest one. Just make sure it comes assembled if you’re not up for soldering.
  • Jumper wires. These are the wires to connect all the things together. You’ll need a handful of male-to-male and male-to-female. Try to get longer ones, at least 20cm, ideally more.
  • KY-008 Laser Transmitter module. This is our laser beam!
  • ISO203 Laser Receiver module. This will detect our laser beam. Both of the laser modules are available cheaply from China.
  • Something to hold it all together. Maybe you own a 3D printer and can whip something up? Or maybe you’re basic like me, and only have some Lego lying around. Whatever it is, you need to find a way to hold the Laser Transmitter so it points at the Laser Receiver, and has room to place your camera between them.

Wire it Up

First, let’s wire all the bits together.

  • If your Laser Receiver came unassembled, this guide will set you right.
  • If you’re using a Proto Shield, stack it on top of your Arduino like in the image above.

You’ll need six male-to-female jumper cables, three for each module. Each module needs a connection to power (5V), ground (GND) and one of the signal lines (Pin2 and Pin5). A bare Arduino only has one place for the 5V line, which is why I am using a Proto Shield, which breaks it out into several outputs. You can also use a small breadboard to break out the 5V line into more than one. (Note that the colors don’t actually matter, but it helps to keep things straight!)

Assemble the Rig

Next, let’s build a rig to hold everything together. Unfortunately this part is up to you. But here’s a photo illustrating how I did it with some Lego Technic pieces I had lying around:

Shutter testing rig in Lego

Notice that the Laser modules are raised up a bit, and can be adjusted vertically. Notice the rather large gap between them—this is so I can fit my Mamiya RB67 lenses between them! If you’re only testing 35mm camera bodies, you don’t have to go this big.

Upload and Run the Software

You will need to download and install the Arduino IDE (Integrated Development Environment). This software tool let’s you create new software for your Arduino (which they call a “sketch”), upload sketches to the Arduino, and monitor the text output from the run.

Once installed, plug in your Arduino, create a new sketch in the Arduino IDE, and copy-paste the code below into editor. Then hit the play button in the Arduino IDE to upload the sketch and set it running.

// pins for KY-008 Laser Diodes
#define LASER_DIODE_1_OUTPUT 5

// pins for ISO203 Laser Receivers
#define LASER_RECEIVER_1_INPUT 2


volatile uint32_t ts_1_start_us = 0;
volatile uint32_t ts_1_end_us = 0;
volatile bool speed_1_measured = false;
volatile bool curtain_1_measured = false;

// variables for calculated values
double shutter_speed_1_ms = 0.0;
double fractional_shutter_speed_1 = 0.0;


//---------------------------------------------------
// Detector 1 interrupt handler
//---------------------------------------------------
void detector1(void)
{
  if (digitalRead(LASER_RECEIVER_1_INPUT))
  {
    ts_1_end_us = micros();
    speed_1_measured = true;
    curtain_1_measured = true;
  }
  else
  {
    ts_1_start_us = micros();
    speed_1_measured = false;
    curtain_1_measured = false;
  }
}


void setup() {
  Serial.begin(115200);
  Serial.flush();

  pinMode(LASER_RECEIVER_1_INPUT, INPUT);
  pinMode(LASER_DIODE_1_OUTPUT, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(LASER_RECEIVER_1_INPUT), detector1, CHANGE);

  digitalWrite(LASER_DIODE_1_OUTPUT, HIGH);

  Serial.print("Starting up");
}

void loop() {
  // put your main code here, to run repeatedly:
  if(speed_1_measured) {
    speed_1_measured = false;
    double shutter_speed_us = (double)(ts_1_end_us - ts_1_start_us);
    shutter_speed_1_ms = shutter_speed_us / 1000.0;
    fractional_shutter_speed_1 = 1000000.0 / shutter_speed_us;
    // Serial.print("t1_s=");
    // Serial.print(ts_1_start_us);
    // Serial.print("us   t1_e=");
    // Serial.print(ts_1_end_us);
    // Serial.println("us");
    Serial.print("Speed 1 = ");
    Serial.print(shutter_speed_1_ms, 1);
    Serial.println(" ms");
    Serial.print("Fractional Speed 1 = 1/");
    Serial.println(fractional_shutter_speed_1, 1);
  }
}

Running a Test

Make sure the laser beam is hitting the receiver. The place your camera with the back open in your testing apparatus. Make sure the laser is hitting the shutter, roughly in the center. Then fire off a test shot!

Testing the shutter in a Mamiya Sekor 250mm lens from my RB67.

The output from the sketch will arrive in the Arduino IDE in the “serial monitor”, which is a window showing text sent back by the Arduino. If you’ve set your shutter speed to 1/500, for example, in the serial monitor, you should see something like this:

Speed 1 = 2.0ms
Fractional Speed 1 = 1/500

Of course, your shutter speed won’t be spot on…so maybe it will be more like this:

Speed 1 = 1.85ms
Fractional Speed 1 = 1/540,54

How Bad Is It?

I am a sucker for a good spreadsheet. So I made one to capture my test results. I recorded three samples per shutter speed setting, and then set the times in milliseconds into a spreadsheet I made to analyze the results. You can download the template I made for yourself!

The spreadsheet averages the three samples, then calculates both the difference between the actually measured speed and the nominal speed in stops, as well as the sample variation. It then charts out the results, and calls out abnormal values.

Real-world results for my Canon P—professionally CLA’d just a year ago…😫

As you can see, I need to contact my shop that repaired my Canon P—it’s already fallen out of calibration. At the top end, the shutter is much, much too slow—a stop and a half at 1/1000!—and the variability in shutter speeds is slightly too high at 1/1000.

Troubleshooting Your Shutter Speed Tester

If you aren’t seeing any output on the Serial Monitor in the Arduino IDE, the serial port might be misconfigured. Make sure the port speed is set to 115200, as in this screenshot:

Source Code and Credits

This project is adapted and simplified from Stuart Brown’s excellent (and much more comprehensive) shutter testing project. If you want to go deeper with this, and maybe build something more sophisticated, his project has got the good stuff. Thank you Stuart!

GitHub - stuart-brown/ArduinoShutterSpeedTester: Platform IO Arduino project for a film camera shutter speed tester
Platform IO Arduino project for a film camera shutter speed tester - stuart-brown/ArduinoShutterSpeedTester

Support this blog

If you enjoy reading this blog, I encourage you to consider purchasing a book or print to show your support. And if you're into analog photography, check out my new mobile app Crown + Flint.

Books & Prints
Photographs are best appreciated in print. Get your own printed editions of my photographs and support my work by buying a book or print for yourself or as a gift. Loading…
Crown + Flint
The digital companion for your analog lifestyle. Improve your analog technique, capture shot metadata, manage your film collection.