A Low Cost Approach to Graphical Waterfall

Khalid:
Today i did wiring work from solenoid valves to microcontroller. ... lets see whats happen... I know the wiring is not organized so dont point ]:smiley:

Points at wiring
:o

This is first test of graphical waterfall consist 40 solenoid valves. All the things working fine but the graphics are hardly visible due to:
1- I have long tubing downstream the solenoids...If small metallic nozzles directly connected to the solenoid i would have got good results.
2- The Height of the solenoid. The solenoid are installed at about 8feet height, i think to see the graphical effect it must be 20 feet or above.

Any comments to improve will be highly appreciated:

Maybe some food coloring in the water would help the visuals better?

Lefty

Yes or ink and maybe a strong uv light as well. I want this project to work i might have a go myself i think it needs more hight as well, you might have to take it out side.

Awesome project!!! :smiley:
Yeah, some dark food color would definitely help and maybe some white sheet as background.

Can't wait to see more.

Thanks for all of your help and suggestions.. I am going to abandoned this project as i got poor results... But i hope someone will come here with clever ideas and make this whole thing work. Following is the last video of the show:

I can attach the the visualbasic files (Source Code) so that the software can be further improved to get realistic results. I am sorry the source code is not well commented and please don't ask me programming related questions:

I am attaching the Arduino Sketch for controlling the 40 solenoid valves. May be someone can improve the sketch and send me so that i can try on my hardware. Following is my email address:
engr.khalid.khattak@gmail.com

//Pin connected to ST_CP of 74HC595
int latchPin = 6;
//Pin connected to SH_CP of 74HC595
int clockPin = 13;
////Pin connected to DS of 74HC595
int dataPin = 11;
byte FirstByte;
byte SecondByte;
byte ThirdByte;
byte FourthByte;
byte FifthByte;
int val;
byte serialInArray[5]; // array for storing 5 bytes as they arrive from VB software
int serialCount = 0; // for counting the number of bytes received


void setup() {
  //Start Serial for debuging purposes	
  Serial.begin(9600);
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);

}

void loop() {
  
   if (Serial.available() > 0){
       serialInArray[serialCount] = Serial.read(); // read a byte sent by processing
        serialCount++;  // increment number of bytes received

    if (serialCount > 4 ) {  
	FirstByte = serialInArray[0]; 
	SecondByte = serialInArray[1]; 
        ThirdByte = serialInArray[2];
        FourthByte = serialInArray[3];
        FifthByte = serialInArray[4];
Serial.print(FirstByte);
Serial.print(SecondByte);
Serial.print(ThirdByte);
Serial.print(FourthByte);
Serial.print(FifthByte);
Serial.println("");

     digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, FirstByte); 
             shiftOut(dataPin, clockPin, SecondByte);
                 shiftOut(dataPin, clockPin, ThirdByte);
                 shiftOut(dataPin, clockPin, FourthByte);  
       shiftOut(dataPin, clockPin, FifthByte);
     
   
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
 serialCount = 0;
 delay(20);
   }
}
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first, 
  //on the rising edge of the clock,
  //clock idles low

//internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

 //clear everything out just in case to
 //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut�
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights. 
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result 
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000 
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {	
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin  
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}

Hi there! It is too bad that you abandoned this! I was about to suggest getting a BRIGHT backlight for the waterfall, possibly combined with food coloring as others suggested. This gives you a large amount of CONTRAST between the water and whatever is the 'background'... this is what makes an image great is the contrast.

Also once you get your light all setup, try testing it at night... wow that would be COOL!

I am interested in looking at your software code, although I need to brush up on my VB. The main reason I want to look at the SW code is I am doing a similar project using LED's. I want to make something similar to this:

http://www.poiplay.com/index.html

http://www.poiplay.com/vid_fnf2008_cam1_670.html

If you think about it the concept is nearly identical to yours except using LED instead of solenoids... in fact it's the same as your "Test" apparatus with LED... except mine will be miniaturized in order to fit in something more portable.

Thanks for your thread, it was very interesting/entertaining. I wish you luck with future endeavors!

Hello, I think you have done two mistakes, first you have not placed solenoids on the same level ! and the second is that you have redirected water from solenoids with long pipes, the plastic valves distort the image. remove the pipes after solenoids and place the solenoids on single line !

where i can get this awesome software ?

Very interesting project!

I'd agree with the assessment that the long thin hoses right at the outlet of the solenoid valves absolutely kill the whole idea. What you are trying to achieve with the hopefully very fast solenoid valves is essentially a pulse width modulated signal. The hoses work like a capacitor of sorts, filtering your nice clean signal edges.

Once you've done that it may still not work as you may need more height than a door to form a pattern.

Also a dark background and some back lighting ore better strong side lighting (perhaps recessed in the door frames) would make these water lines more visible.

a couple of LED's shining down would bring it to life! (white, green, blue namely)

I think that is one of the Most interesting things I have ever seen attempted. To get so very Close too..

Bob

I am partially done with a sort of similar project, though my solution was simpler (though at this point, it's the solution that is the problem....)

What I did was essentially a POV wand, a row of LED's.. The led's are 395nm UV LED's. The row of LED's is then faced at a flowing drip trough which I was channeling glow in dark paint through.. Just channels cut into the side of trough. Glow paint responds very intensely to UV, so what you have is a falling liquid light curtain, pulsing te LED's allows you to "print" via the falling glowing liquid. I had to shelve it as I have been busy and had run into the issue of the material itself being abrasive and prone to clogging. I was chatting with a wholesaler about various pigments they sell directly, but still haven't gotten back to the project. Money and time... The UV POV wand is standard stuff, shiftout and you are good to go.

I had made a phosphor screen with glow paint and window glass for a slow scan tv project that never happened.. The wand works very well on that.

Anyway, when I do return to the project, it's the abrasive nature of the glow particles, which also quickly settle out of most suspensions, which becomes the problem. I know you can buy glow in the dark cordage and cloth, so I may build a simple belt on a roller setup which would obviate the materials issues but also drop the coolness factor quite a lot.

stevethatsmyname:
Hi there! It is too bad that you abandoned this! I was about to suggest getting a BRIGHT backlight for the waterfall, possibly combined with food coloring as others suggested. This gives you a large amount of CONTRAST between the water and whatever is the 'background'... this is what makes an image great is the contrast.

Also once you get your light all setup, try testing it at night... wow that would be COOL!

Get some fluorescein and lots of UV LEDs: http://www.ebay.com/itm/310503714340

how can you efficiently color the water???

This time i am making proper hardware and hope it will be success. I just completed 16valves electronics controller for solenoids. These modules will be added as solenoid valve increases.

I just need help in above posted arduino code. I want to make a communication protocol so that no waste byte affect the overall design.
Lets say The computer program send
X Byte Z
First byte is "X" this means data coming. Get the BYTE and check "Z" this mean the data end.
Now see next Byte.....
next,,....
Anybody help?

Circuit can be used to very good advice.

Okay guys here is a brief update:
1- Handshake protocol is one of the difficult thing as the Picture converted into every type of EXTENDED CHARACTERS. So making protocol was a bit difficult task however the software is now working great:
Protocol is like:

XYZ%

= Start of byte
XYZ = three bytes i.e. 8x3= Solenoid valves
% = end of byte and send to shift register

We have all sort of ASCII characters incoming in serial port from VisualBasic to Arduino. We have to make a protocol so that we know that the bytes that are coming having START OF LINE > and END OF LINE% character as per protocol defined above. We have to precisely pick the two bytes between > and %. for example
Lets see a simple protocol:

XX%

Now there is a chance we get the data like:

%% or
%>%
or
a%%
or any combination.
but we have to pick the two middle values.. and we know its a serial data, some time computer through garbage values especially when the device is connecting or very fast data..and the data is coming like >>>%>aa%>we%%%%.......
However, the above job was done proffessionally Took lot of coffee and few nights..

2- Prepared the electronics and tested with the software and its performing brilliantly.
3- One of my friend sent me the waterfall pre-fabricated and now its in washroom for test purpose. it has 8 valves only will be very less resolution but i hope this time we will succeed.

20131122_202729.jpg

The waterfall has crude hardware setup. Tomorrow i will test it with my totally changed Arduino sketch and modified software.

Total success...Here is the video. Unfortunately, the mobile camera was laying horizontal throughout the video. This video has small clips in which i am manipulating and optimizing my software for better results. The first clip showing arrow fall. In the subsequent videos various testing to optimize setting.

https://www.dropbox.com/s/s00hajwkppfw37n/20131123_192521_MPEG_.mpg
Unfortunately 8 valves gives bad resolution. i sent the video to fountain guy and he was amazed to see the results. He started fabricating 40 valves waterfall. Moreover i told him to add strong LED lighting just at each valve so that visibility come clear.
Few improvements he will do , i am sharing so that anybody interested can get it right for the first time.
1- Waterfall must have atleast 24 solenoid valves
2- Waterfall height must be 8ft or bigger
3- LED lights on each valve will make the falling water visible and beautify the look of falls.
4- Add black curtain behind.
5- I am doing no more testing as my software and hardware prooved themselves. I am going to empty my