Like with many other software development projects, while writing the application, many new features pop up. I decided to implement basic features first  and based on the results and experience of the first photo sessions build new releases. Currently the application has the following features:

Version 0.19 – updated 6 august 2011
(download link at the end of this article)



  • LCD Display Control
  • 16 keys matrix keypad
  • 1 x flash trigger output
  • 1 x autofocus & 1 x shutter output
  • 1 x water valve output
  • 1 x analog input for sound & light detection sensor

Program (menu):

  • Basic waterdrop program
  • Auto increment time between drop creation and taking photo
  • Auto increment time between two drops
  • Auto increment size of waterdrops
  • Sound detection
  • Lightning detection
  • Store values in EEPROM
  • Load values from EEPROM
  • Erase EEPROM values
  • Configuration Menu – save basic values
  • Possibility to enter some values on 0.1 millisecond accurate.

In the basic program you enter the waterdrop size (time to open valve), time between creating waterdrop and taking a photo (trigger flash), number of waterdrops, time between drops, number of photocycles. You can also enter the index number of the last photo taken by the camera. This can be very useful to find the specific settings with a specific photo.

Within the three auto increment programs you also enter the increment value. i.e. Auto increment time with 5 milliseconds.  The program will run the number of photo cycles and take a picture. It will increment the photo index number.

Using the store values in EEPROM menu you can save the settings used to create a specific photo. Just enter the number of the photo (your camera usually stores this in the filename) and save the settings. Every time a photo is taken, the used settings are stored within the EEPROM. Settings up to 39 photos can be stored. Users can flag any of those settings to skip them in an EEPROM erase cycle. This way you can keep succesful settings while you can still erase useless settings. In the future it might be nice to add external EEPROM memory.

(Storing information in EEPROM has its limits. The EEPROM can be written 100.000 times, after that it might become defective. This means in theory that after taking 100.000 photo’s (depending on the new program maybe 400.000 photo’s) you have to buy a new Atmel processor. They cost 5 euro’s and 100.000 photo’s is also the estimated lifetime of a regular dSLR mirror mechanism, so I would worry more about buying a new camera ;-)).

It’s now possible to enter values on 0,1 millisecond accurate. (Time between two drops and the time between releasing a drop and taking a shot). I expect that an effective accuracy of 0.5 millisecond is more realistic but it might be the difference between a nice picture and a great picture :-).


After one evening using my initial program, I found some possible improvements which have to be implemented.

  • Possibility to use different dropsizes within one cycle (enter value for 2nd dropsize implemented since v0.18)
  • When easily possible, make the increment programs also accept negative numbers, making it effectivly a decrease
  • when memory size allows it, add control by using PC over Serial port
  • Use EthernetShield and control from PC or webpage
  • Think about making the valve movable (just like inkjet printer head) to create drops next to each other.
  • optimize the questions asked in the menus. (i.e. when only creating 1 drop, don’t ask for time between drops = implemented in v0.19)
  • Add possibility of Next/Prev within a program.

Please leave a ‘thank you’ comment when you download the source code. Just let me know what you are building, your progress, and so on. Enjoy building!