Assignment: Servo Motor: Actuation Assignment 2
Collaborators:
Ljuba Miljkovic
The purpose of this lab was to create an interesting Servo Motor to control motion.
Ljuba and I created a cross-country skier to experiment with the ways in which a servo motor can be used to control motion. The arms of the cross country skier move automatically at a regular interval to propel the skier forward.
/*
* Cross Country Skiier - by Ljuba and Sarah
*/
boolean onSwitch = false;
int servoPinLeg1 = 6; // Control pin for servo motor leg 1
int servoPinLeg2 = 7; // Control pin for servo motor leg 2
int potPinLeg1 = 0; // select the input pin for pot controlling leg 1
int refreshTime = 20; // the time in millisecs needed in between pulses
int evenOdd = 0;
int minPulse = 500; // minimum pulse width
int counter = 0;
int potVal = 0;
int lastPulse = 0;
int minVal = 1280;
int maxVal = 1600;
void setup()
{
pinMode(servoPinLeg1, OUTPUT); // Set servo pin as an output pin
pinMode(servoPinLeg2, OUTPUT); // Set servo pin as an output pin
Serial.begin(9600); // connect to the serial port
Serial.println("servo_serial_better ready");
}
void loop()
{
potVal = analogRead(potPinLeg1);
onSwitch = potVal > 200;
if(onSwitch)
{
int timeElapsed = millis() - lastPulse;
if(evenOdd == 0)
{
for(int i=0; i < 30; i++)
{
digitalWrite(servoPinLeg1, HIGH); // Turn the motor on
delayMicroseconds(minVal); // Length of the pulse sets the motor position
digitalWrite(servoPinLeg1, LOW); // Turn the motor off
digitalWrite(servoPinLeg2, HIGH); // Turn the motor on
delayMicroseconds(minVal); // Length of the pulse sets the motor position
digitalWrite(servoPinLeg2, LOW); // Turn the motor off
evenOdd = 1;
Serial.print("LEG 1 (even): ");
Serial.println(minVal, DEC);
lastPulse = millis();
}
}
else
{
for(int i=0; i < 30; i++)
{
digitalWrite(servoPinLeg1, HIGH); // Turn the motor on
delayMicroseconds(maxVal); // Length of the pulse sets the motor position
digitalWrite(servoPinLeg1, LOW); // Turn the motor off
digitalWrite(servoPinLeg2, HIGH); // Turn the motor on
delayMicroseconds(maxVal); // Length of the pulse sets the motor position
digitalWrite(servoPinLeg2, LOW); // Turn the motor off
evenOdd = 0;
Serial.print("LEG 1 (odd): ");
Serial.println(maxVal);
lastPulse = millis();
}
}
}
}