Beginner An Idiots guide: DIY Water Drop Controller with Arduinos and stuff.

Something to put it all in!

It's about time I made a box to put all this stuff into and make it look a little more presentable.
I could have bought a box, but there were two very good reasons why I didn't:

1 - They are mostly square or rectangular boxes...made from plastic or aluminium - not very nice looking.
2 - The ones that did look quite nice, were very expensive!

So again, I thought those very dangerous words...."How hard can it be to make my own?"

Answer: not too hard, but certainly time consuming!
(And painful at one particular moment....I accidentally sliced my thumb open with a sharp knife!!)

Here is a list of the supplies I used:

  • 1 sheet of 5mm plywood (600mm x 1200mm) - sourced from B&Q, but it's readily available at most hardware stores.
  • 3 lengths of 25mm x 25mm planed timber - as above.
  • 1 2mm thick sheet of aluminium (100mm x 250mm) - BITSBOX LINK
  • Lots of M3 bolts of various lengths and matching nuts and washers - BITSBOX MECHANICAL FASTENERS LINK
  • Lots of M3 threaded inserts - LINK AS ABOVE
  • Nylon standoffs of varying lengths (to mount the LCD screen) - BITSBOX LINK (6mm M3)
  • Some suitable glue - I used 'No More Nails'....proper wood glue would have been better but I didn't have any.
The whole build took nearly two weeks of evenings (two to three hours per evening)
This is what I ended up with...
(Ignore the rough finish on the aluminium plate....it will be sanded smooth and primed for paint later)

full


full


This image shows the rear panel where the external equipment (camera/solenoid valve/power supply) will connect.
Aligning the hole for the Arduino USB socket was very fiddly!!
You'll see that I used a 3.5mm jack socket and a Phono socket - this is so there is no possible way to get the camera and the solenoid valve connected the wrong way round!

full


I was pleased with how the box turned out.
I wanted to make a kind of 'Marshall' amp style box, so I plan to paint it black and maybe even place some snazzy lettering on it for the controls.

Here's some more photos...

This one is without the front control panel - you can see the circuit board mounted inside, although only the Arduino is attached so far.
The control panel is mounted using M3 nuts and bolts....I could probably have used fewer, but I wanted it to be very secure.

full


A front view of the front - again showing the nearly empty circuit board and the rear connection panel.

full


This one shows the entire front removed so as to facilitate the removal of the entire circuit board.
The front section is secured using M3 bolts and M3 threaded inserts.
The inserts were glued into 5mm holes drilled into the main structure at the correct angle so that the main front panel would sit squarely.

full


continued below....
 
Last edited:
Continued from above...

Here is the circuit board sliding out from its mounting.
When it is in position, it will be held securely by the front panel, when the bolts are tightened down.

full


Sharp eyed amongst you will have no doubt noticed that the front controls are far from straight!!
I was using wood cutting drills to make the mounting holes for the switches, buttons and knobs etc.
It was indeed a frustrating endeavour, and proved unsatisfactory!

Here is an image of how bad it looks
(Note the potentiometer dials....yuck!!)

full


And the back of the panel...

full


It doesn't look too bad from this angle...

full

I was willing to let these minor mistakes stand, as they are not that visible, but then....

....horror of horrors, I broke the cardinal rule - "Measure twice, cut once!":facepalm:
I didn't check my measurements for the main on/off switch, and this is what happened...
You can just about see the gaping hole above the switch!
The switch needed to be a tight fit, since there are clips top and bottom to secure it in place.
It's wrecked!!:mad:

full


I have decided that this front panel plate is going to be a 'test' piece!
I have another sheet of aluminium on order, and will be making the whole thing again.:banghead:
As it is all hand drilled and filed with hand tools, this was a frustrating moment, but it was entirely my own fault.
I spent about a four days (~three hours every evening) painstakingly filing out all the holes and getting a good(?) fit for the switches etc, but right towards finishing, I go and make a stupid mistake and ruin the whole panel!!!
I've learned a valuable lesson!!

I shall certainly be much more careful when my new piece has arrived, and I'll always remember:

"Measure twice, cut once!"

Or maybe for me it should be...."Measure fifteen times, then measure again, then check the diagram, then measure again....and then maybe cut!!"

Thanks for reading folks, more to come soon!!
:)
 
Last edited:
full


The time delays were actually:

D1 - 00
D2 - 51
DD - 41
CD - 142
Sorry i did not understand! When it shows 351 it means 51???
In fact what i notice in mine is that when i power on it shows only 2 digits but if i rotate the pot to full scale it shows 102 but when i decrease it than shows 3 digits .... !! Dont know whats happening(even with the capacitor).

Leave here another 2 photos .....i think i had exagerated on the Xhantun gum in the first concentrations with water.....this one is more mixed with water.
 

Attachments

  • _MG_3738web.jpg
    _MG_3738web.jpg
    64.3 KB · Views: 19
  • _MG_3720web.jpg
    _MG_3720web.jpg
    38.2 KB · Views: 18
Last edited:
Gareth what a beautifull piece of wood art that you had made!!!....stunning!

Muito obrigado!(y)

Sorry i did not understand! When it shows 351 it means 51???

The LCD display shows 351, but the time delay was actually 51.
It's a weird anomaly, and I don't really understand why it happens.
It's definitely an error in the way the LCD displays numbers.
You seemed to describe a similar issue in your earlier post.

When I turn the pot to a maximum value (three digits), and then turn it down again (single or double digits), it seems to still 'remember' the third digit.
It doesn't restore the single or double digit readout of a lower time delay.

It becomes more confusing and random the more I turn the pot!
Therefore it was virtually impossible to see what the time delays were, even though the program cycle ran perfectly.

I think I read about the solution (placing the capacitor) on the Arduino forums.
It worked for me, so I hope that it will work for you.
:)

And those images you posted just now....beautiful, the first one is amazing, you've clearly put a lot of time into your project, and it's paid off, well done Sérgio (y)
 
The bug of the lcd still exist in mine....even with the capacitor.....when i reach the "102" than i get 3 digits until i reset the power supply.
Wonder if there will be a way to work always with the range of 0 to 999 ??
Other thing is that i have to change the pots conections because when i rotate clockwise the values displayed on the LCD will decrease....
I think it's just changing the polarity :)
 
The bug of the lcd still exist in mine....even with the capacitor.....when i reach the "102" than i get 3 digits until i reset the power supply.

Sounds very strange!
I know you have probably checked, but are you sure your capacitor has no polarity?
I tried mine both ways, and although mine have no polarity, it still seemed to work a little better one way round compared to the other.
Might be worth a try.

Wonder if there will be a way to work always with the range of 0 to 999 ??

We should both try to research this....I would be interested to know too!(y)

Other thing is that i have to change the pots conections because when i rotate clockwise the values displayed on the LCD will decrease....
I think it's just changing the polarity :)

I did this exact same thing too!:giggle:
Indeed, just swap the wires and you'll be sorted!
 
If I recall correctly, I am pretty sure that I have read about this issue before.
I think that whenever a three figure number is printed to the display which then changes to a two figure number, one digit of the original three figure number is left on the display.

I think the way around it was to print three spaces to the display in the correct location prior to the command that prints the actual figure. That way, the display is blanked each time erasing any previous item on the area of the display required.

I hope I have remembered that correctly. If I find where I read it I’ll post a link here.
 
I think i did it!!!!...thanks to Leebert!
Add this lines to each pot in the sketch:

LCD.setCursor(9,1); //set cursor position as bottom line, 9 characters from left
LCD.print(" ");
LCD.setCursor(9,1);
LCD.print(solDELval); //print the calculated time value dropTHREEval
delay(100); // make display more readable


Looks like this in the skecth:

void loop() {

dropONE=analogRead(potONE); //read analogue value from potentiometer 1
dropONEval=dropONE/(10.); //divide dropONE value from potONE by 10 to increase accuracy
LCD.setCursor(0,1); //set cursor position as bottom left
LCD.print(" "); //<<<<<<<<
LCD.setCursor(0,1);
LCD.print(dropONEval); //print the calculated time value dropONEval
delay(100); // make display more readable

dropTWO=analogRead(potTWO); //read analogue value from potentiometer 2
dropTWOval=dropTWO/(10.); //divide dropTWO value from potTWO by 10 to increase accuracy
LCD.setCursor(4,1); //set cursor position as bottom line, 4 characters from left
LCD.print(" ");
LCD.setCursor(4,1);
LCD.print(dropTWOval); //print the calculated time value dropTWOval
delay(100); // make display more readable

solDEL=analogRead(potTHREE); //read analogue value from potentiometer 3
solDELval=solDEL/(5.); //divide dropTHREE value from potTHREE by 5 to increase accuracy
LCD.setCursor(9,1); //set cursor position as bottom line, 9 characters from left
LCD.print(" ");
LCD.setCursor(9,1);
LCD.print(solDELval); //print the calculated time value dropTHREEval
delay(100); // make display more readable

camDEL=analogRead(potFOUR) ; //read analogue value from potentiometer 4
camDELval=camDEL/(5.); //divide dropFOUR value from potFOUR by 5 to increase accuracy
LCD.setCursor(13,1); //set cursor position as bottom line, 13 characters from left
LCD.print(" ");
LCD.setCursor(13,1);
LCD.print(camDELval); //print the calculated time value dropFOURval
delay(100); // make display more readable

LCD.print(" "); //print a blank line (16 spaces) to keep LCD clean
 
That's great, thanks Lee, you're a star!!(y)

I'll try this fix too when I get a chance, glad it worked Sérgio!(y)
Mine seems to work with the capacitor, but if I can avoid any unnecessary soldering then I'm up for that!!:LOL:
 
I hope you don't mind me posting my progress in your thread @GarethB. Please let me know if you rather I didn't.

Progress so far... It was a colder then expected afternoon in the garage. The box was 'borrowed' from another project as it was too small but ideal for this. I mounted the display and pots along with the switches and sockets. I also made up the solenoid valve lead and plug. I used heat shrink to reduce the outlet bore to about 3mm or so.

Looking okay so far I think.



 
I hope you don't mind me posting my progress in your thread @GarethB. Please let me know if you rather I didn't.

Progress so far... It was a colder then expected afternoon in the garage. The box was 'borrowed' from another project as it was too small but ideal for this. I mounted the display and pots along with the switches and sockets. I also made up the solenoid valve lead and plug. I used heat shrink to reduce the outlet bore to about 3mm or so.

Looking okay so far I think.




Amazing job Lee!!
Very nice work....looks great in that transparent box.
I certainly don't mind you posting any images here!(y)

Yours looks almost ready to go. I have just finished remaking my front control panel again....after messing up the first one! (See earlier posts!) :facepalm:
I've bought some cheap black spray paint....not sure I'll paint it just yet though....I'm anxious to get mine soldered up and working.
I've been putting this off until I absolutely have to!! Still a bit nervous about soldering....but it's going to have to happen sooner or later!!

Great to see yours is progressing well, definitely keep me posted, and keep the pics coming!!:)
 
Amazing job Lee!!
Very nice work....looks great in that transparent box.
I certainly don't mind you posting any images here!(y)

Yours looks almost ready to go. I have just finished remaking my front control panel again....after messing up the first one! (See earlier posts!) :facepalm:
I've bought some cheap black spray paint....not sure I'll paint it just yet though....I'm anxious to get mine soldered up and working.
I've been putting this off until I absolutely have to!! Still a bit nervous about soldering....but it's going to have to happen sooner or later!!

Great to see yours is progressing well, definitely keep me posted, and keep the pics coming!!:)

Thank you. I hope your project is going well too. Don't be too concerned about the soldering. What you did on the display looked absolutely fine. Making sure the pins / wires / strip board etc. are clean is the best advice I can give there I think.

Today, I soldered on the Nano to another piece of strip board mounted under the pots and have put on the TIP120, regulator, opto-isolator and diode. The next bit of work is to put in all the interconnections and program the Nano. I should be good to start testing at that point I hope :)
 
Hi,

Great job! thanks for posting your blog, most interesting.

I already had the HiViz.com Multitrigger3 so purchased their SplashArt unit to go with it. I quite like the idea of buying one kit of parts rather than having to hunt about for stuff.

One thing that bugs me about the HiViz kits are the lack of a digital display. After seeing your posts and how easy it is to program the Arduino, I set about to use the Arduino to measure the time on and off settings on the SplashArt. As the HiViz kits use 555 timers, a display of the settings before a squirt is not possible. There is a test socked provided, so I connected this to the Arduino and after a few hours of programming, now have a digital display showing all of the time on and time off settings after each squirt cycle :eek:)

Cost was under £5. I used an Arduino Nano, a 2 line LCD (which I'm going to change for a 4 line display, when it arrives from China). The finished item will be boxed, with a 12V to 5V converter (again waiting for it from China, cost £2) with a 2.1mm power socket and two BNC test sockets to connect to the SplashArt & Multitrigger3. Happy to supply the code, wiring etc if anybody would like it.

Have seen posts higher up regarding NPT & BSP threads. Again Ebay & China are the answer. I got a pack of four 1/4"NPT to 6mm barb fittings for £1.27. The size 6mm refers to the outer diameter, the actual hole for the water is smaller. Alas 1/4NPT to 3mm barb are not as cheap. Aliexpress seems to be the cheapest source at £1.28 inc postage.

Well done with the program. I hope you do not mind me suggesting an alternative to dividing your potentiometer input values. Instead, use the 'map' command. It allows for better matching of the input range to the output.

int dropOne = analogRead(potONE);
dropONEval = map(dropOne, 0, 1023, 8, 120);

In the example above, the potentiometer gives an input into the Arduino of 0 to 1023. This is now mapped to a value of 8 to 120.
So if the input reads '0' (pot fully anti-clockwise) the output will be '8
and if the input reads 1023 (pot fully clockwise) the output will be 120.
This gives a delay of between 8 and 120 milliseconds.
the numbers '8' and '120' can be changed to give a different mapping.

Another idea (as used by the HiViz kits) is to have separate camera shutter and flash firing times. This give for a better repeatability. It is the flash that freezes the motion and there can be varying latency in the camera.

At the start of the first drop, also trigger the camera (which will be in bulb mode or a long shutter time)

The flash is connected to another output via an opto-isolator & transistor and this is triggered at the end of the camera delay time (which now becomes the flash delay time)

There are a number of project boxes (again on ebay) designed to hold the Arduino and also have the cut-out for the 2 line LCD. They are £1.32 Search for 'LCD1602 enclosure"

Right, I have rambled on for long enough for my camera batteries to have charged.
Look forward to seeing your progress updates.
 
Many thanks for your detailed post Bill.
I certainly don't mind anyone chiming in with suggestions, and yours will likely be very useful.(y)

Your advice on the 'map' command is very interesting, it's something that I will certainly be trying....thank you Bill!

You're right about the nozzle diameters....I should have been clearer as to the internal/external size, thanks for pointing it out.
I got lucky with mine, in that I was able to walk in to a plumbing supplies store and buy 1/8" ones (OD) off the shelf, but others may not be so fortunate, so thanks again for the advice on where to buy them from.

I'm also interested in trying the separate triggers for camera and flash too.
This sounds very interesting, and would certainly yield more control over the whole system....should be quite easy to implement, and thankfully I haven't yet completed the soldering yet....so it's not too late.
Although I may have to wait for now, since I don't have a hotshoe that I'm willing to butcher for the flash trigger!!
It's definitely worth looking into, thanks again Bill.

To update on where I am with this build however, I have had a number of soldering disasters so far!!
Two botched perf boards....my very old soldering iron had a badly corroded tip, lifted several copper pads and burned the board!! They're trashed!!
I have gone back to strip boards....and lots of lovely track cutting!!
I am due a delivery of some new stuff from BitsBox tomorrow, so all being well, I'll be back to soldering then.
Oh....and I have just bought a brand new soldering station from Machine Mart....

Here is the LINK

It has made the world of difference....I can now adjust the temperature of the tip so I no longer burn everything....things are looking up!

I'll post some images soon, of the successfully soldered circuits....and the not-so-successful ones too.

Thanks again for your input Bill.(y)
 
Last edited:
Thank you. I hope your project is going well too. Don't be too concerned about the soldering. What you did on the display looked absolutely fine. Making sure the pins / wires / strip board etc. are clean is the best advice I can give there I think.

Today, I soldered on the Nano to another piece of strip board mounted under the pots and have put on the TIP120, regulator, opto-isolator and diode. The next bit of work is to put in all the interconnections and program the Nano. I should be good to start testing at that point I hope :)

Good luck Lee, and thanks for the advice....I have a tin of contact cleaner somewhere, that should do the trick!
Mine is a little way off as yet (see above!), but I should be up and running again when my new stuff arrives from BITSBOX tomorrow!
 
Good luck Lee, and thanks for the advice....I have a tin of contact cleaner somewhere, that should do the trick!
Mine is a little way off as yet (see above!), but I should be up and running again when my new stuff arrives from BITSBOX tomorrow!
No problem - you're welcome. Fine wet & dry or emery paper is good too.
Coincidently, I am just about to order some final goodies from Bitsbox. I should hopefully get it finished this weekend :banana:

PS... if it helps, I use a flash hotshoe adapter so there is no butchery to do! Mine is similar to THIS one but please look into what flash it works with etc.
 
Last edited:
No problem - you're welcome. Fine wet & dry or emery paper is good too.
Coincidently, I am just about to order some final goodies from Bitsbox. I should hopefully get it finished this weekend :banana:

PS... if it helps, I use a flash hotshoe adapter so there is no butchery to do! Mine is similar to THIS one but please look into what flash it works with etc.

That's a great idea Lee, thanks for the link.
I have a couple of Yongnou YN560 IV manual flashes, they've been working well so far, but any way to improve control can only be a good thing.
I would think they would work with those hotshoe adaptors or similar, but yes indeed, I shall read up on them first.

Bitsbox are doing very well out of us lately, aren't they?!:LOL:
 
Hi,

The three/two digit thing...(sorry don't know how to quote)
The LCD does not delete characters, so if you print '12' and then 233" in the same place, all is well.
However if you then again print "12" the last digit, being the 3, remains.

This is actually quite useful, especially for large screens, as you can print the text that never changes only once and just print the stuff that does change. This way more speed can be gained in the program. It also stops having to keep clearing the LCD screen and re-writing, which can cause flicker and slow the program down. However if you want to do this, the code is:- clear();

There are two options. The first is to always print three blank spaces before printing your actual numbers, (assuming the biggest value will be three digits)
LCD setCursor(0,0); //position where number is to be written
LCD.print(" "); //print a dummy value of three blank spaces
LCD.setCursor(0); //position cursor where number is to be written
LCD.print(val); // print the real number

The second way, which is more elegant and makes the display far easier to read, is to format the numbers to always be three digits long, e.g 023 or 012
It is actually quite easy, needing just a few lines of code.

In the bit where you declare your variables, add this line

char buf[5]; //Declare a data type to store characters . Note square brackets

Now when you want to print something to the LCD, move that value into 'buf' and print 'buf' rather than your value.
In the example below, the variable 'time_on_1' which I want to print to the LCD is moved into buf and formatted to three characters, before printing.
It also works when printing to the serial monitor.

sprintf(buf, "%03d", time_on_1); // format to three characters
LCD.setCursor(4,0); //position cursor to column 4, row 0
LCD.print(buf); // print buf at 4,0
 
Last edited:
Great shots there Lee, can't wait to get mine built now....it's on hold for the moment however, but your photos have inspired me to get a move on!!
I'm using similar equipment - .177 cal with 6.9 gr pellets.
My trigger will activate the camera, like my drop controller, so I won't have to shoot stuff in the dark!!
As you say, sounds like fun, but I'm probably not as good a shot as you!:giggle:


Hi,

You will most likely find that the camera will not have enough time to sort itself out (lifting mirror etc) when shooting stuff with an air pistol, before the pellet hits the target. I have tried & the camera is always too slow. Canon 5D has approx. 75millisecond delay after shutter press, for example.

We used a torch to shine on the victim (apples, tomatoes etc) to allow the shooter to aim (resting on a sandbag to maintain aim in next step)
Then turned off the torch opened the shutter then fired.
The Multitrigger3 started timing on hearing the air pistol (keep mic close to air pistol)
After 50 miliseconds ish, the flash fires and death of the fruit is captured.

We found very accurate timing was required to capture the moment. You will probably need two delay pots if using an Arduino, one for a prescale adjustment and a second for fine adjustment.

Good work with the carpentry :eek:) fining decent looking project boxes is always a pain. My latest idea for front panels is to use something like InkSketch or Libre Draw. Print this out at a photo store onto photographic paper and laminate it. Avery do very thin sticky transparent film, which I have used before & works well.

I'm toying with the idea of building Multitrigger3 and Astrosplash, using an Arduino rather than 556 timers. Just for the exercise in programming.

Happy inventing
bye for now :eek:)
 
Hi,

The three/two digit thing...(sorry don't know how to quote)
The LCD does not delete characters, so if you print '12' and then 233" in the same place, all is well.
However if you then again print "12" the last digit, being the 3, remains.

This is actually quite useful, especially for large screens, as you can print the text that never changes only once and just print the stuff that does change. This way more speed can be gained in the program. It also stops having to keep clearing the LCD screen and re-writing, which can cause flicker and slow the program down. However if you want to do this, the code is:- clear();

There are two options. The first is to always print three blank spaces before printing your actual numbers, (assuming the biggest value will be three digits)
LCD setCursor(0,0); //position where number is to be written
LCD.print(" "); //print a dummy value of three blank spaces
LCD.setCursor(0); //position cursor where number is to be written
LCD.print(val); // print the real number

The second way, which is more elegant and makes the display far easier to read, is to format the numbers to always be three digits long, e.g 023 or 012
It is actually quite easy, needing just a few lines of code.

In the bit where you declare your variables, add this line

char buf[5]; //Declare a data type to store characters . Note square brackets

Now when you want to print something to the LCD, move that value into 'buf' and print 'buf' rather than your value.
In the example below, the variable 'time_on_1' which I want to print to the LCD is moved into buf and formatted to three characters, before printing.
It also works when printing to the serial monitor.

sprintf(buf, "%03d", time_on_1); // format to three characters
LCD.setCursor(4,0); //position cursor to column 4, row 0
LCD.print(buf); // print buf at 4,0

Thanks again for your input and advice Bill.

Your suggested fix for the three digit bug looks interesting, I will endeavour to give it a try, though I'm still (slowly) learning the Arduino code, and the way I fixed it seems to work for now.
I know it isn't the most elegant solution (I added a full 16 character line of spaces) but you're right....if I can use fewer lines of code, that can only be a good thing.

Hi,

You will most likely find that the camera will not have enough time to sort itself out (lifting mirror etc) when shooting stuff with an air pistol, before the pellet hits the target. I have tried & the camera is always too slow. Canon 5D has approx. 75millisecond delay after shutter press, for example.

We used a torch to shine on the victim (apples, tomatoes etc) to allow the shooter to aim (resting on a sandbag to maintain aim in next step)
Then turned off the torch opened the shutter then fired.
The Multitrigger3 started timing on hearing the air pistol (keep mic close to air pistol)
After 50 miliseconds ish, the flash fires and death of the fruit is captured.

We found very accurate timing was required to capture the moment. You will probably need two delay pots if using an Arduino, one for a prescale adjustment and a second for fine adjustment.

Good work with the carpentry :eek:) fining decent looking project boxes is always a pain. My latest idea for front panels is to use something like InkSketch or Libre Draw. Print this out at a photo store onto photographic paper and laminate it. Avery do very thin sticky transparent film, which I have used before & works well.

I'm toying with the idea of building Multitrigger3 and Astrosplash, using an Arduino rather than 556 timers. Just for the exercise in programming.

Happy inventing
bye for now :eek:)

Adding two pots for fine adjustments is a good idea....I'll look into that when I get round to building my sound trigger.

I plan to shoot at the max sync speed however (1/250th of a second) so that I can keep a light on whilst shooting....both the air gun and the camera.;)
I have found that this has worked very well with my water drop photography, and affords a little more convenience....1/250th is enough to eliminate the ambient light in the room, so aiming the gun should be fine, but there will very likely be plenty of frustrating trial and error situations!!
All part of the fun of inventing!:giggle:

Thanks again Bill for your insightful and positive feedback.(y)
 
Last edited:
Well it seems that being keen to get a project working is a good thing except when you're tired. One momentary lapse of concentration meant I mixed up the 5v and Vin connections on the veroboard. I switched it on and inadvertently fed 12 volts to the Nano and LCD. Needless to say, neither bit of kit enjoyed the experience. :(

Another Bitsbox order is going in...

On the plus side, the Elegoo Nano was part of a pack of three. A quick programming of a new one and a intensive check of my wiring later I plugged it all in. Even though I couldn't see what was going on due to the dead LCD, I could trigger the solenoid and vary the timings so, as a project, it seems to work (y)
 
@Leebert -oops :eek:( I have an asortment of LCDs coming from China ,16X2 20X4, with serial & without. If they arrive before your bitbox, you are more than welcome to borrow one.

@GarathB,

Experimentation, trial & error is a great way to learn (except in Lee's case) keep going :eek:)
However I think you will really struggle with your method of photographing things being shot. Water sploshes are far slower in comparison & so camera latency and loops in programs will not affect it so much. I have tried opening the camera shutter simultaneously with firing an air pistol & the pellet always beat the camera.

You will also probably need to slightly alter your code. Presently everything runs in a loop, this can add varying delays to the camera firing. I found the timing when shooting an air pistol was really critical, it took quite a while to get it spot on. I would leave the potentiometer & display update part running in a loop, but move the activation sequence to a subroutine. Use an interrupt (must be on pin 2 or 3) to call the activation sequence. This way, no matter where the code is in the loop, it will always jump straight to the activation sequence immediately.

Will post some piccys later, but right now dinner is ready....

bbfn.
 
Well it seems that being keen to get a project working is a good thing except when you're tired. One momentary lapse of concentration meant I mixed up the 5v and Vin connections on the veroboard. I switched it on and inadvertently fed 12 volts to the Nano and LCD. Needless to say, neither bit of kit enjoyed the experience. :(

Another Bitsbox order is going in...

On the plus side, the Elegoo Nano was part of a pack of three. A quick programming of a new one and a intensive check of my wiring later I plugged it all in. Even though I couldn't see what was going on due to the dead LCD, I could trigger the solenoid and vary the timings so, as a project, it seems to work (y)

Ouch!!:eek:
I feel your pain Lee! My new stripboards arrived yesterday, so I've started to re-solder everything again after having burnt all my perf boards!!:facepalm:
Shame you lost an Arduino and an LCD....it's only a few quid but it's the inconvenience....whenever I order stuff now, I order two or three!!

Glad you have yours working though....that's a small consolation at least.(y)

Onwards and upwards!


Good advice again Bill, thanks.
I've read about interrupts, and they look quite advanced for my tiny brains!
I've only recently begun learning about 'for' and 'while' loops!:giggle:
Before Christmas last year, I had not even heard of Arduinos....let alone knew how to program them! (My Arduino starter kit was indeed a Christmas present!):giggle:

I know I have a lot to learn, and it's fun finding out what will and won't work....providing I don't break anything....sorry Lee!!:LOL:

I have a fair way to go before I embark on the sound trigger, although I have a working prototype which isn't tested with a gun yet.
I had looked into how to achieve time increments of less than a millisecond, and what I found in most cases was the 'interrupt'.
It is a concern that I will have difficulty with accuracy and timings, so thanks once again Bill....I will definitely be (trying) to learn about interrupts soon.

I look forward to your images Bill, hope you have a nice dinner!
 
Last edited:
ballon.jpgHi,

A bit of code to play with. In this example, the number 12 is changed to three digits and printed as 012

int number;
char buf[5];
void setup() {
number = 12;
Serial.begin(9600);
sprintf(buf, "%03d", number);
}
void loop() {
Serial.println(buf);

}


Have also added a few air pistol Vs object photos



death of a tomato border reduced size.jpg
 
Cool photos there Bill (y)

Well, after my mishap, yet another Bitbox order arrived today and I completed my drop controller. As the light faded this afternoon, I was able to try it out just visually seeing how the drops were interacting as the flash lit it up. I needed to change a few bits of code as the flash was firing way too early and I also had those 'ghost' numbers on my LCD. For the flash timing, I changed the divide by 5 to a divide by 2 to get the required flash delay.

About an hour of experimentation later with plain water, I took the shot below. It's way off where I want to be but I am very happy with it as a start :banana:

Once again, thank you very much @GarethB for taking the time to write such an amazing tutorial which inspired me to have a go (y)

[url=https://flic.kr/p/RdRVc6]
Week 9 - Wet by Lee Francis, on Flickr[/URL]
 
Cool photos there Bill (y)

Well, after my mishap, yet another Bitbox order arrived today and I completed my drop controller. As the light faded this afternoon, I was able to try it out just visually seeing how the drops were interacting as the flash lit it up. I needed to change a few bits of code as the flash was firing way too early and I also had those 'ghost' numbers on my LCD. For the flash timing, I changed the divide by 5 to a divide by 2 to get the required flash delay.

About an hour of experimentation later with plain water, I took the shot below. It's way off where I want to be but I am very happy with it as a start :banana:

Once again, thank you very much @GarethB for taking the time to write such an amazing tutorial which inspired me to have a go (y)


Week 9 - Wet by Lee Francis, on Flickr


Amazing image Lee, certainly is a fantastic start.(y)
I remember my first collision image and how thrilled I was when I saw it.
Great work Lee!!

I've been having some fairly significant disasters lately....I too have 'let the smoke out' of one of my Nanos!!
I forgot to set my buck converter to output 7 volts for VIN on the Nano - it was set to full voltage with no drop - and I have blown a Nano too!:facepalm:
Luckily, as with you, I had bought the pack of three, so a quick reprogramming of a new one, and it's all go again.

I think my circuit works ok, but I can't seem to get my LCD to display anything at the moment....I think I must have wired it wrongly, though I can't see where - it powers up and the backlight is on, but all I'm getting is a row of blocks on the top row, and no digits displayed!
I've checked it with my breadboard prototype, and the screen works fine there, and also checked the contrast setting too.

Also my 'ghost' number issue has returned too (on the breadboard prototype)....I thought the capacitor fixed it for me, but evidently not.
When I get some time this weekend, I think I'll try Bills suggestions.
Of course I'll need to correct the wiring problems first, so that I can see the LCD values!!
(I'm considering the drastic step of soldering the whole circuit again - it's a messy nightmare at the moment, and is proving impossible to trace wiring problems. I know I've made many mistakes, and have learned from them, so second (third?) time round, I'll make a better job....I hope!)

Anyway, that's enough whinging from me, I'm so glad that your project is working well Lee.
Again, that's an incredible image, well done....I'm sure we'll see, and indeed look forward to seeing many more images from you.
Glad we could all muck in together here and discuss technical issues to get our projects running.(y)
 
Project updates.

It's been a while since I last updated the progress of my water drop controller project....I've been waiting for a meaningful moment to post something worthwhile.
My soldering woes were initially very frustrating, but ultimately I was able to achieve a complete circuit that works.
There were a number of mishaps however....as mentioned in an earlier post, I ruined a Nano board, so had to replace it.
Some other mistakes were easier but no less costly to rectify....although it only amounted to a tenner or so down the drain!

Before I started the soldering, I was unaware of how much difference a new soldering iron tip makes.
So after some disastrous first attempts which ultimately resulted in having to buy a couple of new strip boards, I purchased a new soldering iron, and from then on it went rather smoothly.

This is what happens to the copper pads when a badly corroded soldering iron tip is used!
The tip became far too unevenly hot and simply burned everything!

full


Those black marks are where the copper pads used to be - they have been completely destroyed, and thus rendering the whole board useless!
This happened twice before I realised what was going on (I thought it was my rubbish technique!), so a new soldering iron with adjustable temperature was purchased....and yet another new board too!

Here are some pics of the (nearly) finished controller.
All that is left to do is to prime it and paint it black....hopefully it should resemble a miniature 'Marshall' amp style look, and with some appropriate lettering, it will complete.

I have chosen to name it the 'Drop-O-Matic', which I have written a line of code in the sketch, so that it appears when switched on.
I have successfully created a new front panel mounting plate, which has some minor adjustments to the positions of the switches etc.

full


These next images show the finished board (though I forgot to take pics of the soldering....just imagine beautiful, neat soldered joints!:LOL: )
I wanted to have plugs and sockets for all the wired connectors, to enable easy removal of the front panel for maintenance purposes.
This meant soldering some headers onto the board and sourcing some compatible connector sockets from BITSBOX

- 12 way Crimp housing LINK HERE (I used different sizes depending on how many connections I needed)
- Crimp sockets LINK HERE (I bought 100 of these, since I knew I'd need spares due to knackering many of them through not having an appropriate crimp tool!)

These proved very fiddly, since I didn't have a crimp tool....I ended up using pliers to crush the crimp onto the wire, and then a tiny bit of solder to make it sturdy.
I probably needlessly over complicated things by doing this, but it did make troubleshooting the circuit problems easier with all the connectors removed.

The finished board without the connectors.

full


This is the back of the front panel, with all the connectors - these are sockets with the tiny crimp connectors which neatly mate with the header pins on the board.

full


This is the 12 way connector for the LCD screen....

full


....and the place it connects to on the board....

full


....contd....
 
Last edited:
....contd from above....

This is the above connector in place....note the hot glue (not very neatly) applied to it....I wanted the connections to be as strong as possible!

full


So, with all the connectors in place, it looks like this....it doesn't look terrifically tidy in there, but it does work!

full


And the board is slid into it's tracks inside the box....

full


I used a similar connection method for the outputs - for the camera and solenoid valve connectors.
I mentioned in an earlier post that I wanted these connections to be a different style, so as not to be able to connect them the wrong way round.

This image shows the back of the box....the red circle shows the two sockets - the left one is a phono connector for the solenoid valve, and the right one is a jack socket for the camera.

full


....and the two leads that I made for those connectors look like this....
(Jack plug on the left and phono on the right)

full


So, this brings me to the end of a nerve-wracking and somewhat costly chapter of the build!
All in all, I think it turned out well. I indeed have a working controller, which has been tested and does produce some nice images, which I will post very soon.
There will always be room for improvement however, and during testing I developed an alarming leak in the bottom of my Mariotte bottle....so that will need fixing!
 
Revised Arduino sketch....again.

I wish to thank Lee, Sérgio and Bill for their advice on the subject of the annoying problem of 'ghost' numbers on the LCD screen.
After noticing that the 'ghost' number problem still existed, I tried both the fixes that were suggested by Lee @Leebert (confirmed by Sérgio @Picareto ) and Bill @billbillbill
The combination of the two fixes has successfully corrected the issue completely.

More specifically, Lees suggestion of writing a line of spaces before each number and resetting the position of the cursor, and Bills suggestion of using the map command to more precisely control the position and values from the pots both worked a treat!

Here is the (final?) sketch:

C-like:
/*Water Drop Controller V7
 * Cleaned up LCD screen display by inserting spaces appropriately
 * Cleaned up pot control using the 'map' command
 * Added a name for the device - 'Drop-O-Matic'
 * By Gareth Bellamy
 *
*/

#include <LiquidCrystal.h>         //open LCD library
LiquidCrystal LCD(10,9,5,4,3,2);   //LCD to use pins 10, 9, 5, 4, 3, 2

const int solPIN = 7;              //assign pin 7 to solenoid
const int camPIN = 6;              //assign pin 6 to camera
const int potONE = A1;             //assign pin A1 to potentiometer 1
const int potTWO = A2;             //assign pin A2 to potentiometer 2
const int potTHREE = A3;           //assign pin A3 to potentiometer 3
const int potFOUR = A4;            //assign pin A4 to potentiometer 4
const int startBUTTON = 11;        //assign pin 11 to startBUTTON

int solDEL;                        //declare solDEL variable
int camDEL;                        //declare camDEL variable
int dropONE;                       //declare dropONE variable
int dropTWO;                       //declare dropTWO variable

int dropONEval;                    //declare dropONEval variable
int dropTWOval;                    //declare dropTWOval variable
int camDELval;                     //declare camDELval variable
int solDELval;                     //declare solDELval variable

int buttonSTATE=HIGH;              //set buttonSTATE variable to HIGH

void setup() {
 
  pinMode(solPIN, OUTPUT);          //set solPIN to output
  pinMode(camPIN, OUTPUT);          //set camPIN to output
  pinMode(potONE, INPUT);           //set potentiometer 1 as input
  pinMode(potTWO, INPUT);           //set potentiometer 2 as input
  pinMode(potTHREE, INPUT);         //set potentiometer 3 as input
  pinMode(potFOUR, INPUT);          //set potentiometer 4 as input
  pinMode(startBUTTON, INPUT);      //set startBUTTON as input
 
  LCD.begin(16,2);                  //start LCD with column/row parameters
  LCD.setCursor(0,0);               //set cursor position as 0,0 - top left
  LCD.print(" Drop-O-Matic ");      //print the name of the device - 'Drop-O-Matic'
  delay(2000);                      //hold the device name on screen for 2 seconds
  LCD.setCursor(0,0);               //reset the cursor position
  LCD.print("D1  D2   DD  CD ");    //print the line "Time Value "

}

void loop() {

  dropONE=analogRead(potONE);               //read analogue value from potentiometer 1
  dropONEval=map(dropONE,0,1023,10,100);    //use map to increase accuracy of pot
  LCD.setCursor(0,1);                       //set cursor position as bottom left
  LCD.print("   ");                         //print a line of 3 spaces to keep LCD clean
  LCD.setCursor(0,1);                       //reset cursor position
  LCD.print(dropONEval);                    //print the calculated time value dropONEval

  dropTWO=analogRead(potTWO);               //read analogue value from potentiometer 2
  dropTWOval=map(dropTWO,0,1023,10,100);    //use map to increase accuracy of pot   
  LCD.setCursor(4,1);                       //set cursor position as bottom line, 4 characters from left
  LCD.print("   ");                         //print a line of 3 spaces to keep LCD clean
  LCD.setCursor(4,1);                       //reset cursor position
  LCD.print(dropTWOval);                    //print the calculated time value dropTWOval

  solDEL=analogRead(potTHREE);              //read analogue value from potentiometer 3
  solDELval=map(solDEL,0,1023,20,200);      //use map to increase accuracy of pot                   
  LCD.setCursor(9,1);                       //set cursor position as bottom line, 9 characters from left
  LCD.print("   ");                         //print a line of 3 spaces to keep LCD clean
  LCD.setCursor(9,1);                       //reset cursor position
  LCD.print(solDELval);                     //print the calculated time value dropTHREEval

  camDEL=analogRead(potFOUR);               //read analogue value from potentiometer 4
  camDELval=map(camDEL,0,1023,20,200);      //use map to increase accuracy of pot                   
  LCD.setCursor(13,1);                      //set cursor position as bottom line, 13 characters from left
  LCD.print("   ");                         //print a line of 3 spaces to keep LCD clean
  LCD.setCursor(13,1);                       //reset cursor position
  LCD.print(camDELval);                     //print the calculated time value dropFOURval
 
  LCD.print("                ");            //print a blank line (16 spaces) to keep LCD clean

  buttonSTATE=digitalRead(startBUTTON);       //monitor state of start button
    if(buttonSTATE==LOW) {                    //wait for start button to be pressed
 
    digitalWrite(solPIN, HIGH);               //set solPIN to HIGH - open the solenoid for first drop
    delay(dropONEval);                        //delay for time value dropONEval - first drop size
    digitalWrite(solPIN, LOW);                //set solPIN to LOW - close the solenoid
 
    delay(solDELval);                         //delay for time value solDELval

    digitalWrite(solPIN, HIGH);               //set solPIN to HIGH - open solenoid for second drop
    delay(dropTWOval);                        //delay for time value dropTWOval - second drop size
    digitalWrite(solPIN, LOW);                //set solPIN to LOW - close the solenoid
 
    delay(camDELval);                         //delay for time value camDELval - delay between second drop and camera activation
 
    digitalWrite(camPIN, HIGH);               //set camPIN to HIGH - trigger camera shutter
    delay(100);                               //delay for 100 milliseconds to ensure clean signal
    digitalWrite(camPIN, LOW);                //set camPIN to LOW - reset shutter button

 
  }
  else{
    digitalWrite(camPIN, LOW);              //set camPIN to LOW - reset pins
    digitalWrite(solPIN, LOW);              //set solPIN to LOW - reset pins
  }
}

So thank you once again Lee @Leebert , Sérgio @Picareto , and Bill @billbillbill - my controller is working very nicely indeed and is easy to read and vary the values!

Stay tuned for some water drop images!!

:)
 
Water drop images.

Here is a selection of images I took a few days ago before my Mariotte bottle sprung a leak!
These were taken with the newly completed controller, and the revised code.

I was particularly pleased with the way the crowns separated from the column.
(A few minor tweaks, gentle cropping and some splash clean-up is all the processing that was done)


drop20
by Gareth Bellamy, on Flickr


drop19
by Gareth Bellamy, on Flickr


drop18
by Gareth Bellamy, on Flickr


drop17
by Gareth Bellamy, on Flickr


drop16
by Gareth Bellamy, on Flickr


drop15
by Gareth Bellamy, on Flickr


drop6
by Gareth Bellamy, on Flickr
 
Last edited:
Here's a few test images from the day before....this was the first test of the newly completed controller, so apologies for the not-so-great lighting!
Despite being tests, I think they turned out quite well.


drop4
by Gareth Bellamy, on Flickr


drop3
by Gareth Bellamy, on Flickr


drop2
by Gareth Bellamy, on Flickr


drop1
by Gareth Bellamy, on Flickr

I hope you like them, thanks for looking folks!:)
 
@GarethB I really quite like the last one (well I like them all), it looks like a mushroom (ink cap)

Thank you Dominic!(y)
Those test shots came out much better than I had thought. I don't think I quite nailed the focus however, but it was rather hastily set up.
I spent more time setting up the images posted earlier (above with the purple lighting) and so I think more of the collision crown is in focus on those.

I'm constantly amazed at how many shapes can be achieved....every one is different, I like to think of them as tiny 'water sculptures'....but maybe that sounds a bit pretentious!!!:LOL:
Nevertheless, it's a fascinating area of photography, and I'm looking forward to all the experimentation that lies ahead!
 
They are really quite stunning images Gareth. I love the lighting on them. I am going to have to pick up a sheet of plastic and try it. I have tended to go with a low key look for mine but having seen yours I have purchased a second Yongnuo 560 flash and have added a second opto-isolator and 3.5mm socket to my controller. I just need to get a couple of trigger leads and start experimenting :)

Very glad that I could help in a small way. It has been great fun to build and the journey has only just started. I wouldn't have happened at all for me if you hadn't started this tutorial so a very big thank you @GarethB (y) :clap:
 
Thank you Lee (@Leebert ) for the very kind words!
Indeed our journeys have just begun, I can't wait to see where we go from here!

I'm thinking of picking up another Yongnuo 560 flash too, they're pretty decent for the money.
I've just (hopefully) fixed the leaking issue I have on my Mariotte bottle....had to buy some 1/4" BSP flange nuts....virtually impossible, but managed to find some in Toolstation....why can't they just have everything metric?!:LOL:

Another thing I've been delving into is the response times of the solenoid valves.
I've been having trouble getting repeatable results....I can get a nice collision image perhaps one or two times in ten attempts, but I'm not sure why I can't get the same style of collision with every image taken.
The (expensive) commercial kits seem to be able to do this....on Corrie Whites site, she has a multiple exposure image of three consecutive, virtually identical collisions in a row.
There are two (or maybe more!) reasons for this as far as I can understand....the valve response times and perhaps the nozzle angle/design.
Or perhaps it's simply the limitations of the camera/flash delays...though I can't see how that would change much every time the start button is pressed.
The nozzle angle is an easy fix using a spirit level to get it dead plumb.
The response times of the valve is proving very complicated.
I'm not sure if it's the design of the AirTac valve....being that it's a cheap alternative to the Shako valve.
The datasheet says it has a response time of 50ms, whereas the Shako has a response time of 10ms.
Nevertheless, I'm not about to spend forty quid on a Shako, so I may have to put up with one or two in ten successes!

More research is needed I think, but I'm glad I've got my leak fixed.
:)
 
@GarethB Good work :eek:)

Have finished building my little digital readout for the Hiviz Multitrigger3 and Astrosplash. Wil post a piccy when plastic the LCD holder arrives from China & I can mount it onto the Hiviz.

Have also finished building my Binford 2000 Drip-o-Matic (anybody remember Tim-Tool-Time-Taylor?) It is just a MDF frame to hold bottle, drippers etc, that can be adjusted in all directions. I'm fed up with using light-stands and boom arms. Piccy to follow.

Waffling onto other things,
When making a sound or light activated trigger with Arduino, it never knows when the trigger will happen and could be doing time consuming things like updating the LCD or maths. The delay starting could be delayed or the trigger input missed completely.
I have bashed up some quick code using an interrupt to detect an input, which in turn starts the delay timer immediately.
Happy to post it here. Maybe we need to start a new thread for delay timers, as we have rather taken over Garath's fine building a dripper blog :eek:)

In the meantime, here is a link to a simple sound operated delay in case peeps want to mess about with it
The sound module used are 99p on ebay.
You could probably get away with adding an input pot for the user to add a delay, but if starting to get clever with LCDs, the time between triggering & delay starting would start to vary too much.

https://petapixel.com/2017/05/10/build-simple-sound-trigger-high-speed-photos-Arduino/

Bye for now :eek:)
 
Back
Top