Project Members: 
Andrew McDiarmid
Jess Kline
Arduino Code
/*
* Servo with Potentiometer control
* Theory and Practice of Tangible User Interfaces
* October 11 2007
*
* Code copied and doubled for use with two servos
* by Andrew McDiarmid and Jess Kline
* October 17 2007
*/
int servoPin = 7; // Control pin for servo motor
int potPin = 0; // select the input pin for the potentiometer
int secondPotPin = 1;
int secondServoPin = 8;
int pulseWidth = 0; // Amount to pulse the servo
int secondPulseWidth = 0;
long lastPulse = 0; // the time in millisecs of the last pulse
long secondLastPulse = 0;
int refreshTime = 20; // the time in millisecs needed in between pulses
int val; // variable used to store data from potentiometer
int secondVal;
int minPulse = 500; // minimum pulse width
void setup() {
pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
pinMode(secondServoPin, OUTPUT);
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
secondVal = analogRead(secondPotPin);
if (val > 0 && val <= 999 ) {
pulseWidth = val*2 + minPulse; // convert angle to microseconds
Serial.print("moving servo to");
Serial.println(secondPulseWidth,DEC);
}
if (secondVal > 0 && secondVal <= 999) {
secondPulseWidth = secondVal * 2 + minPulse;
Serial.print("moving second servo to ");
Serial.println(secondPulseWidth,DEC);
}
updateServo(); // update servo position
secondUpdateServo();
}
// 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
}
}
void secondUpdateServo() {
// pulse the servo again if rhe refresh time (20 ms) have passed:
if (millis() - secondLastPulse >= refreshTime) {
digitalWrite(secondServoPin, HIGH); // Turn the motor on
delayMicroseconds(secondPulseWidth); // Length of the pulse sets the motor position
digitalWrite(secondServoPin, LOW); // Turn the motor off
secondLastPulse = millis(); // save the time of the last pulse
}
}
Photos
Flickr links coming courtesy of k7...