All of my waterdrop photos are taken in a dark room, this isn’t totally necessary and you should be able to get away with a lamp illuminating the corner of the room that you are working in.
I have camera in bulb mode and keep the shutter open for roughly 1 second, in this time the water will drop the firing and the flash will freeze the motion of the water.
I generally use an aperture of F10-F14 and an ISO of 100, 200 or 400, these can be adjusted to give you the disired exposure; but it is important to to keep the flash output at 1/32 or lower, anything higher and you’ll run the risk of motion blur.
For setting the focus I release a drop of water and then place pen where the drop of water landed, I’ll then focus on the pen and switch the lens to manual focus.

Here is a typical setup that I use:














  1. Camera Control Box
  2. PC Sync Distribution Box
  3. Tripod
  4. Camera
  5. 3 x youngou yn460 modified with PC Sync
  6. White plate filled with fluid
  7. Various Food Dye
  8. White Perspex for Flash Bounce
  9. Solenoid Valve
  10. Mariotte Siphon


I was really excited when all this was built and working, and the first thing that I did was to make an animation of a water drop collision. The following video consisted of 200 stills each still was from a different sequence and taken 1ms apart, I then edited them together in iMovie, this animation shows just how repeatble the setup is!!

In these photos I was playing around with food dye, lighting and different surfaces.



Thanks for staying with me to the end, I hope that you have enjoyed reading and have found some of this information useful. Please feel free to ask me any questions.


Programming is fairly new to me, I’ve done some PHP stuff at work but it’s all self-taught; fortunately there is lots of information about Arduino code on the internet.

Here is the program that I used for my Arduino, this will basically drop a single droplet and hopefully capture a crown. The timing used in this program will only work for my setup, you will need to tweak the delays for your own setup!

I have 2 switches on my box one switch is latchable and the other is momentary, the latchable switch has to be on for the Arduino program to run; also there is test mode so when the latchable switch is off and the momentary switch is pressed for 5 seconds the solenoid with open and allowing a stream of water through, this is to aid focusing!

Since starting this blog and trying out the camera controller for water drop photography I’ve decided to ditch the motion sensor, I’m not sure that it’s required when using a solenoid valve to drop the water; so there wont be any reference to the sensor in the core of the program. I have still built the circuit as I feel that it would be useful in other areas of photography.

I’ve programmed the Arduino the way that I want it to work; it’s entirely upto you how you want to do things and there isn’t a right or wrong way
You can copy the code below and paste it into the Arduino programming interface.


//Camera Controller
//By Daniel Borg
//20th June 2011

// These constants won't change:
const int startPin = A0; //Pin that the start button os attached to
const int sensorPin = A1; //Pin that the sensor is attached to
const int solenoidSwitch = A2; //Pin that the solenoid switch is connected to
const int ledPin = 13; //Pin that the LED is attached to
const int cameraPin = 12; //Camera Trigger output
const int flashPin = 11; //Flash gun output
const int laserPin = 10;  //Laser Pointer output
const int solenoidPin = 9; //Solenoid output
const int threshold = 40; //An arbitrary threshold level that's in the range of the analog input
const int testSensorValue = 1000; //For testing

void setup() {
  Serial.begin(9600);  //Open serial port for testing
  pinMode(ledPin, OUTPUT); // Initialize the LED pin as an output
  pinMode(cameraPin, OUTPUT); // Initialize Camera Trigger as an output
  pinMode(flashPin, OUTPUT); // Initialize Flash Trigger as an output
  pinMode(laserPin, OUTPUT); // Initialize Laser Pointer as an output
  pinMode(solenoidPin, OUTPUT); //Intialize Solenoid as an output

//Check start button state
int startPinValue() {
   if (analogRead(startPin) > threshold){ //read the state of the start button
     return HIGH; //If start button pressed
   } else if (analogRead(startPin)  threshold){
    return HIGH; //If solenoid switch is pressed
  } else if (analogRead(solenoidSwitch) < threshold){
      return LOW; //If solenoid switch hasn't been pressed

//Put the system into test mode, this will open the solenoid to aid focusing.
void testMode ()
   for (int x=0; x  threshold){ //check if the solenoid switch is still being pressed
     } else {
     if (x == 1000){
       digitalWrite(ledPin, HIGH);
       digitalWrite (solenoidPin, HIGH); //Activte the solenoid
       delay(5000); //Wait for 5 seconds
       digitalWrite(ledPin, LOW);
       digitalWrite(solenoidPin, LOW); //Deactivate the solenoid
     } else {

void loop() {

 int startPinState = startPinValue(); //Get start button state
 int solenoidSwitchState = solenoidSwitchValue();

 if (startPinState == HIGH) { //If the start button has been pressed

   if (solenoidSwitchState == HIGH){ //If solenoid switch has been pressed
     digitalWrite(cameraPin, HIGH); //Open camera shutter
     delay(500); //Wait for 500 milli seconds
     digitalWrite(ledPin, HIGH); //For test purposes
     digitalWrite(solenoidPin, HIGH); //Activte the solenoid
     delay(30); //Wait for 30 milli seconds
     digitalWrite(solenoidPin, LOW); //Deactivate the solenoid
     delay(20); //Wait for 20 milli seconds
     digitalWrite(ledPin, LOW); //For test purposes

      delay (420); //wait for 420 milli seconds
      digitalWrite(ledPin, HIGH); //For test purposes
      digitalWrite(flashPin, HIGH); //Turn flash gun on
      delay (200); //Wait for 200 milli seconds
      digitalWrite(ledPin, LOW); //For test purposes
      digitalWrite(flashPin, LOW); //Turn flash gun off
      digitalWrite(cameraPin, LOW); //Close camera shutter
      delay(1000); //Wait for 1 second
   } else if (solenoidSwitchState == LOW) { //If solenoid switch hasn't been pressed
     digitalWrite(solenoidPin, LOW); //Deactivate the solenoid

    } if (startPinState == LOW && solenoidSwitchState == LOW) { //if the start button and solenoid button are released
        digitalWrite(ledPin, LOW); //For test purposes
        digitalWrite(cameraPin, LOW); //Close camera shutter
        digitalWrite(flashPin, LOW); //Turn flash gun off
        digitalWrite(solenoidPin, LOW); //Deactivate the solenoid
        delay(1000); //Wait for 1 second
    } else if (startPinState == LOW && solenoidSwitchState == HIGH) { //If the start button is off and the solenoid switch has been pressed

There aren’t any hard and fast rules about water drop photography and the point of this blog is to give an idea of how I’ve done it. I’m sure that it you went ahead and built you own system that you would do things differently.

One thing that can be left to your own imagination is “The Rig” that will hold the Mariotte Siphon and solenoid valve; of course you don’t really need a rig you could just hang the items off of kitchen cupboards doors ;).

I chose to build a small (or not so small as it turned out) frame out of bits of timber, the sort of frame that I designed was similar to the one that is used in the game “Hangman”, it kind of works okay but like any first revisions….. it could be better, I think that it’s rather big and cumbersome. I will revisit this and come up with something new!!

One of the best things about digital media is the ability to place information into the file header called EXIF data, and one useful bit of information that can be stored is the longitude and latitude. Having the GPS coordinates embedded into the file header means that you can go back to a photo from 3, 4 or 6 years back and you can find out where you took it and best of all most photo sharing websites will display a map of where you have taken photos. There are a few ways of doing this, some cameras have built in GPS but these are very expensive and tend not to work very well, a separate GPS tracker but this is just another item to carry around and will probably set you back £100 or you could use your smart phone which you would most probably have with you at all times anyway.
Most smart phones nowadays have built in GPS and will track your movements when you want them to (or even when you don’t most probably), you don’t have to have a flashy iPhone; all you need is a phone that will export a GPX track. I do have an iPhone and unfortunately you’ll have to buy an app that will record your tracks in GPX form, I tried using several free but these were fairly clunky and didn’t work that well. After much research I bought “Geotag Photos Pro” and at the time of purchase was £2.39, but it really is a great app, the interface may seem a bit basic but don’t let that fool you!
When it comes to Geo Tagging the main thing to remember is to make sure that the camera time and phone time are in sync; the phone will log the GPS data and attach a time stamp to the coordinates and the geotagging software will try to match the time of when the photo was taken to closest time stamp in the GPX file (this is what the exported GPS data is called).

When “Geotag Photos Pro” is launched you will see the following screen:

The first things to do are to set the how often the GPS loction is logged. One of the best things about this app is that it doesn’t leave the gps on, it will just turn it on when it is time to record a coordinate, so if you want to preserve battery life and you’re not moving around set this to every few minutes, but be aware that this won’t be very accurate if you are on the move. Here is what the screen like, I’ve set my phone to log every 30 secs.

Also you’ll need to sync the phone and camera time, press settings on the Geotag Photos Pro home page and you’ll see this:

Now go into setup camera time and set the time on your camera to what is displayed here.

Once you’ve set the auto log and set the camera time create a new trip and press record.

When you’ve finished logging your trip you can go into trips log and this will look like

The other good thing about this app is that you don’t need to upload the data to a website to obtain the track (although you can for archieve purposes), by pressing the blue circle you will have options of deleting/rename a trip or exporting the trip via email or itunes.
You can also check whether or not you have uploaded the trip to the Geotag Photos Pro website, if you have a symbol of a house with a tick it means that the trip has been uploaded.

To upload your trip go back to the home screen and press settings & upload, you will need to have an account setup do this, if you dont have one select “Link with Geotagphotos.net”, once your account has been set up go back a page and select upload logged data and then start upload. When the trips have been uploaded you will be able to delete them off of your phone and they will still be available on the Geotagphotos.net website.

Another important part of water drop photography is making sure that the water flows through the solenoid at a constant, the beauty of using an Arduino to control the setup is that everything is repeatable but this can only be achieved if the water pressure stays constant!!
A mariotte Siphon can be used for this and will ensure that the water flows at the same rate regardless of how much fluid is in the vessel. I decided to use a 50ml syringe to hold the liquid, it might not sound like a lot but you wont need a 500ml drink bottle when all you are doing is releasing a drop of water at a time!

There is plenty of information on the internet about “Mariotte Siphons”, I found these websites useful and it should give you an idea of how to construct something

Mariotte Siphon
Mariotte Bottle

Okay, now we have the circuits designed and built they need to be mounted in the box and wired up.

I divided the box in to two halves, the bottom half will have the Arduino and strip board mounted, and the top half will have the connectors and switches mounted.

The Ardunio has three mounting points and I decided to mount this flat inside the box, you will also have to consider the fact that you will need access to the USB port and the power connector. The way that I did this was to cut 2 holes into the side of the box and the held the Arduino in place, I then drilled through the holes that are already in the Arduino through into the base of the box. Here are some photos to give you an idea of what I did!

Then I cut the strip board to size so that it would fit in the slots provided and would still allow me to put the lid back on. Once the strip board has been cut to size you should be able to crack on with building your circuit! Here is a photo to show you how mine looked, please note that at the time of taking this I hadn’t built the solenoid circuit.

The last thing to do was make a rough sketch of how I wanted the connector and switch layout to look. I then made a scaled diagram to make sure that everything would fit, measured and cut the relevant holes. Another couple of photos to show you how the finished box looked. I wouldn’t use those big audio connecters again as they are an over kill and they take up unnecessary space!

Here is the finished Box; you’ll see two 3.5mm stereo jacks, these are for triggering the camera and flash guns. The 3 pin XLR is for controlling the solenoid and the 5 pin XLR is for the sensor. The switches perform a few operations and more info can be found on the Programming page.
On the side of the box are 2 power connectors, one is 5V for the Arduino and the other is 12V for the solenoid; there is also a USB socket which is on the Arduino itself and is used for uploading programmes.