Description:
A few choices that I made:
– I used a bundle of knives to counterbalance the weight of the fork and the motor. At first I was worried that they would make it too heavy altogether, but it ended up being okay.
– I used tape to fix the joints of the frame thingy (which was just a novelty item that my roommate brought home from his IBM museum visit).
– I chose a fork as an arm, first because I thought that the pointier side of the fork would stick in the carpet and effectively move it, while the other side (with the tine points facing up) would slide along the floor. Instead, when the tines were facing down, they kind of skipped along the floor and didn’t effective move the crawler, so it ended up crawling in the other direction.
I left the code unchanged from the example, and just used the pot to manually control it.
Components Used:
- 1 Arduino
- 1 Servomotor
- 1 Breadboard
- 1 pot
- 2 pipe cleaners (to lash the fork to the motor)
- lots of masking tape
- 4 knives
- 1 fork
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" */ int servoPin = 7; // Control pin for servo motor 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 serial port int minPulse = 500; // minimum pulse width int maxPulse = 2250; // maximum 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 control program ready"); } void loop() { val = Serial.read(); // read the serial port if (val >= '1' && val <= '9' ) { val = val - '0'; // convert val from character variable to number variable val = val - 1; // make val go from 0-8 pulseWidth = (val * (maxPulse-minPulse) / 8) + minPulse; // convert val to microseconds Serial.print("Moving servo to position "); Serial.println(pulseWidth,DEC); } updateServo(); // update servo position } // called every loop(). // uses global variables servoPi, pulsewidth, lastPulse, & refreshTime 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 } }
VIDEO: lab07