Very shy itsy bitsy crawler

Submitted by kmpark on Wed, 03/20/2013 - 01:09


I was trying to mimic a crawling of a insect(an itsy bitsy in my son's baby language). I could mimic only the shape of it, not the actual mechanism.

After series of trial and errors (+ tiresome from my hand controlling the pot) I designed this itsy bitsy with two pushing legs and two guiding legs. I built four legs HAND-made from wire paper clip, and I added eraser pieces for the feet of pushing legs. I put some putty thing on top of the motor to fix the clip wires.

The result varied a lot from the pot control + wear and tear of the eraser feet. It was fun but I found the itsy bitsy way way too shy to show its crawling. (or, I should say, its performance was always better when it was not recorded..)



1 - Arduino Uno

1 - Breadboard

1 - pot

1 - Servo Motor

many - wires

4 - paper clips

a piece of  wire cable and rubber band

eraser piece

craft putty



(I used the code from the class)


 * 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 = 10;    // 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 ");
  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
Your rating: None
Drupal theme by Kiwi Themes.