Making Furniture Interactive

December 19, 2007

Final Project

Filed under: Uncategorized — gregsaul @ 2:09 am

Here is the presentation for my final project;

I intend on updating it again, but this is what I could get done in a back alley of La Paz with one battery to burn .

Link

December 17, 2007

Laser Cut Paper Iris

An attempt was made at cutting out a mechanical iris on the laser cutter. It did not work so well and was later abandoned without making it motorized.

A separate mechanical device, a power window motor was modified through sheet metal work and welding. This was used to hang a tree upon and thereby spin it. This is seen in action in a short clip of the Robotic Branch Video below during Rossum’s recent Uncanny Valley robotic art show at the Brewhouse.

Paper IrisPaper Iris and HandPaper Iris OpenPaper Iris Failures

tree-spinner-mech.jpgtree-spinner-mech-closeup.jpg

Robotic Branch

Filed under: Derk Wolmuth,Final Project,Uncategorized — derkbw @ 10:15 pm

A kinetic hat rack was conceived in conjunction with research into a mood reading/recording hat. Several servos, a geared motor, and a Querk microprocessor contort a branch in various degrees. Mental strain of everyday existence is suggested by the vagaries of deformation.

Robotic Branch

Final Project

Filed under: Alastair Firth,Final Project — afirth @ 8:27 pm

Final Projectaafront-copy.jpgaaback.jpg

Description: The final product is an array of 256 LEDs which could be used to display a multitude of information. It is also able to control, in a limited way, an iPod or other audio device. The design uses a clock module, temperature sensor, LED controllers, and a stereo volume control to provide the time, temperature, and audio entertainment which the user desires. Through the iPod, it is also possible to use it as an alarm clock.
(more…)

Kipum Lee Final Project

Filed under: Final Project,Kipum Lee — Kip @ 6:23 pm

Abstract:I am interested in how products communicate back to us in subtle ways. An exercise machine is something people invest in but many times, ends up not being used. If it has not been activated within a certain “grace period,” the machine sends the user an email asking for interaction.

Materials:Arduino microprocessorMacbook (for power)simple switchbreadboard22 gauge solid wires1 150 ohm resistorrubberbands or fishwire (to wrap around the exercise machine)1 mechanical exercise machine1 busy/lazy person who wants to work out but is in need of a reminder

Please watch the video to see the process and explanation:

For the full downloadable video file (55.9 mb): www.kipworks.com/mfi/kipumlee_mfi_finalproject.mov

For the downloadable poster that was used during the final presentation (1.1 mb): www.kipworks.com/mfi/kipumlee_Poster.pdf

Learnings:It was good to prototype on my own and take things outside of the conceptual world. Although it was difficult learning these new programs and how things actually work, I learned the basics of how to put things together and test out an idea. I hope to continue working with physical computing and study the subject more to get more proficient with the materials and coding.
(more…)

Something More Fashionable

Filed under: Final Project,Jenn Gooch — jenngooch @ 6:21 pm

My goal for this project was to circuit bend a CD player to be controlled by a sensor/micro-contoller. I found the hardest thing about this was to “zero out” the CD’s built-in functions so that I had complete control over its starting and stopping. This involved coding in some measures to make sure it stopped before the CD was told to play, so that it wouldn’t pause instead. This took some time to fully figure out, and I think there is a lot of undiscovered potential for this system that I hope to implement in some upcoming pieces.

While I’m pleased to have achieved my main goal of the CD player circuit bend, I wish I had more time to develop the content (audio) to better utilize the technical developments.

int cd1stop = 2;
int cd1play = 3;
int cd1forward = 4;
int sensorPin = 0;
int val = 0; // variable to store the value coming from the sensor

void setup()
{
pinMode(cd1stop, OUTPUT);
pinMode(cd1play, OUTPUT);
pinMode(cd1forward, OUTPUT);
pinMode(sensorPin, INPUT); // }

void loop()
{
val = analogRead(sensorPin); // read the value from the sensor
delay(1000);
if (val < 850) // zero out CD player (automatically plays) and stop it {digitalWrite(cd1play, HIGH); delay(100); digitalWrite(cd1stop, LOW); delay(1000); digitalWrite(cd1stop, HIGH); delay(1000); } else // play {digitalWrite(cd1play, LOW); } }[/sourcecode]

[Dan D.W. Kang] Final Project- Interactive Coffee Table

Filed under: Dong Woo Kang,Final Project — dwkang @ 5:07 pm

dscn1305.jpgdscn1303.jpgdscn1300.jpgdscn1292.jpgdscn1287.jpgdscn1286.jpgdscn1285.jpgdscn1284.jpgdscn1280.jpgdscn1278.jpg

* Description

This interactive coffee table responds to the users and objects (coffee cups) by giving out different shades of light.

Two I/R sensors are attached on each side of the table to detect how many people there are. Two photocells are attached on the top of the table at both ends to detect how many coffee cups are being used. Depending on how many people or coffee cups there are, the table will respond differently with different shades and intensity of color. The table reaches its happiest state when the table is being fully utilized; two people sitting at the table, both of them drinking coffee. The table will entertain the users by flashing colorful lights and spinning.

* Code

int lightVal = 0;
int lightValB = 0;
int distanceVal = 0;
int distanceValB = 0;
int lightsensor = 0;
int lightsensorB = 2;
int distancesensor = 3;
int distancesensorB = 1;
int green = 11;
int red = 9;
int blue = 10;
int greenB = 3;
int redB = 5;
int motor = 7;
int value = 0;
int state = 1;
void setup() {
  pinMode(lightsensor, INPUT);
  pinMode(lightsensorB, INPUT);
  pinMode(distancesensor, INPUT);
  pinMode(distancesensorB, INPUT);
  pinMode(motor,OUTPUT);
  pinMode(red,OUTPUT);
  pinMode(green,OUTPUT);
  pinMode(blue,OUTPUT);
  pinMode(redB,OUTPUT);
  pinMode(greenB,OUTPUT);
  Serial.begin(9600); // Set up the serial communication.
}
void loop()
{
  lightVal = analogRead(lightsensor);
  lightValB = analogRead(lightsensorB);
  distanceVal = analogRead(distancesensor);
  distanceValB = analogRead(distancesensorB);
  Serial.println(“—–“);
  Serial.print(“lightvallue “);
  Serial.println(lightVal);
  Serial.print(“lightvalueB “);
  Serial.println(lightValB);
  Serial.print(“distancevalue “);
  Serial.println(distanceVal);
  Serial.print(“distancevalueB “);
  Serial.println(distanceValB);
 Serial.print(“state “);
 Serial.println(state);
 if (state == 0) {noPnoC ();}
 else if (state == 1) {noPoneC ();}
 else if (state == 2) {noPoneC_B ();}
 else if (state == 3) {noPtwoC ();}
 else if (state == 4) {onePnoC ();}
 else if (state == 5) {onePnoC_B ();}
 else if (state == 6) {onePoneC ();}
 else if (state == 7) {onePoneC_B ();}
 else if (state == 8) {onePtwoC ();}
 else if (state == 9) {onePtwoC_B ();}
 else if (state == 10) {twoPnoC ();}
 else if (state == 11) {twoPoneC ();}
 else if (state == 12) {twoPoneC_B ();}
 else if (state == 13) {twoPtwoC ();}
}
void noPnoC()    
{
  alloff();
  for(value = 0; value <=75; value+=5)   {analogWrite(red, value);   delay(100);}     for(value = 75; value >=0; value-=5)
  {analogWrite(red, value);
  delay(100);}
condition();
}   
void noPoneC()   
{
  alloff();
  for(value = 0; value <=50; value+=2)   {analogWrite(red, value);   delay(200);}     for(value = 50; value >=0; value-=2)
  {analogWrite(red, value);
  delay(200);}
 
condition();
}
void noPoneC_B()       
{
  alloff();
  for(value = 0; value <=50; value+=2)   {analogWrite(red, value);   delay(200);}     for(value = 50; value >=0; value-=2)
  {analogWrite(red, value);
  delay(200);}
 
 condition();
}
void noPtwoC()      
{
  alloff();
  for(value = 0; value <=50; value+=2)   {analogWrite(red, value);   delay(200);}     for(value = 50; value >=0; value-=2)
  {analogWrite(red, value);
  delay(200);}
 
 condition();
}
void onePnoC()
{
  alloff();
  for(value = 0 ; value <=180; value+=5)   {analogWrite(blue, value);   delay(30); }   for(value = 180 ; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
condition();
}
void onePnoC_B()
{
  alloff();
  for(value = 0 ; value <=180; value+=5)   {analogWrite(red, value);   delay(30); }   for(value = 180 ; value >=0; value-=5)
  {analogWrite(red, value);
  delay(30);}
 
condition();
}

void onePoneC()
{  alloff();
  for(value =0; value <=180; value+=5)   {analogWrite(blue, value);   delay(30);}   for(value = 0; value <=255; value+=10)   {analogWrite(greenB, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(greenB, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
condition();
}
void onePoneC_B()
{  alloff();
  for(value =0; value <=180; value+=5)   {analogWrite(red, value);   delay(30);}   for(value = 0; value <=255; value+=10)   {analogWrite(greenB, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(greenB, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(red, value);
  delay(30);}
 
condition();
}
void onePtwoC()
{  alloff();
  for(value =0; value <=180; value+=5)   {analogWrite(blue, value);   delay(30);}   for(value = 0; value <=255; value+=10)   {analogWrite(greenB, value);   delay(30);}     for(value = 0; value <=255; value+=10)   {analogWrite(green, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(greenB, value);
  delay(30);}
    
  for(value = 255; value >=0; value-=10)
  {analogWrite(green, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
 condition();
}
void onePtwoC_B()
{  alloff();
  for(value =0; value <=180; value+=5)   {analogWrite(red, value);   delay(30);}   for(value = 0; value <=255; value+=10)   {analogWrite(greenB, value);   delay(30);}     for(value = 0; value <=255; value+=10)   {analogWrite(green, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(greenB, value);
  delay(30);}
    
  for(value = 255; value >=0; value-=10)
  {analogWrite(green, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(red, value);
  delay(30);}
condition();
}

void twoPnoC()
{  alloff();
  for(value =0; value <=200; value+=5)   {analogWrite(blue, value);   delay(30);}     for(value =0; value <=200; value+=5)   {analogWrite(redB, value);   delay(30);}       for(value = 200; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
  for(value = 200; value >=0; value-=5)
  {analogWrite(redB, value);
  delay(30);}
 
condition();
}
void twoPoneC()
{  alloff();
  for(value = 0; value <=180; value+=5)   {analogWrite(blue, value);   delay(30);}     for(value =0; value <=180; value+=5)   {analogWrite(redB, value);   delay(30);}     for(value = 0; value <=255; value+=10)   {analogWrite(green, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(green, value);
  delay(30);}
   
  for(value = 180; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(redB, value);
  delay(30);}
 
condition();
}
void twoPoneC_B()
{  alloff();
  for(value = 0; value <=180; value+=5)   {analogWrite(blue, value);   delay(30);}     for(value =0; value <=180; value+=5)   {analogWrite(redB, value);   delay(30);}     for(value = 0; value <=255; value+=10)   {analogWrite(green, value);   delay(30);}     for(value = 255; value >=0; value-=10)
  {analogWrite(green, value);
  delay(30);}
   
  for(value = 180; value >=0; value-=5)
  {analogWrite(blue, value);
  delay(30);}
 
  for(value = 180; value >=0; value-=5)
  {analogWrite(redB, value);
  delay(30);}
 
condition();
}
void twoPtwoC()
{  alloff();
  digitalWrite(motor,HIGH);
  digitalWrite(red, HIGH);
  delay(50);
  digitalWrite(red,LOW);
  digitalWrite(red, HIGH);
  delay(50);
  digitalWrite(red,LOW);
  digitalWrite(green,HIGH);
  delay(50);
  digitalWrite(green,LOW);
  digitalWrite(blue,HIGH);
  delay(50);
  digitalWrite(blue,LOW);
  digitalWrite(greenB,HIGH);
  delay(50);
  digitalWrite(greenB,LOW); 
condition();
}

void alloff()
{
  digitalWrite(red,LOW);
  digitalWrite(green,LOW);
  digitalWrite(blue,LOW);
  digitalWrite(redB,LOW);
  digitalWrite(greenB,LOW);
  digitalWrite(motor,LOW);
}
void condition()
{
  if (distanceVal < 150 && lightVal > 80 && distanceValB < 150 && lightValB > 220) {state = 0;}
  if (distanceVal < 150 && lightVal < 80 && distanceValB < 150 && lightValB > 220) {state = 1;}
  if (distanceVal < 150 && lightVal > 80 && distanceValB < 150 && lightValB < 220) {state = 2;}   if (distanceVal < 150 && lightVal < 80 && distanceValB < 150 && lightValB < 220) {state = 3;}   if (distanceVal > 150 && lightVal > 80 && distanceValB < 150 && lightValB > 220) {state = 4;}
  if (distanceVal < 150 && lightVal > 80 && distanceValB > 150 && lightValB > 220) {state = 5;}
  if (distanceVal > 150 && lightVal < 80 && distanceValB < 150 && lightValB > 220) {state = 6;}
  if (distanceVal < 150 && lightVal > 80 && distanceValB > 150 && lightValB < 220) {state = 7;}   if (distanceVal > 150 && lightVal < 80 && distanceValB < 150 && lightValB < 220) {state = 8;}   if (distanceVal < 150 && lightVal < 80 && distanceValB > 150 && lightValB < 220) {state = 9;}   if (distanceVal > 150 && lightVal > 80 && distanceValB > 150 && lightValB > 220) {state = 10;}
  if (distanceVal > 150 && lightVal < 80 && distanceValB > 150 && lightValB > 220) {state = 11;}
  if (distanceVal > 150 && lightVal > 80 && distanceValB > 150 && lightValB < 220) {state = 12;}   if (distanceVal > 150 && lightVal < 80 && distanceValB > 150 && lightValB < 220) {state = 13;}   }[/sourcecode]

Final Project: Pinwheels

Filed under: Final Project,Joe Iloreta — jilore @ 4:38 pm

Abstract:

A kinetic object responds to movement both across its face as well as towards and away from it. Like a simple mechanical pet or a sunflower, it reacts to a body along a path, following one longingly as it passes; it may even show excitement when approached.

With this project I sought to build on skills learned over the semester, and elaborate on the four-state machine practiced earlier in the year, engaging the possibilities of passive, casual movement as interaction with an artifact.

Each pinwheel possesses two ultrasonic rangefinders in order to determine the presence of an object in its field of vision calculating distance of passing objects through each rangefinder, thus allowing it to calculate the angle at which the pinwheel pivots towards the movement.

Poster here

(more…)

Lampie

Filed under: Final Project,Jamin Hegeman — Jamin Hegeman @ 3:25 pm

The abstract, materials, video, process, and photos can be found on my blog.

Motor Fan

Filed under: Exercise 6: Motorized Mechanical Movement,Jamin Hegeman — Jamin Hegeman @ 3:18 pm

For this exercise I used a light sensor to control a DC motor, which rotated a circular paper with some dots on it. You also had to hold down a button to ensure the motor wouldn’t start running on its own in response to environmental light changes.

Next Page »

Create a free website or blog at WordPress.com.