Archive for August, 2011

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.



Read Full Post »

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

Read Full Post »

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!!

Read Full Post »