Dog Crawl

Description
Crawling dog using a servo motor attached to a wooden stick to push it along. Hardest part was building something that attached the wood stick to the servo motor because any little tilt in the wooden stick resulted in the dog going around in circles and not in a straight line.
Materials
- Arduino Uno
- Servo Motor
- Wood
Video: http://www.youtube.com/watch?v=MrvD4HbyGdY
Code
/** Servo with Potentiometer control* Theory and Practice of Tangible User Interfaces* October 11 2007*/int servoPin = 7; // Control pin for servo motorint potPin = 0; // select the input pin for the potentiometerint pulseWidth = 0; // Amount to pulse the servolong lastPulse = 0; // the time in millisecs of the last pulseint refreshTime = 20; // the time in millisecs needed in between pulsesint val; // variable used to store data from potentiometerint counter = 0;int counter2 = 0;int changeValue = 0;int minPulse = 500; // minimum pulse widthvoid setup() {pinMode(servoPin, OUTPUT); // Set servo pin as an output pinpulseWidth = minPulse; // Set the motor position to the minimumSerial.begin(9600); // connect to the serial portSerial.println("servo_serial_better ready");}void loop() {val = analogRead(potPin); // read the value from the sensor, between 0 - 1024Serial.println(changeValue);if (counter % 50 == 0) {if (counter2 % 2 == 0) {changeValue = 2844;}else if (counter2 % 2 == 1) {changeValue = 1680;}counter2 += 1;}if (val > 0 && val <= 999 ) {pulseWidth = val*2 + minPulse; // convert angle to microsecondsSerial.print("moving servo to ");Serial.println(pulseWidth,DEC);}if (millis() - lastPulse >= refreshTime) {digitalWrite(servoPin, HIGH);delayMicroseconds(changeValue);digitalWrite(servoPin, LOW);lastPulse = millis();}Serial.println(counter);counter += 1;//updateServo(); // update servo position}// called every loop().void updateServo() {// pulse the servo again if the refresh time (20 ms) has passed:Serial.println(pulseWidth);if (millis() - lastPulse >= refreshTime) {digitalWrite(servoPin, HIGH); // Turn the motor ondelayMicroseconds(pulseWidth); // Length of the pulse sets the motor positiondigitalWrite(servoPin, LOW); // Turn the motor offlastPulse = millis(); // save the time of the last pulse}}
- Login to post comments
Drupal theme by Kiwi Themes.