Mr. Crawls - the jumping rectangular spider

Submitted by MarieSpliid on Mon, 03/18/2013 - 19:00
MarieSpliid's picture

Description

In this assignment I have built Mr. Crawls - a rectangular spider who is able to jump forward to catch his prey!

Challenges

I struggled for a while trying to build a crawler that had the servo motor propeller facing downward (featured in the video..). I did not mange to make it work and instead turned to this very different solution. I guess the reason why my first try failed was a combination of bad materials (they make the whole structure very wriggly) and the fact that there was too much friction with wood and rubber against the carpet.

Components

  • Arduino Uno
  • Breadboard
  • Portentiometer
  • Servomotor
  • Cardboard box
  • Paper
  • Wooden stick
  • Glue
  • LED bike light
  • Pipe cleaner
  • Metal paperclip
  • Endless amounts of electrical tape

 


Code


 

/*
 * Servo with Potentiometer control
 * Theory and Practice of Tangible User Interfaces
 * October 11 2007
 */
 
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 = 500;   // 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
  
  if (val > 0 && val <= 999 ) {
    pulseWidth = val*2 + minPulse;  // convert angle to microseconds
    
    Serial.print("moving servo to ");
    Serial.println(pulseWidth,DEC);
  
  }
  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
  }
}
 
 
 
MrCrawls1.jpg
MrCrawls2.jpg
4
Your rating: None Average: 4 (1 vote)
Drupal theme by Kiwi Themes.