# Assignment 10, Automaton, Josh Lopez-Binder

While playing around with legos I found that an odd sort of wave could be produced from a chain of links.  This chain has the property that each link is limited in rotation by its neighbor links due to little pegs.  I thought it would be neat to make a little machine that replicates this wave.  After considerable time messing around with various linkages and cranks, I found  that a combination of a crank and a four bar linkage + crank moved the first link in a way that would create the wave I desired. Naively, I thought that I could use this to run a much longer chain without modifications.

I copied the lego configuration into a CAD model and built a housing for the motor with the gearbox, the arduino, and a battery.  I lazer cut all of this out of 1/8 inch acrylic. My major mistake was assuming that the gearbox would produce a enough torque to easily drive the mechanism.  Of course this was a ridiculous assumption (and a lazy one), and the mechanism hardly works as a result.  It is much too fast and the motor seems to die after a few rotations.  I think I need to find a better motor/gearbox or use a stepper.

Recently, I realized that what I was trying to make was a soliton, a solitary wave that moves through a medium like a particle.  I also realized that my method of driving one link while the opposite end remains pinned is much too complex.  This method does not allow for a large number of links (this would require a larger linkage), which is what I had hoped for.  The more elegant method would be to pin both ends of the chain, at a distance that required a few of the links to splay out into the wave, and simple rotate each end alternately to pass the wave back and forth.  Oy!

```int motorPin = 9; int switchPin = 2; boolean runMotor = false; int clickTime = 10;   void setup(){ Serial.begin(9600); pinMode(motorPin, OUTPUT); pinMode(switchPin, INPUT); }   void loop(){ if(digitalRead(switchPin) == LOW){ runMotor = !runMotor; }   if(runMotor){ Serial.println("motor HIGH"); digitalWrite(motorPin, HIGH); } else{ Serial.println("motor LOW"); digitalWrite(motorPin, LOW);   } //delay(100);   }```