What's on my mind!

DIY Waterdrop Device

To create exciting (water)drop photos, I need a setup to control the frequency and timing of the waterdrops falling down and splashing onto eachother. There are some solutions but those are all quite expensive in my opinion. Maybe I think differently about that after my DIY project.

So I decided to build my own waterdrop setup. When I talk about waterdrop I also mean other types of liquid as long as it doesn’t explode.

I’ll update this page during the DIY project which started November 7th with finding a suitable solution. Currently (December 11th 2010) the waterdrop device is ready in it’s initial version.  Pictures made with this setup can be found here and here. Specific information can be found at:

There are some basic parts I need for the waterdrop setup which are:

  • Watertank
  • Electric Valve
  • Main controller
  • some interfaces
  • some installation to mount all.

Because creating a sturdy mount and creating a waterbasin are not the rocket science part of this project, I’ll save them for later on. The main interesting part are the Electric Valve that needs to open and close quickly to create a waterdrop on the moment I want it. Also I need some part to control this valve and control the shutter of the camera and the flash. I need some microcontroller or computer for this. Then to connect everything together I need some interfaces that can handle the current and voltages of the components used.


My first thought were using a regular parallel port (old centronics printer port) on an old laptop connected to the electric valve, camera and flash to control the setup. Some simple MS-DOS or Linux application written in C++ should do the trick. I’m not completely convinced that the parallelport can handle the resolution I need (0,5 milliseconds). Actually the OS should support realtime processing to prevent the OS from accidently delaying the time intervals.

Because having a laptop near a water setup is not the most ideal situation and I have some experience in programming microcontrollers I looked for a microcontroller setup. A microcontroller is a combination of a microprocessor and necessary controllers for memory and input and output in one single chip. I found the Arduino Uno which is rather cheap (€ 25,-), has a open source programming environment and it also looks like it can handle microsecond resolution besides milliseconds ;-). This means possible more accuracy in the timing of the drops. It has many input and output ports, even enough to connect an LCD display in the future.

The Arduino Uno board arrived within 2 days and programming is relatively easy when you have some experience in a C – alike programming language. The prototype of the setup used a serial (USB) connection to the PC for receiving input like program choice and entering the delays. Later on I’ve replaced the serial communication with an LCD display and keypad so the device can be used without a PC.

Solenoid Electric Valve

Finding a suitable valve is rather difficult if you don’t know what to look for. The Shako PU220AR01 is used by other people too for creating waterdrops and I can confirm it is a suitable solenoid valve.
The valve will be connected with a hose to a watertank and it will open on an electronic pulse by the microcontroller. The time the valve is open will determine the size of the drop.

I ordered my valve at APEX Industrial Supply in the US. Make sure you get the right voltage (They have 110 volts AC and 24 volts DC of which I recommend the latter because it’s more safe). I received the valve within 3 business days (from US to the Netherlands).

You also need some brass hose pipes together with the valve. I recommend reading this page and start searching. Productnumbers can be found on that page too.


Sound Interface

To spend some time programming and experimenting a little more without the solenoid valve, I decided to build a sound interface to trigger the camera shutter after a large sound is detected. During the last days I’ve found more sites where the Arduino is used for high speed photography purposes. I will program mine myself, but the information on specific interfaces or sensors is very useful. I found this PDF with a sound detection circuit. It does work with contact noise (put the microphone on the table and drop something on the table). Popping a balloon does work too but I’m not to happy with it yet.

The sound interface can be connected to the Arduino Uno.

Remote Shutter Cable

To trigger the shutter of the camera you need a wired connection to the camera. I found a wired remote shutter trigger for $ 3,50 in HongKong with free shipping. I don’t care about the quality of the switches, I just need to cut off the cable + Connector. The cables are of sufficient quality. I smashed the switch so I could look inside to determine the wiring and the way the switch works.

Wire A will connect to Wire B when button is pushed half way (Auto Focus). Pushing the button further (trigger Shutter) also connects Wire C.

Autofocus = Wire A + Wire B

Shutter = Wire A + Wire B + Wire C

Again, look into the switch to see which wires you have to connect to trigger the autofocus and/or shutter.

Interfacing with Flash and Shutter

I use 3 optocouplers each connected to a digital out pin on the Arduino to trigger the flash, autofocus and shutter. I used the 4N25.


You should make a Mariotte Siphon which provides a stable pressure to the valve. I used a regular PVC drain pipe of 5 cm diameter. You can buy standard caps to close such pipes and glue them together. I also found a screwmount cap for this drain pipe, which is very useful when you have to empty the tank. You should be able to find some hosepipes in a petstore (aquarium stuff) so you can mount the hoses onto the pipe etc.


Costs & alternatives

When I started to write the article, I had only found pre-build systems for about 200 – 400 USD. When you have enough electronics and programming knowledge, you should be able to build a microcontroller controlled system yourself from scratch for half that price. The basic parts are cheap, but it becomes more expensive if you want to put it in a nice case, put an LCD display and Keypad on it. Although a 20×4 LCD and 16 key keypad can be bought on ebay for about 15 dollar. All the little ones add up quickly.

An alternative is the Camera Axe Store where you can buy an assembled or DIY Kit of the Camera Axe. It will save you a lot of time designing and developing the hard- and software.

I’m happy to help with questions, but please first use Google before asking ;-)


  1. August 5, 2011    

    Thanks for sharing your water drop technique! I have a similar yet different approach at http://www.great-photography-tips.com. The results seems to be the same. I went a more low tech route for creating the drips of water, but also use a remote trigger (key in water drop photography).

  2. October 4, 2011    

    Hi Alex, I was viewing flickr Photostream and came across your link which is spelled incorrectly and therefore does not link you to the correct page. copy below.
    http://www.vdsar.net/diy-waterd rop-device.
    As you will see beneath img 2855 and img 2857.
    The words ‘diy-waterd rop-device’ should read ‘diy-water drop-device’
    Hope this helps.
    Thank you for some very interesting and enjoyable photos and pages.
    Regards Robert.

  3. October 8, 2011    

    Hi Alex I am trying to learn more about using and programming the Arduino, so please can you help, I need to know the correct connections for the LCD. In yor source code, lcd(6,7,2,3,4,5) do these tie up with RS,EN,D4,D5,D6,D7 on the 20 x4 LCD. Many thanks for your assistance.
    Kind Regards Robert

    • Alexander's Gravatar Alexander
      October 12, 2011    

      In the source code the LCD is defined by statement: “Liquid Crystal lcd(6, 7, 2, 3, 4, 5);” This corresponds to Liquid Crystal Display pins (rs, enable, d4, d5, d6, d7). Pin RW on the LCD is connected to ground because we only need Write mode to the LCD. You can change the pins as you like as long as they are digital output and change the numbers in the Liquid Crystel lcd(6,7,2,3,4,6); statement accordingly.

  4. Austin's Gravatar Austin
    January 15, 2013    

    Hi Alexander.
    I have got your system up and running at a breadboard stage.
    I am having a lot of “key bounce”. For example, when an 8 is pressed the resulting LCD display is 8888 despite having the capacitor connected.
    Did you ever have this problem? Will I need to introduce code to cater for debouncing?



    • Alexander's Gravatar Alexander
      January 15, 2013    

      Hi Austin,
      good to hear you have it up and running.
      I don’t have issues with keybouncing. It’s a long time ago I wrote the code but I noticed that there are delays in ScanKeypad() function. I think processing is going to fast (or pushing a button to slow ;-) and therefore one button press is seen as multiple (instead of a key really bouncing). Try raising the delays.

      If you have additional code to make it better, you are welcome to share it with us.

      Good luck,

  5. David's Gravatar David
    December 20, 2013    


    A useful piece of software, thanks for sharing. I notice that there are three includes at the start of the code, Eeprom.h, LiquidCrystal.h and pgmspace.h. Can you tell me where to find them please.


    • December 21, 2013    

      Hi David,
      As far as I remember it is included in the Arduino IDE. So search through the folders of the IDE install. Why do you ask this question? Do you want to modify something or are those files missing?

      Google gave me this result: http://forum.arduino.cc/index.php?topic=47685.0

      Best regards,

      • David's Gravatar David
        December 21, 2013    

        Thanks, Alexander, you just beat me to it! I have just found them in IDE myself! LiquidCrystal.h is in Arduino\Libraries\LiquidCrystal while eeprom.h and pgmspace.h are in Arduino\hardware\tools\avr\avr\include\avr.
        I asked as the other applications that I have used (other water drop programs) included their #includes in the sketch. As you can guess I am a newcomer to Arduino, just finding my way around it.

        I’m waiting for an LCD and keypad to arrive then I’ll be interested to see what results I get. I’ll let you know how I get on.


        • December 21, 2013    

          Enjoy building! Looking forward to see some results!

  6. William Robinson's Gravatar William Robinson
    April 13, 2014    

    I am very grateful that you have made the fruits of your labour available on line I am trying to build my own system based on yours. Unfortunately I am totally green regarding programing and have come across the following problem:
    “WaterDrop_v019:474: error: function definition does not declare parameters”

    Which refers to this section of the program:

    ” Program {= {ChooseMenu() // ChooseMenu contains all logic to display and choose the menu options.
    void loop()

    long Answer_long;
    int Answer_int;
    float Answer_float;

    int Answer; //remove after working app (pff, I don’t know why anymore at v0.19 ;()

    switch (Program) {”

    The version of yourprogram is WaterDrop_v019.
    I would be grateful for any help/ guidance that you can give.

    Bill Robinson

  1. Alexander's Blog » Waterdrop Device Ready on December 11, 2010 at 23:10
  2. Alexander van der Sar Photography » Yellow Waterdrop on December 16, 2010 at 22:39
  3. Alexander's Blog » Water Drop Photography on February 12, 2011 at 17:50
  4. Alexander van der Sar Photography » Waterdrop on February 13, 2011 at 22:21
  5. The Barduino: Pt 1 « The Practical Problem Solver on January 3, 2012 at 22:19

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>