For this first demo, I expected the general products to be very similar to the example shown in class. I felt that the real lack of structure and restrictions would cause people to stick very close to the example in order to make sure they were doing it “right”. I was very impressed to see that it actually caused people to soar and they chose very diverse topics.

My initial brainstorming got me thinking along the lines of staying similar to the example but trying to really expand off of the idea. My first thought was to have it similar in rocking but make it three dimensional, similar to playground rides that spin in a strange circle, almost along the path of a saddle.

Image result for playground spinning seat

 

Image result for playground spinning seat
The limitations of a single servo, although an interesting challenge, caused me to shift gears. The idea I actually started to draw up was similar to that of the example, in that a track would balance a ball, but the whole system would systematically crawl around the table. It would be much more stable of an idea but still provide an interesting movement similar to that of a crab.
 
As I started up a CAD drawing for this part, I started to go a little bit more out of the box, still creating a general concept of rolling but leaving it much more open ended, and subject to failure. I drew up CAD files for a full wheel, one that would be rocked by the inertial spin of inserting the servo into the center. Some mass would be attached to the servo arm and as it rotated off center inside the wheel, the wheel around it would rock. Conceptually, a rhythmic rock was my general direction, although I felt the complete freedom could add exciting unseen aspects to it.
 
 
I actually got really sick over the weekend and into the following week, and luckily Dr. Zeglin gave me an extension till the next class time. This actually gave me a chance to see the other creations of my classmates and actually give a little shift in my focus. Although my original intension was not to have it fall over, I did feel this added a certain element of excitement to this roller’s potential. Although I contemplated, extending the distance between the wheel’s faces to increase balance, I actually decided to leave it as is and create this constant possibility of failure.
 
The real fun came in changing the code. Slightly adjusting delays led to very different outcomes. Starting with a delay of 30 milliseconds led to a really jerky back and forth movement that led to some weird (pretty fun) rotations though ultimately the wheel fell over before too long. Trying on carpet compared to a very smooth surface led to more stability which was really interesting. Having a quick delay of about 3 milliseconds led to a quick jittery dynamic. It actually was fairly stable on smooth surfaces caused the wheel to actually pivot around a vertical axis. While pretty cool, the constant consistency actually didn’t feel as engaging. Hitting larger delays showed that the wheel would hit a sudden jerk and roll away which actually felt the most engaging. Many were unstable but around 600 milliseconds it actually had a very satisfying action. The servo turned the lever arm so slowly that the wheel, quite stably, would slowly rotate and then out of nowhere, the lever arm would reset, flinging the mass in the opposite direction, sending the wheel rolling away. This constant suspense as the wheel was creeping along before exploding in the opposite direction was quite exciting. What seemed to be the most engaging was when I allowed the wheel to have random delays and it was ultimately the final code I settled on. Listening to Dr. Zeglin’s notes from Monday really inspired me in realizing the entertainment of the constant threat of failure.
 

 

The final code, simple yet chaotic:

int servoPin = 9; // PWM
int angle = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(servoPin, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  analogWrite(servoPin, angle);
  angle = angle + 5;
  delay(2);


  analogWrite(servoPin, angle);
  angle = angle + random(15);
  delay(random(600));

}