Description
Crawler that resembles a bug of some kind. Spent a lot of time trying to perfect the movement, I experimented with different kinds of legs and feet, different wheels and different angles of the body. Certain setups performed better on hardwood floors than carpet and vice versa.
Components
- Arduino board
- Breadboard
- wiring
- potentiometer
- servo motor
- 2 metal rods (legs)
- empty tissue paper roll
- lots of tape
Arduino Code
/* * Servo with Potentiometer control * Theory and Practice of Tangible User Interfaces * October 11 2007 */int servoPin = 7; // Control pin for servo motorint potPin = 0; // select the input pin for the potentiometerint pulseWidth = 0; // Amount to pulse the servolong lastPulse = 0; // the time in millisecs of the last pulseint refreshTime = 20; // the time in millisecs needed in between pulsesint val; // variable used to store data from potentiometerint minPulse = 500; // minimum pulse widthvoid 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 rhe refresh time (20 ms) have 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 }}
Images
crawler
Video
http://people.ischool.berkeley.edu/~ethan/crawler.avi