Lab07: Crimson Crawler

Description:

I had so much fun assembling this crawler, thinking about the mechanics of a one-legged crawler, and how weight would need to be distributed to get it to move in a linear direction. While hardwood floor doesn’t allow for enough friction between it and the tips of the paperclips, the knit of my scarf produced similar (but slightly better) results. I discovered that my crawler crawls best on a surface with some teeth to it, such as the cover of one of my sketchbooks. Through experimentation I discovered that in order to get it to walk straighter, I needed to reprogram the arduino such that it didn’t have the servomotor have one single sweeping pattern.

Components Used:

  • 1 Arduino
  • 1 Servomotor
  • 1 Breadboard
  • 1 pot (but unused in the sketch below)
  • 1 large paperclip, 1 medium paperclip
  • 1 Futaba servomotor box
  • 1 X-factor nail polish bottle
  • electrical tape

Code:

/*
 * Servo Control Serial
 * modified for TUI October 2007
 * Servo Serial Better
 * -------------------
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com>
 * http://todbot.com/
 *
 * adapted from "http://itp.nyu.edu/physcomp/Labs/Servo"
 */
#include <Servo.h>

Servo myservo; // create servo object to control a servo
int servoPin = 7; // Control pin for servo motor

int pos = 0; // variable used to store data from serial port

int minPulse = 0; // minimum pulse width
int maxPulse = 100; // maximum pulse width

void setup() {
 pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
 pos = minPulse; // Set the motor position to the minimum
 Serial.begin(9600); // connect to the serial port
 Serial.println("Servo control program ready");
 myservo.attach(7); // attaches the servo on pin 9 to the servo object
}

void loop() {
 for (pos = minPulse; pos <= maxPulse; pos += 1) { // goes from 0 degrees to 180 degrees
 // in steps of 1 degree
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(7); // waits 7ms for the servo to reach the position
 }
 for (pos = maxPulse; pos >= minPulse; pos -= 1) { // goes from 180 degrees to 0 degrees
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(5); // waits 5ms for the servo to reach the position
 }
}

AND ALSO

/*
 * Servo Control Serial
 * modified for TUI October 2007
 * Servo Serial Better
 * -------------------
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com>
 * http://todbot.com/
 *
 * adapted from "http://itp.nyu.edu/physcomp/Labs/Servo"
 */
#include <Servo.h>

Servo myservo; // create servo object to control a servo
int servoPin = 7; // Control pin for servo motor

int pos = 0; // variable used to store data from serial port

int minPulse = 0; // minimum pulse width
int maxPulse = 115; // maximum pulse width
int correction = 55;
int count = 0;

void setup() {
 pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
 pos = minPulse; // Set the motor position to the minimum
 Serial.begin(9600); // connect to the serial port
 Serial.println("Servo control program ready");
 myservo.attach(7); // attaches the servo on pin 9 to the servo object
}

void loop() {
 for (count = 0; count <= 2; count +=1) {
 for (pos = correction; pos <= maxPulse; pos += 1) { // goes from 0 degrees to 180 degrees
 // in steps of 1 degree
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(7); // waits 7ms for the servo to reach the position
 }
 for (pos = maxPulse; pos >= correction; pos -= 1) { // goes from 180 degrees to 0 degrees
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(5); // waits 5ms for the servo to reach the position
 }
}
 for (count = 0; count <= 7; count +=1) {
 for (pos = minPulse; pos <= correction; pos += 1) { // goes from 0 degrees to 180 degrees
 // in steps of 1 degree
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(7); // waits 7ms for the servo to reach the position
 }
 for (pos = correction; pos >= minPulse; pos -= 1) { // goes from 180 degrees to 0 degrees
 myservo.write(pos); // tell servo to go to position in variable 'pos'
 delay(5); // waits 5ms for the servo to reach the position
 }
}

}



img_6347-mov img_6346-mov

Leave a Reply