dropController V2

I have moved the dropController to its own website at www.dropcontroller.com and this page is no longer being updated.

The new site also includes dropControllerBT with the dropControllerBT Android app and dropControllerPC with the Windows app.


Arduino based drop controller for creating water drops for drop collision photography.

The dropController is used to create water drops for water drop photography. It allows up to 9 drops to be created and the size and time for each drop can be fully controlled.

Below is version 2 of the dropController. I’ve been using it for a while but have only just got round to documenting it. It is still bread board only but has been working well. It is based around an Arduino Nano which is ideal for use with bread boards.

The circuit is fairly simply and should be able to be created by anybody.


dropController version 2 features

Connections for 3 solenoid valves
Up to 9 drops. Each drop separately controlled
Camera shutter and focus control
Mirror lock up option
Flash trigger

LEDs to show when camera, flash and valves are active
Switches for draining the valves
5 button navigation keypad
4×20 2IC LCD screen

Loop mode (Keep looping until you stop it)
Increase or decrease times (for example increase the flash trigger time or decrease a drop start time each loop)
Quick mode when using up to 3 drops (uses a simplified display)
Full mode when using more than 3 drops
Save system settings
Load and save drop data (can save 3 different sets of data)
Auto load drop data on start up

The dropController uses the following Arduino pins

PIN 5 – UP
PIN 7 – SOL 1
PIN 8 – SOL 2
PIN 9 – SOL 3
PIN 10 – Flash trigger
PIN 11 – Camera trigger – shutter release
PIN 12 – Camera trigger – focus
PIN 13 –
PIN A0 [14] – Analogue keypad
PIN A1 [15] –
PIN A2 [16] –
PIN A3 [17] – Pause/Remote start button (A3 is used as a digital pin)
PIN A4 [18] – LCD
PIN A5 [19] – LCD
PIN A6 [20] –
PIN A7 [21] –

The dropController can use either a digital keypad, where the button switches are connected to separate pins, or an analogue keypad that uses just one pin.

Sequence of events

The general sequence for how I use the dropController is:
Activate mirror lock up.
Wait a second
Open shutter (camera in bulb mode)
Activate the solenoids and create the water drops.
Wait for the splash or the collision
Fire the flashes
Close the shutter

You can also use the camera with a set shutter time rather than bulb mode. This is how I used version 1 which could not activate bulb mode on my camera. I set the camera to manual with a shutter speed of around a second. The only thing to take care with is ensuring the flashes fire before the shutter closes.

Most people online suggest a totally dark room but I have found that I can take photos in dim light rather than totally black. To check the light I normally take a 1 second exposure before I start. If the photo is black then the light is OK. Use a low ISO (100/200) and a small aperture (F11-F16 works for me).

Used in the way it is the flash that takes the photo, not the shutter or the aperture.

Camera and flash triggers

The camera trigger circuit uses 4N25/26 opto-couplers as digital switches (I have used both 25’s and 26’s since these were what I had but other models can be used). Opto-couplers allow the Arduino to trigger the camera and flashes without having a direct electrical connection. More info here. The camera focus and camera shutter triggers use separate opto-couplers which then go to the same 3.5 connector. I have a Canon camera which requires both focus and shutter to be active for bulb mode to work. I didn’t realize this when I built version 1 and the focus control was added in version 2.


Close up showing the opto-couplers

Solenoid valve connections

The solenoid valves are controlled through TIP120’s. These are used as digital switches similar to the opto-couplers. The difference is the TIP120’s allow a larger voltage/current to be switched.

TIP120’s are used as switches and are controlled from the Arduino. The push button switches are to drain the valves. You can also do this in the software but it is not as convenient.
Close up showing the solenoid valve connectors.

Power supply

The dropController and the solenoid valves are powered from the same power supply; either a 12V or a 24V wall wart power supply (I bought them from a local shop). The dropController accepts both voltages but the power supply must be matched to the solenoid values you are using. Valves with different voltages cannot be used together.

When I started working on version 2 of the dropController I only had 12V solenoids and I used a 7806 to reduce the voltage from 12V to 6V to power the Arduino. (see the 12V to 5V/6V post). I later bought 24V solenoids and so used a 24V power supply. I had concerns about how hot the 7806 would become when reducing 24V to 6V so I looked for other options. I now use a pre-made regulated power converter that I bought from Taobao (they are also available from ebay and many online suppliers). These little converters accept a wide range of input voltages and are able to output a wide range of voltages. The output voltage is set by turning a small pot.

Output from the power board is set at 7.5V and goes to the Arduino VIN. The rest of the circuit is then powered by the +5V from the Arduino.
Sorry about the dust in the photo!


If you are only using 12V valves then you can use a 7806. See the post 12V to 5V / 6V

Reverse Voltage Protection

In an earlier version of the dropCopntroller, that used a 7806 to reduce the voltage from the external power supply, I had a weird problem, when the Arduino was connected to a computer by usb and at the same time the device was powered by the external power supply, the computer would crash when the usb cable was unpluged. I fixed this by adding a diode to the 5V out line on the Arduino. This stopped the computer crashing but unfortunately the diode ate too much power (fairly high forward voltage drop) and the LCD screen stopped working. After some Google research, I came across a post that described using a mosfet instead of a diode. The mosfet offers the same polarity protection without the large forward voltage drop.


When there is power on the 5V line the mosfet is turned on and allows current to flow. Remove the 5V and the mosfet turns off.


Navigation keypad

The dropController can now use either a digital keypad or an analogue keypad. When I first started I could not find suitable navigation keypads so I built my own. Later, I found pre-made analogue keypads. It is fairly straight forward to make your own keypads, either digital or analogue, see the keypad post for details.
Keypads used in the dropController

Remote start button switch

The remote button switch is exactly the same as the switches used for the digital keypad. The only difference is it is on the end of a cord and connected by a 3.5 jack. I currently use the A3 pin as a digital input for the switch.

Here is my remote cable.

LCD screen

The LCD is a regular 4×20 characyter display with an I2C daughter board. Using I2C means the display only uses 2 pins on the Arduino; A4 and A5.

Download the (draft) manual

Please visit www.dropcontroller.com for latest downloads

Download the sketch

Please visit www.dropcontroller.com for latest downloads

This version can use either a digital keypad or an analogue keypad. Set the type you are using at the start of the sketch.

Uncomment the statement that matches the type of keypad you have.

// comment out the type of keypad you are not using

If using an analogue keypad then uncomment the #define KEYPAD_ANALOGUE statement

// comment out the type of keypad you are not using

The Arduino IDE will then automatically select the correct code to compile.

This is an ino file and you will need to use the Arduino IDE to compile it and then upload it to an Arduino

The sketch has 7 tabs:
– dropControl
– Functions
– Create_Menu_strings
– Eeprom
– Menu
– Make_Drops
– Keypad

The main sketch is in the dropControl tab.

The dropController sketch uses the following Arduino libraries:
– digital IO performance. Download from here
– EEPROM. Included in the Arduino installation
– Button. Download from here
– Wire. Included in the Arduino installation
– LiquidCrystal_I2C. I used the version from here. The LCD page on the Arduino Wiki is very helpful.

Libraries must be installed in the correct Arduino folder before they can used. For more information have a look here and here.


3 thoughts on “dropController V2

    • I haven’t used this type of joystick but it looks like it gives you analogue values for the x and y axis. Have a look at http://www.arduino.cc/en/Tutorial/JoyStick, I believe it is similar.

      I have a new version of the dropController that uses an analogue keypad. The analogue keypad uses a single wire and outputs a different analogue value depending on which key is pressed. This version would be easier to change to work with a joystick. I will post the new version a little later.

      To make the joystick work you would need to determine which direction is selected by checking the values of the x and y wires. Start by creating a sample sketch that outputs the values of the x and y wires and find what values correspond with the 4 directions; up, down, left and right. These can then be used in other sketches. You will need to check for the button switch as well.

      The dropControl sketch only has one variable for the analogue keypad so you will need to add a second variable for the extra wire on the joystick but this should not be too hard.

  1. Just updated the sketch to the latest version. This has functions for both a digital keypad and an analogue keypad. See the main article above.

Comments are closed.