# Theory and Practice of Tangible User Interfaces

### Announcements

November 24, 2007
Reading for November 27th, are now posted. Enjoy!

October 2, 2007
To upload your thoughtless acts, create a new assignment page like any other lab. You'll see "Thoughtless Acts" listed as one of the assignment options.

May 24, 2008
This site has been archived and is no longer editable. Stay tuned for the next version, coming in the fall!

# Lab 7

Project Members:
Ethan DeYoung

## Description

Crawler that resembles a bug of some kind. Spent a lot of time trying to perfect the movement, I experimented with different kinds of legs and feet, different wheels and different angles of the body. Certain setups performed better on hardwood floors than carpet and vice versa.

## Components

• Arduino board
• wiring
• potentiometer
• servo motor
• 2 metal rods (legs)
• empty tissue paper roll
• lots of tape

## Arduino 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 minPulse = 500;   // minimum pulse widthvoid 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 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  }}`

## Images

crawler

Video

http://people.ischool.berkeley.edu/~ethan/crawler.avi