Making Furniture Interactive

December 17, 2007

Final Project: Suono Sonic Bookshelf

Filed under: Beste Nazilli,Final Project,Imran Sobh — imranixd @ 4:26 am

Project write-up can be found here.

October 30, 2007

sonic bookshelf

Filed under: Beste Nazilli,Final Project,Imran Sobh,Proposals — botto @ 8:06 am

presentation

inspirational projects//

Secuenciador tangible 2

Walkotron

Scrapple

October 17, 2007

Filed under: Beste Nazilli,Exercise 5: Mechanical Movement — botto @ 2:49 pm

g11.jpgp2.jpg
p11.jpg
whole.jpg

Basicly, I tried to do a carousel. there are two basic motions that I tried to implement, one of them was ” two gears which directed with a handle , while one of the gears make a motion as a wheel, it turns the other one as if it is a turntable. This part was for the carousel basement.

And the other one was basicly a motor piston , I did for to catch the motion for horses on carousel.

I used mixed materials, balsa wood and foamcore. I think they do not work together well and it is really hard to control foamcore board in a dynamic model.

For next phase, I think I will try to go with plywood for kinetic side and for arduino I will use a dc motor works in corporation with photoresistors.

October 4, 2007

spika.4 moods

Filed under: Beste Nazilli,Exercise 4: Four State Machines — botto @ 11:15 pm

So as you can see from the video that Spika my dog 🙂 have 4 states.

There is a photocell to sense the shadow as you come closer, all the modes are using the same sensor , as output I used a servo motor and LEDs. I want to remind that I burned a servo motor during the preparation. But I think it was b/c of the code.As it is fixed, I guess it works fine. It is not still in the way that I want to ( as physical apperacne) but it works well.

1st mode :Asleep //does nothing( waits for intearction let’s say:))
2nd mode:Awake –>just came a liitle bit close// makes small shakes by his head and LEDs on the body starts to blink
3rd mode:Friendly –> as enough as a friend closeness// start to shake his head remarkably ( 90 degrees)
4rd mode:Angry –> you are too closeee // starts to shake his head more randomly ( aggresively) compare to the friendly mode and starts to make a buzz alarm noise.

So in every mode , it is possible for Spika to go to any of the modes, as long as the photosensor have the values that set up for the values.

here is the code:

int timer = 255;                   // The higher the number, the slower the timing.
int pins[] = {
13, 12, 8, 7, 4, 2 };       // an array of pin numbers
int num_pins = 6;                  // the number of pins (i.e. the length of the array)
int value = 0;
int angrycounter = 0;
int happycounter = 0;
int sleepcounter = 0;
int lightReading;

int servoPin = 9;            // R/C  Servo connected to digital pin
int switchPin = 10;            //  digital input pin for a switch
int buzzerPin = 11;
int myAngle;                 // angle of the servo (roughly in degrees) 0-180
int pulseWidth;              // function variable
boolean switchState = false;    // the state of the switch

int closed = 0;
int opening = 1;
int open = 2;
int closing = 3;

int mouthState = closed;

int asleep = 0;
int awake = 1;
int friendly = 2;
int angry = 3;

int spikaState = asleep;

//ldr stuff
int LDRpin = 0;
int startLDRreading;
//piezo stuff
int speakerOut = 11;
byte names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};
//int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 300};
byte melody[] = "4C4C4C4C4C8p8p4C4C4C4C4C";
// count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//                                10                  20                  30
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 12;
int statePin = LOW;

void servoPulse(int servoPin, int myAngle) {
pulseWidth = (myAngle * 11) + 500;  // converts angle to microseconds
digitalWrite(servoPin, HIGH);       // set servo high
delayMicroseconds(pulseWidth);      // wait a very small amount
digitalWrite(servoPin, LOW);        // set servo low
delay(20);                          // refresh cycle of typical servos (20 ms)
}

void buzzer() {
analogWrite(speakerOut, 0);
for (count = 0; count < MAX_COUNT; count++) {
statePin = !statePin;
for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
for (count2=0;count2<8;count2++) {
if (names[count2] == melody[count*2 + 1]) {
analogWrite(speakerOut,200);
delayMicroseconds(tones[count2]);
analogWrite(speakerOut, 0);
delayMicroseconds(tones[count2]);
}
if (melody[count*2 + 1] == 'p') {
// make a pause of a certain size
analogWrite(speakerOut, 0);
delayMicroseconds(500);
}
}
}
}
}

void LEDs()
{
int i;

for (i = 0; i < num_pins; i++) {

for(value = 0 ; value = num_pins; i++) {
for(value = 255; value >=0; value-=5)   // fade out (from max to min)
{
analogWrite(pins[i], value);
delay(10);
}
}
}

void setup()
{
int i;

for (i = 0; i < num_pins; i++)   // the array elements are numbered from 0 to num_pins - 1
pinMode(pins[i], OUTPUT);      // set each pin as an output
pinMode(servoPin, OUTPUT);          // set servoPin pin as output
pinMode(switchPin, INPUT);         // set the switch pin to be an input
Serial.begin(9600);

//take the average of 10 readings and store as our LDR start val used for calibration
for(int i =0 ; i 50){
spikaState = awake;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}
}

//awake

if (spikaState == awake){
Serial.println("spika awake");
servoPulse(servoPin, random(10,30));
LEDs();
lightReading = analogRead(LDRpin) - startLDRreading ;
if(lightReading>150){
angrycounter++;
//sleepcounter--;
//happycounter--;
} else if(lightReading>60){
happycounter++;
// angrycounter--;
//sleepcounter--;
} else if(lightReading>50){
spikaState = friendly;
} else if(lightReading60 && lightReading 200){
angrycounter++;
}
*/

if (happycounter >5){
spikaState = friendly;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}

if (angrycounter >5){
spikaState = angry;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}

if (sleepcounter >5){
spikaState = asleep;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}
}

// friendly

if (spikaState == friendly){
Serial.println("spika friendly");

for (myAngle=0; myAngle150){
angrycounter++;
//sleepcounter--;
//happycounter--;
} else if(lightReading>60){
happycounter++;
//angrycounter--;
//sleepcounter--;
} else if(lightReading200){
angrycounter++;
} else if(lightReading>60){
happycounter++;
}

if (lightReading>100){
angrycounter++;
}
*/

if (angrycounter >10){
spikaState = angry;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}
if (sleepcounter >10){
spikaState = awake;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}

}

//angry

if (spikaState == angry){
lightReading = analogRead(LDRpin) - startLDRreading ;
Serial.println("spika angry");
if(lightReading<150){
sleepcounter++;
//happycounter--;
//angrycounter--;
}
for (myAngle=0; myAngle5){
spikaState = friendly;
angrycounter=0;
sleepcounter=0;
happycounter=0;
}
}
}

Colour Responsive Chairs – Moritz Waldemeyer

Filed under: Beste Nazilli,Exercise 1: What Is? — botto @ 9:41 pm

waldemeyer.jpg

By Royal Appointment is a set of responsive chairs by Moritz Waldemeyer. As a person sits in the chair, an RGB colour sensor in the back reads the colour of their clothing. The colour LEDs on the back of the chair then gradually fade into the colour of the sitter. “This gives the individual sitting on it their own halo of light, or personal aura, evoking images of religious icons and kings”

waldemeyer2.jpg

September 12, 2007

beste.example2

Filed under: Beste Nazilli,Exercise 2: Add a Switch — botto @ 1:34 am

Part 1. I used a photocell which tracks down the light level. The lamp responds to this photocell as changing the color of the lamp. I used the analog input code, and then modified to make the light look like jump from one ball to the other.

board
standby

respond

Part 2.

It is not an inventory switch. I just tried to make 2 balls behave like as one button. When the pins on the balls touch each other, the current is actually connected to the board. I tried to make this lamp as a morse code lamp though , but couldn’t get there. I guess for some of you it is a small step but for me it is a big one 🙂

in


disconected

connected

September 4, 2007

pingponglamp.beste.A0

Filed under: Beste Nazilli,Exercise 0: Make A Lamp — botto @ 11:42 pm

I started with the default fading code, and modified it to make 3 consequent fading LEDs.

Steps:

Step 1 |

Step 1| At first, without any lamp ideas, I just wanted to make a working code for 3 fading lamp. So I just put the LEDs on the breadboard. It took me a while to figure out that some PWMs are enough for fading sequence. But still green LED is giving out a poor light but I think it is because of lamp itself.

Step 2 |

2 | After the code worked as I wanted, I started to think how will I make it look like a lamp. I took out the LEDs from board and bent wires and pins going into the LED to make them attach to each other.

Step 3 |

3 | I cut 3 ping pong balls and gathered to each other vertically.

Step 4 |

4 | So I put each LED set to one of the bulbs and tried to make them light up consequently.Because of the LEDs light power difference, some of them become dominant to others.

———————————

I really had fun to play around with the LEDs !

And here is the code:

int timer = 255; // The higher the number, the slower the timing.
int pins[] = {
3, 5, 6 }; // an array of pin numbers
int num_pins = 3; // the number of pins (i.e. the length of the array)
int value = 0;

void setup()
{
int i;

for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins – 1
pinMode(pins[i], OUTPUT); // set each pin as an output
}

void loop()
{
int i;

for (i = 0; i < num_pins; i++) {

for(value = 0 ; value <= 255; value+=5) // fade in (from min to max)
{
analogWrite(pins[i], value); // sets the value (range from 0 to 255)
delay(30); // waits for 30 milli seconds to see the dimming effect
}
}
for (i = num_pins – 1; i >= 0; i–) {
for(value = 255; value >=0; value-=5) // fade out (from max to min)
{
analogWrite(pins[i], value);
delay(30);
}
}
}

Blog at WordPress.com.