Pcom & ICM Final – Future of eating

Computational Media, Physical Computing

Scenario

In the future, we have food shortage problem because of environmental pollution. All the food are chemical synthesis to meet the nutritional needs of the human body. They looks the same, have no smell,  have no taste. People be implanted with  chips to control what they feel of food(vision, smell, taste).

In this case, we don’t need to cook anymore, we can eat “anything” we want and don’t need to consider the nutrition. For example, diabetic can eat “candy” all day, obesity can eat “high-fat” food every meal.

A device is made for experience some part of the future eating. We all know that if you pinch your nose while eat something the taste will fade, even lose some kind of taste. For example, if you pinch your nose while eat chocolate, you can only feel it is sweet, but cannot feel the chocolate taste.

futureeat

img_6308

Prototype 1

ICM PART: The video should be replaced by my background story, user can choose to watch it or skip it. This interface should connect with arduino. Each icon represent one taste, from left to right they are strawberry, orange, matcha and chocolate. User can mix multiple taste by selecting multiple icons.

 

Download ICM code

PCOM PART: There will be four of this device, each one contains one taste. The fan is controlled by arduino. Ex. The red cotton ball contains strawberry smell oil. The fan will blow wind in the bubble, so the strawberry smell will coming through the tube. User will smell from the end of the tube. User will be provided with a cup of sweet water, they need to smell from the tube while drinking.

Prototype 2

Made by 3D printing. In this version, I decide only use physical button rather than virtual on screen button.

The full view: a huge cup can hold a plastic cup.

Top: the four tube is for hold sent oil.

Top cover: the four hole on the top is for mount buttons, the four small hole on the side is for smell to coming out.

DIY button test:

Bottom: put everything(fans, prototype board, arduino micro, power jag etc) in here.

Bottom cover:

3D modle:

In this version, I find the DIY buttons are not stable and hard to mount, also the whole cup is too big, so I decide to make another one.

 

Prototype 3

 

06 Midterm Production

Physical Computing

img_5736

fullsizerender-2

Concept

Belly pillow is designed for long-distance relationship. Some people like to lie on the boyfriend’s belly to sleep, for example, me.

bellypillow

How It Work

pillow1pillow2

Materialspillow3

At the end I used flex sensor instead of force sensor. I couldn’t figure out how wave shield works, so I use serial communicate with P5 for control the snoring sound.

Code

P5: https://alpha.editor.p5js.org/projects/Hy3oNOT1l

arduino:
const int sensorPin = A5;
const int heatPin = 9;
int sensorValue = 0;
int heatState = LOW;

void setup() {
Serial.begin(9600);
pinMode(heatPin, OUTPUT);

}

void loop() {
sensorValue = analogRead(sensorPin);
digitalWrite(heatPin, heatState);

// Serial.print(“sensor = ” );
// Serial.println(sensorValue);

if (sensorValue < 800) {

heatState=HIGH;
Serial.println(“1”);

} else {
Serial.println(“0”);
heatState=LOW;
}

delay(1);

}

 

04. Servo and Tone

Physical Computing

Code

#include "Pitches.h"
#include <Servo.h>

const int button1 = 2;
const int button2 = 3;
const int button3 = 4;
const int button4 = 5;
const int button5 = 6;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;

Servo Servo1;
Servo Servo2;
int servoPin1 = 9;
int servoPin2 = 10;

int speakerPin = 11;


void setup() {
 Serial.begin(9600);

 pinMode(button1, INPUT);
 pinMode(button2, INPUT);
 pinMode(button3, INPUT);
 pinMode(button4, INPUT);
 pinMode(button5, INPUT);
 
 Servo1.attach(servoPin1);
 Servo2.attach(servoPin2);

}

void loop() {
 buttonState1 = digitalRead(button1);
 buttonState2 = digitalRead(button2);
 buttonState3 = digitalRead(button3);
 buttonState4 = digitalRead(button4);
 buttonState5 = digitalRead(button5);
 Serial.print("button1: ");
 Serial.print(buttonState1);
 Serial.print(" button2: ");
 Serial.print(buttonState2);
 Serial.print(" button3: ");
 Serial.print(buttonState3);
 Serial.print(" button4: ");
 Serial.print(buttonState4);
 Serial.print(" button5: ");
 Serial.println(buttonState5);

 if (buttonState1 == 1) {
 sense1();
 }
 if (buttonState2 == 1) {
 sense2();
 }
 if (buttonState3 == 1) {
 sense3();
 }
 if (buttonState4 == 1) {
 sense4();
 }
 if (buttonState5 == 1) {
 sense5();
 }
 

}

void sense1(){
 tone(speakerPin,NOTE_C5,100);
 Servo2.write(170);
 Servo1.write(10);
 delay(50);
 Servo1.write(70);
 
 
 

}

void sense2(){
 tone(speakerPin,NOTE_D5,100);
 Servo2.write(140);
 Servo1.write(10);
 delay(50);
 Servo1.write(70);
 

}

void sense3(){
 tone(speakerPin,NOTE_E5,100);
 Servo2.write(110);
 Servo1.write(10);
 delay(50);
 Servo1.write(70);
 

}

void sense4(){
 tone(speakerPin,NOTE_F5,100);
 Servo2.write(75);
 Servo1.write(10);
 delay(50);
 Servo1.write(70);
 

}

void sense5(){
 tone(speakerPin,NOTE_G5,100);
 Servo2.write(35);
 Servo1.write(10);
 delay(50);
 Servo1.write(70);
 

}

03. Three Steps To Wake Up A Friend

Physical Computing

 

Code

int lightSensorPin = A0;
 int touchSensorPin = A5;
 int led1 = 3; //arm left
 int led2 = 5; //arm right
 int led3 = 6; //leg left
 int led4 = 9; // leg right
 int lightValue = 0; //store the value coming from the light sensor
 int touchValue = 0;//store the value coming from the touch sensor

int cState = 0;

//////////////////////////////////////////////
 void setup() {
 Serial.begin(9600);
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 }
 //////////////////////////////////////////////
 void loop() {
 lightValue = analogRead(lightSensorPin);

delay(1);
 touchValue = analogRead(touchSensorPin);
 Serial.println(lightValue);
 Serial.println(touchValue);
 //////////////////////////////////////////////
 switch (cState) {
 case 0:
 Serial.println("state 0");
 // check for event that causes transition to next state
 if (touchValue > 100 && lightValue < 80) { //if touch & lights off & with quilt
 cState = 1;

} else {
 sequence0();
 }
 break;

//////////////////////////////////////////////
 case 1:
 Serial.println("state 1");
 // check for event that causes transition to next state
 if (touchValue < 100 && 500 > lightValue > 100) { //if no touch & lights on & with quilt
 // go to next state
 cState = 2;
 } else {

// run the current state
 sequence1();
 }
 break;
 //////////////////////////////////////////////
 case 2:
 Serial.println("state 2");
 // check for event that causes transition to next state
 if (touchValue < 100 && lightValue > 600 ) { //if no touch & lights on & without quilt
 // go to next state
 cState = 3;
 } else {
 // run this state
 sequence2();
 }
 break;
 //////////////////////////////////////////////
 case 3:
 Serial.println("state 3");
 // check for event that causes transition to next state
 if (lightValue < 80 && touchValue < 100) { //if no touch & lights off & with quilt
 // go to next state
 cState = 0;
 } else {
 // run this state
 sequence3();
 }
 break;
 }

}
 //////////////////////////////////////////////
 void sequence0() { // off: arms and legs light off
 digitalWrite(led1, 0);
 digitalWrite(led2, 0);
 digitalWrite(led3, 0);
 digitalWrite(led4, 0);
 }
 void sequence1() { // fade: arms and legs fade together
 fadeTogether();
 }
 void sequence2() { // blink: left on right off, left off right on
 blinkLedLR(900);
 }
 void sequence3() { // blink
 blinkLedAll();
 }

////////////////////////////////////////////////////

void fadeTogether( ) {
 int fadeAmount = 5;
 int brightness = 0;
 analogWrite(led1, brightness);
 analogWrite(led2, brightness);
 analogWrite(led3, brightness);
 analogWrite(led4, brightness);
 brightness = brightness + fadeAmount;
 if (brightness == 0 || brightness == 255) {
 fadeAmount = -fadeAmount ;
 }
 delay(30);

}

void blinkLedLR(int delayTime) {
 digitalWrite(led1, HIGH);
 digitalWrite(led3, HIGH);
 digitalWrite(led2, LOW);
 digitalWrite(led4, LOW);
 delay(delayTime);
 digitalWrite(led1, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led2, HIGH);
 digitalWrite(led4, HIGH);
 delay(delayTime);
 }

void blinkLedAll() {
 digitalWrite(led1, HIGH);
 digitalWrite(led3, HIGH);
 digitalWrite(led2, LOW);
 digitalWrite(led4, LOW);
 delay(110);
 digitalWrite(led1, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led2, HIGH);
 digitalWrite(led4, HIGH);
 delay(110);
 }

03. Observation

Physical Computing

img_3875

When I  traveled in Japan, I observed the vending machine in a ramen shop,  it seemed hi-tech and made me nervous because I was so afraid of making mistakes.

When I saw it, I didn’t know where to start. I wonder if I should put money first or select items first.

The first step is put money into it.

It will show the amount of money on the screen.

Then choose the item. The red led shows which item is available. I choose the ramen.

The money changed. Also some red led turned off because lack of money. Then I needed to select  other ingredients. The ramen picture showed it contend shallot and meat, but when I saw the individual option of shallot and meat I didn’t know whether the original one contents them or not. So I decided to select egg,  vinegar and seaweed.

The coin automatically came out because there was no item I can afford. I noticed that sometimes people just need add 10 yen to it, so the amount would be 50 yen that you can afford an item. But this machine would first spit out four 10-yen-coins, then you should put them all back and add one more.

You should keep the receipt. But the size is different. So it’s easy to loose one or two of them.

_f6a3217 img_3878

Then you should go to find a spot according to this “floor plan”. When it shows “空” it means that spot is available. It makes easy and fast to find a spot.

Ps: pics with logo are from internet, the first and the last ones are from mine.

 

02. To Work Hard

Physical Computing

Syllabus

Come up with a simple application for switches and LED circuits.

Concept

Performing an Chinese idiom story:

孙敬,汉朝有名政治家,每天从早到晚读书.有时会疲倦得直打瞌睡,他便找了一根绳子,一头绑在房梁上,一头束在头发上,当他读书打盹时,头一低,绳子就会扯住头发,自然也就不瞌睡了。苏秦,战国时著名的纵横家, 读书时他准备了一把锥子,一打瞌睡,便用锥子往自己的大腿上刺,强迫自己清醒过来。后人从苏秦和孙敬两人勤奋苦学的故事中,引申出了“悬梁刺股”这个成语,用来比喻发奋读书、刻苦学习的精神。

In ancient China, there are two people, named Sūn Jìng and Sū Qín, who studied very hard. But when they studied for a long time, they dozed off. Then one tied his hair to the house beam, and the other stuck an awl in his calf, so that they accomplished in their studies.

Technique

_f6a3217 _f6a3216 _f6a3221

Very simple and low-tech. Arduino is just used for powering.

01. What Is Physical Interaction?

Physical Computing

What is physical interaction? What makes for good physical interaction?

Crawford defines interaction as a conversation “in which two actors alternately listen, think, and speak.” In this definition he had an example that printed books are not interactive, although an actor will turn pages of the book, but the book won’t listen, think, or speak. Victor defines against the  future illusion of  “Pictures Under Glass”, we will not living in a finger-touch-screen world. He emphasis that “a tool addresses human needs by amplifying human capabilities.” We can do more/feel more by multiple ways when make the full use of our human body, not just fingers.

So I think, maybe the good physical interaction should be, first of all, needs respond between the two, not one static things control the other. The conversation between the two both need changes and react differently based on the different “input”, and it will have “process”, then “output” differently. Maybe that something needs more active move of the user can express more feelings. This reminds me of a project I did last year, it’s an installation that people can play with. I am not confident with it, I said to my teacher that I think my project is the worst comparing with other students’ work, because lack of concept. My teacher said that “but yours attracts more people stand by and play, what makes a good interaction is it can make more people want to participate and interact”