Walking Android Man :0
Lab:
For this week's lab, we explored the Servo Motors. A Servo Motor is more powerful than a DC motor and enables the user to have precision on the angular rotation they want to achieve. In the lab we learnt to control the rotation of the Servo motor using a pot.
Components Used:
- Arduino Micro-controller
- Wires
- Potentiometer
- Servo Motor
- Elastic Rubber Bands
- Wooden sticks
- Chip clips
- Cardboard Paper
Description:
As a homework assignment, we were supposed to use Servo Motor to make a simple mechanical Crawler which could move forwards. I used a single Servo Motor and connected it one chip clip which allows the servo motor to propel forward and it is connected to another chip clip on another side using a rod. This allows it to support its own weight as well as move more or less in a straight line.
Video :
Intial Crawler : Click Here
Android Walking : Click here
I also tried replicating the human walking motion, by using two servos and that worked a little worse than this one but nonetheless here is the video of that endeavor. ;) Enjoy!
Click here
As you can see I had waay too much with this thing.. :)
Design Considerations:
I realized that the length of the leg and at the angle they make between them makes quite a lot of different to the way the robot moves and how stable it is. Linking the two legs also worked better and allowed me to maneuver it more easily. Using clips with bent ends helped to provide friction and grip so that the robot could stand. I intially wanted to support the actual softtoy and make it walk, but it was too heavy to be supported on its legs :( .
Servo Code:
int servoPin = 7; // Control pin for servo motor int potPin = 0; // select the input pin for the potentiometer int pulseWidth = 0; // Amount to pulse the servo long lastPulse = 0; // the time in millisecs of the last pulse int refreshTime = 20; // the time in millisecs needed in between pulses int val; // variable used to store data from potentiometer int minPulse = 500; // minimum pulse width void setup() { pinMode(servoPin, OUTPUT); // Set servo pin as an output pin pulseWidth = minPulse; // Set the motor position to the minimum Serial.begin(9600); // connect to the serial port Serial.println("servo_serial_better ready"); } void loop() { val = analogRead(potPin); // read the value from the sensor, between 0 - 1024 if (val > 0 && val <= 999 ) { pulseWidth = val*2 + minPulse; // convert angle to microseconds Serial.print("moving servo to "); Serial.println(pulseWidth,DEC); } updateServo(); // update servo position } // called every loop(). void updateServo() { // pulse the servo again if the refresh time (20 ms) has passed: if (millis() - lastPulse >= refreshTime) { digitalWrite(servoPin, HIGH); // Turn the motor on delayMicroseconds(pulseWidth); // Length of the pulse sets the motor position digitalWrite(servoPin, LOW); // Turn the motor off lastPulse = millis(); // save the time of the last pulse } }
.
(3 votes)