441 water drops


Machine that adds drops of water onto a special textured surface. Each drop forms into an almost perfect sphere through the surface tension of the water and the omniphopic Material. The electronically controlled pipette wanders through a square grid of 21 x 21 drops to form a micro-matrix and returns to the beginning. After approximately 300 minutes, and when thewater drops have evaporated, the same process starts again.
http://pelang.ch/video/falling_objects_positioning_systems.mov

umm, wow - trying to think of some practical use but failing - cool though :smiley:

Use food coloring in water and draw dot-matrix style pictures. Or sphere-matrix in this case.

Very cool non the less.

Very impressive! Adding to what biocow said, if you put a light underneath it you could project an interesting picture onto the ceiling, although that would mean using something clear underneath the droplets, rather than the omniphopic material, so it might not work...

Onions.

Really nice !
Can you give us some details about the positioning system ?

Yeah I'd be interested in that too :slight_smile:

thanks,

well there is not much to say. Arduino control's the stepperdriver, step's and direction. Linearaxis are THK (secandhand). Little relay to trigger the dispenser.

the code is kind of mess... was last minut project..

/* 

Falling objects - positioning systems
is an machine that adds drops of water onto a special textured surface.
Each drop forms into an almost perfect sphere through the surface tension 
of the water and the omniphopic Material. 
The electronically controlled pipette wanders through a square grid of 21 x 21 drops 
to form a micro-matrix and returns to the beginning. 
After approximately 300 minutes, and when the water drops have evaporated, the same process starts again. 

http://pelang.ch/

*/



int dirpin1 = 11; //Stepper 1, Direction
int steppin1 = 12; //Stepper 1, Steps
int dirpin2 = 9; //Stepper 2, Direction
int steppin2 = 10; //Stepper 2, Steps
int enableX = 5; // Enable driver X
int enableY = 4; // Enable driver Y
int relay = 8; //Relay
int Xdrops = 20; //numbers of x drops
int Pause = 100; // Pause wenn Drops
int PauseDrop = 50; //whait befor drop
int limitX = 7; // limitswitch X achse
int limitY = 6; // limitswitch X achse
int switchstateX = 0;
int switchstateY = 0;
int Xsize = 300;  //distance from each drop
int Ysize = 3000; //distance from each drop


void setup() {
  
  pinMode(steppin1, OUTPUT);   
  pinMode(dirpin1, OUTPUT); 
  pinMode(steppin2, OUTPUT);   
  pinMode(dirpin2, OUTPUT); 
  pinMode(enableX, OUTPUT);
  pinMode(enableY, OUTPUT); 
  pinMode(relay, OUTPUT); 
  pinMode(limitX, INPUT);
  pinMode(limitY, INPUT); 

digitalWrite(enableX, HIGH); //Schaltet X Diver ON
digitalWrite(enableY, HIGH); //Schaltet X Diver ON

/* this is for limitng the xy at the very beginning */

// limiting X 

  int b; 
  
  digitalWrite(dirpin1, LOW); // Set X the direction.
  for (b = 0; b<10000; b++)                                                       
      {
        switchstateX = digitalRead(limitX);
        if (switchstateX == HIGH)
        {
        digitalWrite(steppin1, HIGH);  
        digitalWrite(steppin1, LOW);   
        delayMicroseconds(800);       
        }
        else
        {
        }
       }  
   digitalWrite(dirpin1, HIGH); // Set X the direction.    
   for (b = 0; b<7800; b++)                                                       
        {
        digitalWrite(steppin1, HIGH);  
        digitalWrite(steppin1, LOW);   
        delayMicroseconds(800);       
        }  
        
        
 // limiting Y 

  long g; 
  
  digitalWrite(dirpin2, HIGH); // Set X the direction.
  for (g = 0; g<100000; g++)                                                       
      {
        switchstateY = digitalRead(limitY);
        if (switchstateY == HIGH)
        {
        digitalWrite(steppin2, HIGH);  
        digitalWrite(steppin2, LOW);   
        delayMicroseconds(300);       
        }
        else
        {
        }
       }  
   digitalWrite(dirpin2, LOW); // Set X the direction.    
   for (g = 0; g<68000; g++)                                                       
        {
        digitalWrite(steppin2, HIGH);  
        digitalWrite(steppin2, LOW);   
        delayMicroseconds(300);       
        }         
        
}




void loop()
{
 int i;
 int k;
 int b;
 int m;
 long r;
 
digitalWrite(enableX, HIGH); //Schaltet X Diver ON
digitalWrite(enableY, HIGH); //Schaltet X Diver ON

{  
 for (m = 0; m<10; m++) // Make 5 Lines of 5 Drops 
  {
   digitalWrite(dirpin1, LOW); // Set X the direction.
   digitalWrite(dirpin2, HIGH); // Set Y the direction.
 
    { 
 // move Y 1 line 
     for (b = 0; b<Ysize; b++)                                                       
       {
        digitalWrite(steppin2, HIGH);  
        digitalWrite(steppin2, LOW);   
        delayMicroseconds(1200);             
       }     
// make drops 
      delay(PauseDrop); //whait befor drop
      digitalWrite(relay, HIGH);   // turn Relay on
      delay(Pause);              // wait for a second
      digitalWrite(relay, LOW);    // turn Relay off
      delay(Pause);              // wait for a second
     
      
 // move X 10 times forward       
     for (i = 0; i<Xdrops; i++) // Make N Drops forward X

     {  
       for (k = 0; k<Xsize; k++)  // Make 80 Steps = 1mm 
                                                        //  Moving X Axis 10 Steps CW
         {
          digitalWrite(steppin1, HIGH);                 
          digitalWrite(steppin1, LOW);    
          delayMicroseconds(1200);           
         }

 // make drops
         delay(PauseDrop); //whait befor drop
         digitalWrite(relay, HIGH);   // turn Relay on
         delay(Pause);              // wait for a second
         digitalWrite(relay, LOW);    // turn Relay off
         delay(Pause);              // wait for a second
       }
      }
      
// move Y 1 line   
     for (b = 0; b<Ysize; b++)                                                       
       {
        digitalWrite(steppin2, HIGH);  
        digitalWrite(steppin2, LOW);  
        delayMicroseconds(1200);           
        }

// make drop
       delay(PauseDrop); //whait befor drop
       digitalWrite(relay, HIGH);   // turn Relay on
       delay(Pause);              // wait for a second
       digitalWrite(relay, LOW);    // turn Relay off
       delay(Pause);              // wait for a second
    
       
// change direction of X   
      digitalWrite(dirpin1, HIGH); // Set the direction.


// move X 10 times backwards     
     { 
       for (i = 0; i<Xdrops; i++) 

        { 
         for (k = 0; k<Xsize; k++) // Make 80 Steps = 1mm 
  
           {
            digitalWrite(steppin1, HIGH);  
            digitalWrite(steppin1, LOW);   
            delayMicroseconds(1200);            
           }
// make drops
          delay(PauseDrop); //whait befor drop
          digitalWrite(relay, HIGH);   // turn Relay on
          delay(Pause);              // wait for a second
          digitalWrite(relay, LOW);    // turn Relay off
          delay(Pause);              // wait for a second
         }
      }     
    
  }
  
}




// last line last line last line last line last line

// move Y 1 line   
     for (b = 0; b<Ysize; b++)                                                       
       {
        digitalWrite(steppin2, HIGH);  
        digitalWrite(steppin2, LOW);  
        delayMicroseconds(1200);           
        }

// make drop 
       delay(PauseDrop); //whait befor drop
       digitalWrite(relay, HIGH);   // turn Relay on
       delay(Pause);              // wait for a second
       digitalWrite(relay, LOW);    // turn Relay off
       delay(Pause);              // wait for a second
    
       
// change direction of X   
      digitalWrite(dirpin1, LOW); // Set the direction.


// move X 10 times backwards     
     { 
       for (i = 0; i<Xdrops; i++) 

        { 
         for (k = 0; k<Xsize; k++) // Make 80 Steps = 1mm 
  
           {
            digitalWrite(steppin1, HIGH);  
            digitalWrite(steppin1, LOW);   
            delayMicroseconds(1200);            
           }
// make drops
          delay(PauseDrop); //whait befor drop
          digitalWrite(relay, HIGH);   // turn Relay on
          delay(Pause);              // wait for a second
          digitalWrite(relay, LOW);    // turn Relay off
          delay(Pause);              // wait for a second
         }
      }  



     
      
// Home xy
  digitalWrite(dirpin1, HIGH); // Set X the direction.
  digitalWrite(dirpin2, LOW); // Set Y the direction.  
 

  {
   for (r = 0; r<(Xsize * Xdrops); r++) // X go back to beginng
  
   {
    digitalWrite(steppin1, HIGH);   // For test with LED on
    digitalWrite(steppin1, LOW);    // For test with LED off
    delayMicroseconds(1200);              // wait for a second
    }
    
    for (r = 0; r<66000; r++) // Y go back to beginng
  
   {
    digitalWrite(steppin2, HIGH);   // For test with LED on
    digitalWrite(steppin2, LOW);    // For test with LED off
    delayMicroseconds(400);              // wait for a second
    }

  }

digitalWrite(enableX, LOW); //Schaltet X Diver OFF
digitalWrite(enableY, LOW); //Schaltet X Diver OFF

delay(5000); // verdunsten
  
}

Very cool non the less.

What happens if you freeze it ?

robtillaart:

Very cool non the less.

What happens if you freeze it ?

The water?

I just had a load of ideas run through my head about creating micro-ice spheres :wink:

Very cool - I love those little spheres. What instigated the project?

wildbill:
Very cool - I love those little spheres. What instigated the project?

it was for a group exhibition here in berlin with the titel: decay.

i actualy built a cnc router, during that i found it more fun to test the program routines with water drops

thanks all, also for the help (for my projects) i got here !

Looks like you're hitting he blogs.

Haha some of those comments :smiley:

I refuse to look up the definition because it will remove the much more entertaining mental image:

What exactly is an "Omniphobic Material"?

'Today we saw a demonstration of Freakoutium, the metal that our patented Panic-O-Meter operates on. The United States Department of Homeland Security has expressed interest.'

Omniphobic materials - presumably don't like anything - repel most things

Hydrophobic materials repel water so I presume it's hydrophobic as well as other things.
This means the water beads on the surface rather than spreading out (like a heavily waxed car roof)

focalist:
I refuse to look up the definition because it will remove the much more entertaining mental image:

What exactly is an "Omniphobic Material"?

'Today we saw a demonstration of Freakoutium, the metal that our patented Panic-O-Meter operates on. The United States Department of Homeland Security has expressed interest.'

Haha... I never thought of that. I've gotta take a moment to give you the lol for that: LOL! A Panic-O-Meter. xD

Had a lot of trouble trying to play the video... video would play in MPC-HC, but garbled audio. Why wasn't this just posted to YouTube like every other video on the 'net? =P Seems cool enough to be a popular video, but no good if nobody can watch it, haha... I re-encoded it to x264 using Handbrake and it plays now... any objections to posting it on YouTube for the world to see? It looks awesome!! So entertaining seeing it click away with each little sphere of water, never seen anything like it...

Well, the original Panic-O-Meter depended upon a biological sensor. It was analog and rather subjective. Perhaps you've heard of the "Sphincter Scale"?

That really is a cool device you made there. Sitting here thinking about how some parts might be adaptable to the poor-man's wall plotter I'm messing with...

what is volume of the drops?