High Speed Photography Workshop with Arduino

QUT Phd student Mark Bliandzic ran a High Speed Photography workshop at our 2nd Birthday celebration. He kindly put together this post explaining how it went.

This is a brief summary of the high speed photography workshop I held for the 2nd birthday bash at The Edge

High Speed Photography is a technique for taking pictures of phenomena that are usually too fast to be visible to the human eye. Ever wanted to take a snapshot of a smashing window or exploding water balloon? This is where you’ll need the techniques described below.

In order to understand the required setup for high-speed photography, let’s first recall how a conventional photo camera works. When you press the shutter-release button on your camera, a mechanical system opens the shutter and the sensor or film behind the shutter (depends if you’re shooting digital or analog) captures light from the image you’re taking. The longer the shutter remains open, the more light passes through, hence the brighter your image gets. If the shutter speed is too high (i.e. short exposure time) or too low (i.e. long exposure time), the image will be underexposed (too dark) or overexposed (too light) respectively. Check out this site for more details about how a camera works. In the workshop we use a DSLR camera, but you can do high speed photography with any compact camera that allows you to manually set the exposure time. No, your iPhone will not work…

If you want to freeze moments in a picture, you would normally select a high shutter speed. However, depending on the speed of the object that you are trying to capture, the mechanical system of the camera might be too slow.
Therefore, in high-speed photography settings you can use a little trick: bypass the mechanical shutter, and freeze your image with a flashlight. The downside is that you need to be in a relatively dark environment with as low ambient light as possible.

What’s the setup?
Set the shutter to long exposure, e.g. 5 seconds or longer (it doesn’t really matter as you are in a dark room and no ambient light is captured by the sensor anyways). Now the flash needs to be triggered at the same time the event happens. If you’re throwing lemons into a glass of water for example, and want to capture the moment of the lemon diving in and splashing water, you may be able to do this by manually triggering the flash. You will probably need a couple of test runs, but eventually you’ll manage to trigger the flash simultaneously to the event and get a nice shot.
If you want to play with different light/shadow effects, you’ll need to take that flash off the camera. Check out the “Lighting 101 Series” on the Strobist Blog , it’s probably one of the best and most efficient resources on the web to get started with flash photography. In order to trigger your flash in the manual scenario, I use the Yongnuo RF-602 Wireless Flash Trigger. It has great test results and is the best bang for bucks in amateur-photography world. You’ll find them on ebay for ca. 40 AUD a transceiver/receiver pair.

Arduino microcontroller with laser sensor gateFor capturing faster events, e.g. an exploding water balloon, it’ll be very hard to capture the event by manually triggering the flash. Therefore, you’ll need a microcontroller / sensor installation that fires the flash automatically when it senses an event. For the exploding balloon example, you would probably use a microphone to trigger the flash as soon as it hears the balloon exploding (find a great video tutorial here).
In this workshop I use a laser-light gate to sense when the object passes a particular spot (e.g. when hits the ground), and an Arduino microcontroller, an optoisolator and PC-synch cable to fire the flash automatically according to the laster-gate.
Check out this tutorial on how to control a flashlight through an Arduino, and further schematics and Arduino sketch to fire sensor triggered flash events. The video below shows the first development stage; the flashlight is triggered through an Arduino, by sending it a spacebar character through the computer’s serial port. Later the computer is replaced by a laser light-gate as a trigger input.

YouTube: High Speed Photography Setup: Trigger a Flashlight via Arduino
YouTube: High Speed Photography Workshop at The Edge

What’s the picture taking process?
1. Make sure the ambient light is low, ideally you’d be in a completely dark room
2. Set a 10 sec exposure time, and trigger the camera. You can set shorter or longer exposure, just make sure it gives you enough time to trigger the event that you want to capture.
3a. for fast, but not very fast events: Trigger your event and your flashlight simultaneously.
3b. for fast, really fast events: Trigger your event and make sure it crosses the laser light-gate to trigger, which will then trigger your flashlight automatically. In the workshop we used pegs and eggs falling on a table surface and mousetraps. If you use the egg/mousetrap combination, it’s a good idea to cover your sensor components and electronics…

The Arduino code for this workshop is based on Maurice Ribble’s solution. This worked great. However, during setup times the light sensor continued doing it’s job and firing the flash every time something crossed laser gate. I added a little activation button on PIN 2 to activate the flash trigger when it is needed. Here is the extended code:

// Maurice Ribble
// 4-12-2008
// http://www.glacialwanderer.com/hobbyrobotics
// Activation-Button added: Mark Bilandzic, 23/02/2012

// This code is designed to to tune (see PRINT_MESSAGE define) and
// to run a sound sensor and a laser sensor. Both of these sensors
// Are used to trigger a flash. It should be easy to add additional
// sensors if you want.

// These enable the different types of triggers

// The threshhold values for the different triggers.
// These may need to be changed depending on evironment and sensors being used.
// Using PRINT_MESSAGES can help determine the correct value for these.

// This prints messages to the serial port. This is good to enable while determining
// the threshholds for your trigger, but these communications are very slow and
// when using these sensors to actually take pictures this should be turned off.

// The digital pins being used
#define LASER_PIN 5

// The analog pins being used

#define BUTTON_PIN 2
boolean active_flash = false;

void setup()
digitalWrite(CAMERA_FLASH_PIN, LOW);
digitalWrite(LASER_PIN, LOW);

digitalWrite(LASER_PIN, HIGH); // Turn on the Laser

Serial.begin(9600); // open serial

void loop()
int soundVal;
int laserVal;
int button_state = 0;

button_state = digitalRead(BUTTON_PIN);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (button_state == HIGH) {
active_flash = true;
Serial.println(“button pressed”);

soundVal = analogRead(SOUND_TRIGGER_ANALOG_PIN);
//println(“Sound: ” + soundVal);
if (soundVal > SOUND_THRESHHOLD)
Serial.println(“Flash Triggered!!!”);
digitalWrite(CAMERA_FLASH_PIN, LOW);
Serial.print(“Sound: “);
Serial.println(soundVal, DEC);

laserVal = analogRead(LASER_TRIGGER_ANALOG_PIN);
if (laserVal < LASER_THRESHHOLD)
Serial.println(“Below Flash-Threshold!!!”);

if (active_flash == true) {
digitalWrite(LASER_PIN, LOW); // Turn off laser during picture
//Serial.println(“Flash Triggered!!!”);
digitalWrite(CAMERA_FLASH_PIN, LOW);
digitalWrite(LASER_PIN, HIGH); // Turn laser back on after picture

active_flash = false;

Serial.print(“Laser: “);
Serial.println(laserVal, DEC);


Original version of this post published at http://kavasmlikon.wordpress.com/2012/02/26/high-speed-photography-workshop-with-arduino/

2 replies to “High Speed Photography Workshop with Arduino

  1. Rich Greenwood

    Thanks Mark – it was a great course. Very interesting and good fun too!

  2. Linda

    Great shots – wish I was able to attend

Leave a Reply

Your email address will not be published. Required fields are marked *