Today we are officially finished with our final project this semester- Inventing interactive products. And here is mine:
We should use our skills and method we've required so far and make an interesting interaction by digital and physical activity. The task was four weeks long, and here's how I spend them:
1st Week - Producing ideas.
After a long time with idea processing, most of my concepts were way too "finished". I decided to change my working method since interaction was about to make an experience. Instead of decide the concept first then try to solve problems, I started to test out different objects and see where it takes.
2nd Week - Playing around
I tried a lot different combination possibilities with outputs and inputs during this week, experimented a lot and got more familiar with Arduino. This week really made me realise that you never know until you've tried. And small ideas could make big joys too.
3rd Week - Making desicions and prototyping
Thanks for the fresh ideas from the 2nd week, I got lots of new inspirations. I wanted to make a product with the expression we were familiar with, and pack it in a new way. And it became shadow playing! Everybody have done it before, it's interesting for both kids and adults.
So I decided to use photoresistor as my input and servo as output. I found out that this concept had a lot of potentials so I must decide a more specific context. And it became a new concept for storytelling.
The last Week - Putting pieces thogether
The las week was quiet hectic, I made a children story; illustration/book of it; a wood box for the stands; paper cutting for the shadow; and of course, all the electronics and code!
int lightPin = 0; //analog pin 0
int lightPin1 = 1;
int lightPin2 = 2;
int lightPin3= 3;
int ledPin = 4;
int ledPin2 = 2;
int ledPin7= 7;
int ledPin12= 12;
#define myServoservopin 8
#define Sensor A0 // setting up light sensor
const int Threshold = 10; // the value that the servo will trigger@
void setup(){
myServo.attach(myServoservopin);
myServo.writeMicroseconds(1500);
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite (ledPin, LOW);
pinMode(ledPin2, OUTPUT);
digitalWrite (ledPin2, LOW);
pinMode(ledPin7, OUTPUT);
digitalWrite (ledPin7, LOW);
pinMode(ledPin12, OUTPUT);
digitalWrite (ledPin12,LOW);
Serial.println("Inactive!");
Serial.println(Sensorvalue);
}
void loop(){
Sensorvalue = analogRead(Sensor);
Serial.println(Sensorvalue);
int val = analogRead(lightPin); // first sensor
Serial.println("Value:");
Serial.println(val);
analogWrite(ledPin7, analogRead(lightPin)/4);
int val1 = analogRead(lightPin1); // second sensor
Serial.println("Value 1:");
Serial.println(val1);
analogWrite(ledPin7, analogRead(lightPin1)/4);
int val2 = analogRead(lightPin2); // third sensor
Serial.println("Value 2:");
Serial.println(val2);
analogWrite(ledPin7, analogRead(lightPin2)/4);
int val3 = analogRead(lightPin3); // third sensor
Serial.println("Value 3:");
Serial.println(val3);
analogWrite(ledPin7, analogRead(lightPin3)/4);
if (val<700) { // chase the butterbly!
delay (1000);
Serial.println(Sensorvalue);
Serial.println("Active!");
myServo.writeMicroseconds(1580); // servo rotating in a specific direction
delay(850); // the time that the servo would keep rotating in that direction
myServo.writeMicroseconds(1500); // the servo would stay stationary in 1500
delay(1000); // the time that the servo would stay in position
/*myServo.writeMicroseconds(1400); // servo rotating in opposite direction in attempt to go back to the original position
delay(4500);
Serial.println("Inactive!");
myServo.writeMicroseconds(1500); */
}
if (val3<650) { // KISS EGG
delay (1500);
Serial.println(Sensorvalue);
Serial.println("1!");
myServo.writeMicroseconds(1580); // servo rotating in a specific direction
delay(1470); // the time that the servo would keep rotating in that direction
myServo.writeMicroseconds(1500); // the servo would stay stationary in 1500
delay(1000);
}
if (val2<680) { //slå katten
delay (1500);
Serial.println(Sensorvalue);
Serial.println("2!");
myServo.writeMicroseconds(1580); // servo rotating in a specific direction
delay(750); // the time that the servo would keep rotating in that direction
myServo.writeMicroseconds(1500); // the servo would stay stationary in 1500
delay(1000);
}
if (val1<600) { //holde eggen
delay (3500);
digitalWrite (ledPin, HIGH);
delay (700);
digitalWrite (ledPin2,HIGH);
delay (700);
digitalWrite (ledPin7, HIGH);
delay (700);
digitalWrite (ledPin12, HIGH);
delay(700);
/* while (val3>630){
digitalWrite (ledPin2, LOW);
delay (700);
digitalWrite (ledPin7, LOW);
delay (700);
digitalWrite (ledPin, LOW);
delay (700);
digitalWrite (ledPin12, LOW);
delay (700);
}*/
Serial.println(Sensorvalue);
Serial.println("3!");
myServo.writeMicroseconds(1580); // servo rotating in a specific direction
delay(1450); // the time that the servo would keep rotating in that direction
myServo.writeMicroseconds(1500); // the servo would stay stationary in 1500
delay(1000);
}
}
And here is the final result!
"Playing With Shadow" is a new way of story telling, by interacting with shadows of ourself.
Every time you start reading the story, you active the “shadow machine”in front of the wall. The book will instruct you and your kids to make shadows, different scenes will appear on the wall followed by the story. So the users become a part of the storytelling.
This is how the book looks like.
The yellow stars on each picture is the place you should place shadow over. When you block the light, servo make the shadow plate rotate to the next "page".
You can get different “shadow plates” which are matching with different storybooks, and you cal also make your own.
A typical context of this product: Bed-time story
I think it's a good way to invite people into the story. And kids today have way too much digital screens everyday, just hope they could play more physically.
It was interesting to get comments at the AHO exhibition. There were many people enjoyed my concept, and also made me see the unsatisfied details.
And here is a little video: