Project write-up can be found here.
December 17, 2007
October 30, 2007
October 17, 2007
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
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
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”
September 12, 2007
beste.example2
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.
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 🙂
September 4, 2007
pingponglamp.beste.A0
I started with the default fading code, and modified it to make 3 consequent fading LEDs.
Steps:
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.
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.
3 | I cut 3 ping pong balls and gathered to each other vertically.
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);
}
}
}