Lab07 - Crawler

fanwaipio's picture

 

Description

Using a servo motor to make a crawler.

Components Used
2 Paper tube
1 Servo Motor
 

Source code

 

/*
 * Servo Motor Crawler
 * Fan Wai Pio 18 October 2011
 *
 *
 * Modified by
 * 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 potPin = 0;
 
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 valPulse = 2;
int inc = 1;
 
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 = analogRead(potPin);      // read the serial port
  pulseWidth = (valPulse * (maxPulse-minPulse) / 8) + minPulse;  // convert val to microseconds
 
  Serial.print("Moving servo to position ");
  Serial.println(pulseWidth,DEC);
    
  if( valPulse > 1 && valPulse < 3)
    valPulse += inc;
  else
  {
    inc*=-1;
    valPulse +=inc;
  }
    
  delay(val);
 
  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
  }
}
 
IMG_1870.jpg
0
Your rating: None