Measuring flash speed with AVR

How fast is your flash?

Whether you’re a Maker or a photographer, there’s nothing more interesting than learning about timers, interrupts and input capture on AVR MCUs. And, if you’re a flash fanatic like Matt Kane of Vela Labs, you’re sure to love his latest project: a low-cost, high-speed timer for camera flashes as an Arduino shield.


When it comes to measuring flash speed, it is typically done in one of two ways. One is determining the lag time between the trigger signal at the hotshot or sync cable and the light emitting from the flash. If this remains consistent, everything is fine. The other is the speed of the pulse width, which refers to the amount of time that the lamp is shining. This is analogous to shutter speed, and combined with the luminosity of the flash gives the exposure. When varying the “power” of a speed light, it doesn’t actually change the brightness of the flash; instead, it simply alters the pulse width. This is why for high-speed photography you need your flash to be on its lowest power setting.

“For most high speed photography, lag isn’t a major problem as long as it’s consistent. If you’re capturing a bullet you can compensate for lag by simply moving the camera further from the gun. If it’s inconsistent then it’s more of a problem, as this makes it very hard to align shots. The really important thing is the pulse width. The longer the pulse, the more motion blur you’ll get in your shot. Sure you can test this by trial and error, but it’s a lot easier if we measure it first as it means we can easily calculate what sort of speed of object we can capture with the flash,” Kane explains.

While usual equipment like a photodetector and oscilloscope that can do the trick, it will generally set someone back quite a few bucks. However, Kane’s DIY project is a much more affordable, easy-to-use way to measure both types of flash speed. In fact, the Maker used a $0.50 photodiode that is sensitive to visible light and a 3.5mm jack that ties into the flash remote, both of which are wired to an Arduino Leonardo (ATmega32U4). The current measured through the device indicates the brightness of the shining light, while an added RC filter helps avoid high frequency noise interfering with their readings. Meanwhile, a 50ohm load resistor provided Kane with enough voltage to measure with the Arduino.


A push button was tasked with the triggering. To get a reading for just the pulse width, Kane pointed the flash towards the detector and fired away. It then printed the pulse width over serial. As Kane advises, if you want to measure the lag as well, then the flash must be connected the shield and pointed at the detector, while pressing the shield’s button. This will then allow the user to receive both values over serial.

So why turn to AVR for the project? “ATmega chips have a built-in analog comparator which is great for this. This measures whether the voltage on one pin is higher or lower than the reference voltage and generates an interrupt or sets a register accordingly. The reference voltage can either be the micro’s internal reference voltage, or a voltage on an external pin. We’ll be using the latter so that we can set our threshold. Once the voltage from the photodiode goes over that threshold it will trigger an interrupt. A little trial and error with the oscilloscope showed that 100-200mV was a good threshold, so I used a voltage divider to generate this.”

With just some work around high-speed timers and interrupts on Arduino, you too can determine the speed of your flash. Head over to the project’s official page to get an in-depth breakdown of the build.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s