Here’s a demo of my execution of “Rocking and Rolling”:
Brainstorming and Initial Ideas
Initially, I wanted to create rocking motion that could move a ball bearing from a higher level to a lower level back to a higher level and so on. To clarify, here’s a diagram:

I soon realized that producing such a product was not feasible given how much I had to do this project. So, I came up with the idea to use the rocking motion to move the ball bearing over little “hills,” as shown below:

Final Result
I ended up using two semicircles of radius 4.5 inches as my rocking body and 4 short, 1-2 inches long pieces of wood for my “hills.” I also attached a curved arm to the servo arm to add more of a push to the rocking motion. I added paper towel to the shared bottom of the two hills to increase friction so the ball bearing would be able to come to a stop in that area.

Overall, I’m happy with how my project turned out. However, I found it very hard to make the ball bearing consistently stop at the shared bottom of the two hills. If I were to take a go at this project again, I’d probably spend more time looking into how to get the ball bearing to consistently stay put at the bottom of the hills.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <Servo.h> Servo ser; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 95; // variable to store the servo position void setup() { Serial.begin(9600); ser.attach(9); // attaches the servo on pin 9 to the servo object ser.write(pos); } void loop() { for(pos = 95; pos <= 180; pos += 2){ ser.write(pos); delay(50); } delay(500); for(pos = 180; pos >= 95; pos -= 12){ ser.write(pos); delay(50); } delay(2000); for(pos = 95; pos <= 180; pos += 2){ ser.write(pos); delay(50); } delay(2000); for(pos = 180; pos >= 95; pos -= 2){ ser.write(pos); delay(50); } delay(2000); for(pos = 95; pos >= 50; pos -= 2){ ser.write(pos); delay(50); } delay(2000); for(pos = 50; pos <= 95; pos += 2){ ser.write(pos); delay(50); } } |
Leave a Reply
You must be logged in to post a comment.