dropControllerV4: Loop Page and Delta Valuesxxxxx

To get drops to collide and then photograph the collision at exactly the right time can be very challenging. The drop start times have to be timed exactly right, the drop sizes have to be just right, and the shot has to be taken at exactly the right time. To do this with most drop systems is time consuming and can be frustrating. Wouldn’t it be nice if you could loop the drop sequence and move the flash trigger time slightly every loop. Or, make the drops start at different times every loop. Or, make the drop sizes larger or smaller. Using the dropController and Loop Mode you can.

Loop Mode is the heart of the dropController series of controllers. There has been a version of Loop Mode in every controller built, including the very early prototypes.


Loop Mode Control

Loop Mode is activated using the Loop Mode control on the main Drop Data Page.

Clicking the Loop Mode control button cycles through the various options; OFF, BUTTON, TIMER

Loop Mode is off and Single Sequence Mode is used.

Loop Mode is active. To start each drop sequence the Loop Page START button has to be clicked.

The first drop sequence is started by clicking the Loop Page START button and then subsequent sequences are started when the TIMER reaches 0.
The TIMER time is in seconds,

When Loop Mode is OFF, Single Sequence Mode is used. When Loop Mode is ON, clicking the the main START button opens the Loop Page

When BUTTON is selected. Each drop sequence is started by clicking the Loop Page START button and after each sequence is finished, the app will wait for the user to click the START button again.

In between sequences the sequence number will increase and any delta values will be added or subtracted.

When TIMER is selected, the first sequence is started by clicking the Loop Page START button. After the first sequence finishes the app will start a timer. When the timer reaches 0 the next sequence will start.

In between sequences the sequence number will increase and any delta values will be added or subtracted.

Timer Delay

You will need to experiment to see what wait time suits you. I generally use around 10 seconds. This allows time for the water in the tray or bowl to settle and also allows time to move any bubbles out of the way. If you find you are constantly removing bubbles or adjusting things then it is probably better to use the BUTTON option.


Using Loop Mode

Probably the easiest way to show how Loop Mode works is to use a simple example. Below is a 2 drop sequence where I want to let the first drop fall, create a Worthing Jet, and then have the second drop hit the Worthington Jet. An easy way to do this is to start the second drop later than actually required and then reduce the drop start time until the drop hits the Worthington Jet. Using a manual system this would take quite a while to achieve. Using the DropController it takes a few minutes at most.

Two drops:

First drop
– Start time = 100ms
– Size = 35ms
No delta values.

Second drop
– Start time = 250ms
– Size = 30ms
A -5ms delta on the drop start time

The Camera Trigger is set to SYNC.

The Flash Trigger is set to 550ms no delta.

Loop Mode: BUTTON is selected.

The first drop does not have any delta values, therefore, its properties will not change. It will always start at 100ms and the size will always be 35ms.
The second drop does not have a delta on the size, so the size will not change, but there is a delta of minus(-)5ms on the Start Time. This means the drop will start 5ms earlier every loop.
The Camera Trigger and Flash Trigger times are fixed.

When the START button is clicked, the Loop Page opens

From here you can either start the first sequence by clinking the Loop Page START button or click EXIT to return to the Drop Data Page

The Loop Page has 3 main sections:
– Sequence number + drop data
– Trigger data
– Controls.

Sequence Number

The sequence number is displayed at the top. While looping, the sequence number will increment by one every loop.

Drop Data

The drop data shows the current times based on the delta values and the sequence number. On the first sequence, the delta values are not used and so the times are the same as displayed on the Drop Data Page.

Delta values are shown inside square brackets

To start the sequence, click the START button.

While the drop sequence is active the START button changes to ACTIVE.

After the sequence is complete, the ACTIVE button changes back to START ready for the next sequence. A few other things change as well.

1 – The sequence number increases
2 – Values with delta values are recalculated and the new value shown
3 – The RESET button becomes active
4 – The COPY button becomes active

Drop 2 Start Time delta value has been deducted from the drop start time. The new start time is now 245ms.

Clicking the START button again starts sequence 2. After the sequence finishes the Loop Page is updated to show the drop times for sequence 3.

and again, the drop times are updated to taking the delta values in to account.

The drop 2 start time is now 240ms.

You can use the Graph to see what is happening.

[image – graph shots]


By using a delta value on the drop 2 start time you can very quickly capture a series of photos like the above.


The RESET button sets the sequence back to 1.


The COPY button copies the drop times from the current sequence to the main Drop Data page.

In the above example, clicking COPY after sequence 2 (and before sequence 3) would copy the drop 2 start timer of 240ms to the main drop data.

For a detailed guide on how to capture a sequence of shots like the one above see the dropControllerV4: First Drops Guide


Build Guide – dropController V2 on a breadboard

The bread board version has LEDs to show when the camera and the solenoids are active and switches for draining the valves.

dropControllerBT Bread Board


Arduino Pins

dropControllerBT  Arduino Pins


Parts List: Bread Board Version

Bread Board x 2
Various wires
Arduino Nano x 1 (or any type of AVR based Arduino)
HC-06 Blue Tooth module x1 (HC-05 can also be used)
DC-DC step down power supply x 1 (can also use a LM7806 based circuit)
LEDs x 8 (9 if you want to add one to the power in)
– 3 x LED for camera trigger activity
– 3 x LED for solenoid valve activity
– 1 x Green LED for status – waiting
– 1 x Yellow LED for status – active
On/off switches x 4
– 1 x main power on/off switch
– 3 x solenoid valve drain
3.5 stereo sockets x 2
RCA/Phono sockets x 3
Power socket x 1
4N25 optocoupler x 3 (Anything similar also suitable)
TIP120 x 3
F9Z24N mosfet x 1 (or similar)
330 ohm resistor x 5
1K ohm resistor x 4
2K ohm resistor x 1
2.2K ohm resistor x 3
10k ohm resistor x 1
1N4007 diode x 8

3.5mm jacks to connect to the camera and shutter leads
RCA/Phono jacks to connect to the solenoid valves.

Of course, you will also need solenoid valves, a power supply and an Android device.

Circuit Diagrams

dropControllerBT Bread Board Circuit Diagram

Camera and flash triggers

The camera trigger circuit uses 4N25 opto-couplers as digital switches. Opto-couplers allow the Arduino to trigger the camera and flashes without having a direct electrical connection. 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.

Close up showing the opto-couplers
dropControllerBT Bread Board Optocouplers

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.

Close up showing the solenoid valve connectors.

Status LEDs

I previously used an LCD to show the device status and I suddenly realised I didn’t need this. I could show the same information using a couple of LEDs. A green LED shows when the dropControllerBT is waiting. A yellow LED shows when the device is active.


HC-06 Bluetooth Module

The HC-06 bluetooth module has power regulators to allow an input voltage from 3.6v to 6v. The module is actually a 3.3v device and only the voltage in pin can use a voltage larger than 3.3v. The RX and TX (receive and transmit) pins are still 3.3v. The Arduino will see a 3.3v as HIGH and so the TX pin of the BT module can connect directly to the RX pin on the Arduino (pin D2). This is not the same for the RX pin on the BT module. The RX pin is 3.3v in and we need to reduce the Arduino’s 5V to 3.3v by using a voltage divider. A simply voltage divider is 2 resistors in series. To convert 5V to 3.3v I use 1 x 1K and 1 x 2K resistor.

Note: A HC-05 in slave mode can be used instead of the HC-06.

As a quick guide to the voltage divider; 1K + 2K = 3K. 1K is a third of 3K so it reduces the voltage by a third.
One third of 5V is 1.66 and 5-1.66 = 3.33 which is what we want. Putting the resistors the other way would reduce the voltage by 2 thirds. For more information on voltage dividers have a look at the Sparkfun tutorial

Double check the resistors you are using. It is very easy to use the wrong values.

dropControllerBT Bread Board BT


The dropControllerBT device and the solenoid valves are powered from a single 12V wall wart power supply. The 12V power in goes to the solenoid valve connectors (through a diode) and also to a DC-DC step down converter. The converter reduces the voltage in to 5.7V. This goes to a 1N4007 which reduces the voltage to 5.0V and then connects to the Arduino 5V pin and the bluetooth module.
I am currently using a converter with a display to drop the 12V to 6V. When I eventually get round to putting this project in a case I will use a smaller converter with no display.
dropControllerBT Bread Board Power

Reverse Polarity

In an earlier version of the dropCopntroller, 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 unplugged. 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). I later swapped out the diode for a mosfet. The mosfet offers the same polarity protection as the diode but 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.
dropControllerBT Bread Board Power