Archive for the ‘Camera Controller’ Category

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 »

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

Read Full Post »

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.

Read Full Post »

Okay now I have some basic circuits the next thing that I wanted to do was to build the circuit on some strip board and make sure that it would fit inside a small hand held box, the box that I used can be brought from maplin and seemed perfect for the job; it’s big enough to fit the electronics in, has slots so that I can easily mount the PCB that I’ve made and is deep enough so that I can mount the connectors with a wiring loom attached.

The Solenoid Valve that I used can be brought from solenoidvalvesuk, and it was Shako PU220AR, I paid around £30 with VAT. The fittings for the valve can be brough off of eBay for a few pounds and the size of the inlet and outlet fitting will depend on the size of the water drops that you want.

Circuit Parts List

3 x 4N35 Opto-Isolator
1 x Opto-Coupler
3 x 1K2 Resistor
3 x 12K Resistor
1 x 1K Resistor
1 x 10K Resistor
1 x 270 Resistor
1 x 150 Resistor
1 x IRF640 FET
1 x 1N4001 Diode
Hand Held Box
Solenoid Valve
Strip Board
Hook up wire
Arduino Duemilanove/Uno

Read Full Post »

The first thing is to make a rough circuit for triggering the camera shutter and the flash, as I said earlier I had previously done this with a transistor and a relay but after reading a few posts about water drop photography it became very clear that a relay just isn’t fast enough due to its mechanical nature.

Transistors on the other hand are very fast switching and so they are perfect for the job. I wanted to keep the camera and flash trigger separate from the Arduino as the high voltages that the flash produces could damage the Arduino, and I plan to do this with an ‘opto-isolator’. An opto-isolator is basicly a LED and a Photo Transistor in a DIL package, turning the LED on will cause the transistor conduct but there isn’t any electrical connection between the 2 devices which means that the transistor is isolated from the rest of the circuit. Here is a very simple diagram that should get you started, you’ll need 2 of these, one for firing the shutter and one for triggering the flash guns; obviously the switch is just there to simulate an Arduino output pin.

The next circuit to work on was the sensor which would detect when something has passed through it; again this is a simple diagram. I have shown an opto-coupler in the circuit below, the advantage of an opto-coupler is that it is already assembled in a package is there is no need to align the LED and Photo Transistor; however the disadvantage of an opto-coupler is the very small working distance. Another method for a sensor could be to use a laser point and an LDR (light dependant resistor), this will allow a much greater working distance; but aligning the 2 devices can be tricky and the LDR will be effected by ambient light!

For consitant water drops the best thing to use is a solenoid valve, however these require a minimum of 12v and also draw more current that an Arduino pin can supply. We can still use the Arduino for controlling the solenoid, and this can be done by using an output pin to drive an opto isolator (as in the circuit above) which will turn on a FET and activate the solenoid, the idea of using an opto isolator to drive the FET is to protect the Arduino board from any harmful back EMF from the solenoid. Below ciruit that I got from the tutorial section on the Arduino website, I have made 1 or 2 modifications as the one on thier website didn’t work in the way that I wanted it to!

Read Full Post »

Older Posts »