Lab 7 - Servo Motor

 

ASSIGNMENT

Create a "crawler" using a servo motor and other materials connected to Arduino and controlled by a Potentiometer. 

MATERIALS USED

1 Servo Motor, 1 Potentiometer, 2 Ikea furniture roller wheels, 4 zip ties, 1 bamboo stick, 1 butterfly paper clip, ear plug foam, electrical tape

ARDUINO CODE

/* Kari McGlynn - TUI Lab Assignment
 * Adapted from portions of
 * Servo with Potentiometer control
 * Theory and Practice of Tangible User Interfaces
 * October 11 2007
 * and "Knob" by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 
 */
 
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 = 700;   // 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
  val = map(val, 0, 1023, 700, 1100);  // scale it to use it with the servo (value between 500 and 1600) 
  pulseWidth = val;  // convert angle to microseconds
  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
  }
}
 
 
crawler_pic.jpg
0
Your rating: None