Skip to the content
2 layers50 × 34 mmShutter tester, the printed circuit board in 3D

An easy-to-build three point camera shutter speed tester

Size
50 × 34 mm
Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
19
Pads
52
Tracks, vias
63, 0
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
20 Jan 2025
Updated
14 Jul 2025

Overview

Shutter tester is an open-source printed circuit board by bjpirt, from the bjpirt/shutter-tester repository on GitHub. It is a 2-layer board of 50 × 34 mm with 16 parts on 19 nets, routed with 63 tracks and 0 vias.

Its parts include 9 resistors, 4 ICs and 3 capacitors. It belongs with the ESP32 and RISC-V boards of this library.

README

README.md

Shutter Tester

A low cost but capable three-point shutter speed tester that runs on ESP32. It uses the PCB design to provide the physical structure of the tester so that all you need to do is solder it together and all of the mechanical design is taken care of. It runs on ESP32 so is easily updated using the Arduino platform. The project is 100% open source (see the license file for details). The UI runs in the browser and communicates with the shutter tester via Bluetooth - you can try out the UI here.

Design

The design of the shutter tester is quite simple; it uses three IS485E / IS486E light sensors with built-in amplifiers to trigger three digital input interrupts on the ESP32 MCU. I wanted to keep the front side of the PCB clear to avoid it ever scratching the camera body so have opted for using surface mount components. I've used quite large packages for these so that they can be more easily hand soldered. The ESP32 uses an "ESP32 C3 Super Mini" module which is very small, can be surface mounted and has USB C built-in which can be used to power the whole board. I've kept the PCB size down to 50mm so that you can take advantage of low cost PCB fabrication. There are silk-screen markings to help position the tester over the camera shutter and three large holes to help see the edges from behind. It should either be taped in place or held with an elastic band.

The shutter tester PCB rear in 3D The shutter tester PCB front in 3D The shutter tester PCB

The sensor has a Bluetooth connection and you can connect this to Chrome to use quite a capable web interface so you can get a lot of detail on the calibration. You can try out the UI here

Bill of materials

The BoM is quite low cost and relatively minimal:

  • 1 x ESP32 C3 Super Mini module
  • 3 x IS485E light sensor
  • 6 x 1k 1206 SMD Resistor
  • 3 x 2k 1206 SMD Resistor
  • 3 x 0.01uF 1206 SMD Capacitor

Assembly

The main thing to take care over during assembly is to ensure the lens of the light sensor aligns to the small hole in the PCB that allows the light through. The three legs of the sensor should be bent down slightly so that they can solder onto the three pads on the PCB.

The capacitors and resistors can be easily hand soldered (a finer soldering iron tip helps here) by applying solder to one of the pads on the PCB, using tweezers, solder one end of the component to the soldered pad on the PCB, then solder the other end once it is held in place. If you're experienced in surface mounting you could always use solder paste, but it's pretty straightforward without this. There are markings on the board for which component goes where (C1, C2 and C3 for the capacitors, Resistor values are marked 1k and 2k). The capacitors are optional and may be removed in a future iteration.

It's best to test the ESP32 module before soldering to ensure it's working fine. Program this using the sketch included and make sure it is outputting "Ready to measure" on the serial console (running at 921600 baud).

It's a good idea to place some black insulation tape over the back of the sensors otherwise stray light can cause false readings.

Usage

Attach the shutter tester behind the shutter of the camera (I normally use 2 - 3 small blobs of Blu-Tak which works well). You can use the three larger holes in the tester to align with the edges of the shutter aperture. Open the shutter once you've this so you can check it's properly positioned by setting the shutter to "Bulb" and opening it. Remove the lens (if possible) and place a strong, even light at the front of the camera. You can use a full size bulb for this so long as it is the type that has a white diffuser bulb, not clear. Basically you want to ensure that light can pass directly through the three holes to reach the sensors, not at an angle. I've also had good results with a small USB powered LED panel.

Using Bluetooth

There is a user interface that connects to the ESP32 from a Chrome web browser directly and lets you analyse all of the measurements quite easily.

The Bluetooth user interface

You can easily use the latest version. You should then be able to click the Connect button and pair with your shutter tester using Bluetooth. Select the speed you want to test, set up the light and fire the shutter. The new reading should appear in the table.

If you want to just try out the UI without a tester, you can use this link and the "Test" button will simulate a shutter being fired. From a privacy perspective, the UI runs entirely in your browser and nothing goes over the internet.

If you want to run this locally you can do the following:

  • Install Node.js (v22)
  • Open a terminal in the ui folder of this repository
  • run npm install
  • run npm run dev
  • Go to the URL printed in your terminal (http://localhost:5173/)

Using serial

Open a serial terminal to the ESP32 (this is built in to the Arduino IDE). You'll need to connect at 921600 baud.

Fire the shutter and it will print out the timings to the serial console. There are two sets of timings:

  • The time taken for each shutter to travel across the frame - it's important to try and get both shutters moving at around the same speed
  • The time each sensor was exposed for in microseconds, milliseconds and fractions of a second
text
Ready to measure

Shutter timing
Shutter 1: 1-2: 16582 uS || 2-3: 12632 uS
Shutter 2: 1-2: 23756 uS || 2-3: 18462 uS

Exposure timing
Sensor 1: 4346 uS || 4.3 mS || 1 / 228
Sensor 2: 5028 uS || 5.0 mS || 1 / 198
Sensor 3: 5528 uS || 5.5 mS || 1 / 182

In this example, the time taken for the first shutter to travel between the first and second (centre) sensors was 16582 microseconds and 12632 microseconds between the second (centre) and third sensor. You can see that in this example the second shutter is slow and would need adjusting.

Looking at the exposure time at each sensor, you can see the timings would need adjusting to give a good even exposure. First you would adjust the shutter timings to try and get them similar and then adjust both shutter tensioners to get the exposure time to match the expected (in this case it should have been 1/250 S)

To Do

  • Calculate variations across shutter and whether they are within tolerances
  • Add graph visualisation of shutter speeds
  • Generate report from three point test
  • Enable detailed measurements to be shown / hidden in three point mode
  • Deploy to GitHub pages using GitHub actions
  • Automatically work out vertical or horizontal shutter
  • Display full shutter timing
  • Separate shutter timing mode
  • Single shot mode (only show last shot timing) - useful for initial tuning
  • Compensation for sensor width

Future

  • Add persistence in the browser to enable common presets to be stored - e.g. camera types with speeds
  • Enable different "runs" to be stored and compared so you can see progression when adjusting
  • Add exposure measurement with light to frequency sensor
  • Investigate reflective measurement from front of camera for e.g. Barnack Leicas
  • Investigate using an analog photodiode instead of a binary sensor

Parts

16
QtyValueFootprintReferences
61kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1, R2, R3, R4, R6, R8
30.01uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC1, C2, C3
32kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR5, R7, R9
1ESP32-C3_SUPERMINIESP32-C3_SUPERMINI:MODULE_ESP32-C3_SUPERMINI_SMTU1
1Sensor-1OptoDevice:Sharp_IS485_Flat_MountU2
1Sensor-2OptoDevice:Sharp_IS485_Flat_MountU4
1Sensor-3OptoDevice:Sharp_IS485_Flat_MountU3

Similar boards

  • 2 layers140.5 × 30 mmType e, the printed circuit board in 3D

    Type e

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    16 parts3kApache-2.0
  • 2 layers41.4 × 14.5 mmU2f zero, the printed circuit board in 3D

    U2f zero

    conorpp/u2f-zero

    U2F USB token optimized for physical security, affordability, and style

    16 parts2.4k
  • 2 layers122 × 37 mmV0-UmbilicalBoard, the printed circuit board in 3D

    V0-UmbilicalBoard

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    16 parts1.1kGPL-3.0
  • 2 layers152 × 57.6 mmVideoslotadapter, the printed circuit board in 3D

    Videoslotadapter

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    16 parts1kGPL-3.0
  • 2 layers36 × 63.4 mmSmart ringfinal layout, the printed circuit board in 3D

    Smart ringfinal layout

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    16 parts915
  • 2 layers60 × 40 mmHASwitchPlate, the printed circuit board in 3D

    HASwitchPlate

    aderusha/HASwitchPlate

    LCD touchscreen for Home Automation

    16 parts738MIT
  • 2 layers21.1 × 26.9 mmDemo, the printed circuit board in 3D

    Demo

    easyw/kicadStepUpMod

    kicadStepUp: ECAD to MCAD FreeCAD WorkBench

    16 parts704

Questions

How big is the Shutter tester PCB?

It measures 50 × 34 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Shutter tester use?

16 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Shutter tester KiCad files?

From the bjpirt/shutter-tester repository on GitHub, at the commit this page was made from: the board is hardware/shutter-tester.kicad_pcb and its schematic hardware/shutter-tester.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Shutter tester design in my own project?

Its repository states no licence, so its author keeps all rights: ask bjpirt before reusing the design.