2010년 12월 14일 화요일

IAT320 - Body interface ::

Thank you, Greg and Jinsil for your instruction to our achievement throughout the course

Have a great Christmas ~~! :D

IAT320 - Body interface :: Final Project >> Documentation

We have finished our documentation for the final project

presentation slides
http://www.sfu.ca/~jya9/iat320/IAT320_Final.pdf

final paper
http://www.sfu.ca/~jya9/iat320/320%20research%20document.pdf

our documentation video has big size to be uploaded with this blog, but we included the video in the dvd submission.

This is overview of our interface and projection

Animation: sleeping when bear is lying down



Our tester, Amy :)

IAT320 - Body interface :: Final Project >> Creating textile touch sensor

Conductive foam + fabric to create textile touch sensor



This is how we sewed our touch sensor inside the bear (paw)


overview of the bear with arduino board and accelerometer 

2010년 12월 13일 월요일

IAT320 - Body interface :: Final Project >> Idea Brainstorming & Plan

Final Project :: Responsive Bear
Team Member :: Christine Sun, Tony Yang, Rosanna Stevens, Andy Yoo


Idea ::
        During our first week of the final project working session, we brainstormed several ideas for the project; wishing wall, alchemist's set, and friendly bear, and we decided to explore friendly bear in a hope of increasing children's awareness of species endangerment. Aim of our project was to create tangible interface with panda dolls to accomplish our goal. As children play with the toy bear, (in other words, as they interact with the bear, animation of relevant behaviour of bear would projected on the wall to create more real-like environmental images to children). We would have touch sensors on each hand (paw), accelerometer, and switch on mouth with an object that would complete the circuit (with bamboo like object for eating interaction). 







Plan ::
        1st Week
           - Brainstorming ideas
           - Research for right sensors, and brief animation discussion
           - Discussion of interactions


        2nd Week
           - Start on animation
           - Schematics for soft circuits 
           - Start on paper / documentation video script


        3rd Week 
           - Finishing each task and putting in together
           - User study/testing
           - Assembling videos


        4th Week
           - Presentation 
           - DVD


Team Role ::
        Christine Sun - Main animator / presentation slides
        Tony Yang - Main programmer 
        Rosanna Stevens - Assistant animator / documentation
        Andy Yoo - Electronics / video


Research ::
    
Concept:
        Our research focuses  primarily on interactive projects dedicated towards increasing wildlife conservation. Karolina Sobecka’s Wildlife does just that, through projecting wild animals onto city buildings from cars.  The animals run at a speed which matches the cars.  The Wildlife Foundation also did a relevant exhibit this year which involves toy pandas that react to human movement.



Technical:
        Our technical research focused on different typess of sensors; touch sensors and accelerometer. For touch sensor, we decided to create our own soft circuit sensor on each hand for interaction, and accelerometer was also installed inside of the bear to control behaviour of the bear during interaction. Also, tony started to working on coding files with both arduino and processing, using libraries that exist within the software.

resources
http://www.sfu.ca/~jya9/iat320/

accelerometer testing image

2010년 11월 24일 수요일

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2

Whit.LED

Concept : Visualizing sound/wind into movement of light.


                The concept of Whist.LED was derived from ordinary object; a whistle. A whislte is an object which produces sound from a stream of forced air. It may be mouth-operated, or powered by air pressure, steam, or other means. However, instead of sound, Whist.LED produces visual output, movement of light among series of LEDs.  Input of the sketch project is the wind that is being blown onto the whistle-like component of the system, and depends on how strong the pressure is determines the speed of the movement of the light along the series of LEDs. Also, LEDs are sewed on to the t-shirts in a image of wind blowing to visualize image of wind blowing (sound travel).


Input : Sound(from wind blown by users' breath) to an electret microphone.
  
  - Sound sensor was used as input sensor, using electret micro
 phone w/ amplifier. [schematic retrieved from tinker log]
  - Sensor measures pressure of wind created by participant’s 
 breath, and also sound created by participants or envrionment.


Output : Lights(visual) through numbers of LEDs attached to the t-shirt.

- According to values read from the sound sensor, movement of 
    light along numbers of LEDs changes.
- Visualizing wind and sound with LED lights. 


Research : I have done both concept and technical research for this project.


Concept research
- Examples from the lecture/lab
- Examples from the web
- On-line imagery research
- Drawing
- Exploration around the city

Technical research
- Sensor (Rotational sensor, hall-effect, wind sensor)
- Motor (for creating sensors)
- Lego(for creating sensors)
- Arduino programming
- Alternative sensors (sensitive touch sensors and etc)



Experiment with technical problems: I had technical difficulties with sensor and LEDs.


  Sensor


- My intention was to use rotational sensor to measure change in 
    angle of the rotational sensor to give different value to delay       
    between LEDs, but noticed that normal rotational sensor only 
    rotates from 0 degree to 360 degree. 
- I had to come up with different sensor that either reset every
    time, it reaches 360 degree, or contiuously rotates.
- I researched over different types of sensors that can satisfy this 
  condition.


* Solution was to come up with sound sensor that uses microphone to catch the sound  when wind is blowing. [This sensor can be found in previous postings with schematics] *

LEDs

- I had to choose which LEDs to work with and how I am going to arrange them.
- I experimented with five different colours of LEDs; red, yellow, white, blue, and green. And, I 
  decided to use blue, because the colour, blue is closest colour that resembles the colour of the 
  wind. Also, I tried to use different set of colours to play around with the project, but most of times, 
  other colours (other than blue) got dimmer as time passes, so I decided to stick with the blue, 
  only.
       
* Blue LEDs in parallel was the choice that I made to make all LEDs light up, reasonably at same rate(brightness) and to make circuit more safe. *


Also, I haven't used any resistor for the LEDs, because when I was experimenting, whenever I attached resistor on it, it did not work, so for the purpose of demonstration, I removed the resistor from the circuit (only for LEDs). But, I do realize it is not really safe to do that, it might damage the LEDs and the Arduino board as well.

2010년 11월 23일 화요일

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Progress

* Since I did not have a group, I worked by myself *


Brief movie clip of how it reacts to different pressure of air created by person's breath.

if pressure is higher, LEDs light up faster and fade out faster
if pressure is lower, LEDs light up slower and fade out slower


2010년 11월 22일 월요일

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Progress

* Since, I did not have a group, I worked by my self *






After completing any preceding tasks, I started to sew on the actual T - shirts


[First try on sewing]




* I failed to get sensor working on first try, so I had to take them off and start again



[Second try on sewing]




* I did some experiments on placement, colour, and number of LEDs


[Finalized version of sketch]









 [Circuit of sensor]



 [LEDs' connected together]



As I sewing, I experimented few more things


     number, place, color of LEDs
     design
     placement of each component




Sewing process took me really long hours.. since I had no previous experience, except simple soft-circuit assignment :(


So, the project, itself is not very visually impressive, but it works!


* ~ Nov.22nd 2010 *

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Progress

* Since I did not have a group, I worked by myself *




While I was working on the programming part, I also, tried to worked on the breadboard version of circuit to test input sensor and the LEDs.









This process was done quite fast, since I had my schematics and tutorials online




** On Nov. 16th - 17th 2010 *

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Progress

* Since, I did not have a group, I worked by myself *




Next process that I started to work on was to work on the Arduino coding that controls the output behaviours, using values from input sensor (sound sensor).


Here is my code for the project ********






/*
  WhistLED by Jonggen Yoo (Andy) - 301025115
  For IAT320 - Sketch two
  Inputs used::
  1 x Analog input for electret microphone as sound sensor
  3 x Analog ouputs for LEDs
  
  How the coding works::
  Reads the sensor value from analog input and converts(maps) the values to 
  range from 0 to 255. And then, using if statement, the code executes.
  There are four conditions, depending on mapped outputValue
    65 to 80   - delay 25
    81 to 135  - delay 15
    136 to 204 - delay 8
    205 to 255 - delay 3
  And the code prints out read value from sensor and output value after mapping
  ont the serial monitor.
*/


// Analog input, connected to the microphone
int analogPin = 0;


// initializing sensorValue (read from the microphone) and
// outputValue (after mapping sensorValue).
int sensorValue = 0;
int outputValue = 0;


// declaring PWM output channels for LEDs
int pinLED3 = 3;
int pinLED5 = 5;
int pinLED6 = 6;




//------------------------------------------------------------------ void setup :: begins
void setup() {
  // initializing serial communication at 9600 bps.
  Serial.begin(9600);  
}
//------------------------------------------------------------------ void setup :: ends




//------------------------------------------------------------------ void loop :: begins
void loop() {
  // reading values from analogPin (analog input) and assign value to sensorValue.
  sensorValue = analogRead(analogPin); 
  // mapping value of sensorValue, range from 0 to 255.  
  outputValue = map(sensorValue, 0, 1023, 0, 255);




//----------------------------------------------------------- Four if statements :: begins


  /*
    Fade in-out effect on LEDs
    Each statement has different delay rate between each channel output.
    To create more relevant movement of light that resembles the movement of the sound
  */
  
  //---------------------------------------------------------------- value between 75 - 80
  if (outputValue >= 75 && outputValue <= 80){
   // For value between 75 - 80 :: LED3
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED3, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED3, fadeValue);         
      // wait for 25 milliseconds to see the dimming effect    
      delay(25); 
    }
    
    // For value between 75 - 80 :: LED5
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED5, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED5, fadeValue);         
      // wait for 25 milliseconds to see the dimming effect    
      delay(25); 
    }
    
    // For value between 75 - 80 :: LED6
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED6, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED6, fadeValue);         
      // wait for 25 milliseconds to see the dimming effect    
      delay(25); 
    }
  }
  //---------------------------------------------------------------- value between 50 - 70
  
  
  
  //---------------------------------------------------------------- value between 81 - 135
  else if (outputValue >= 81 && outputValue <= 135){
   // For value between 81 - 135 :: LED3
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED3, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED3, fadeValue);         
      // wait for 15 milliseconds to see the dimming effect    
      delay(15); 
    }
    
    // For value between 81 - 135 :: LED5
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED5, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED5, fadeValue);         
      // wait for 15 milliseconds to see the dimming effect    
      delay(15); 
    }
    
    // For value between 81 - 135 :: LED6
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED6, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED6, fadeValue);         
      // wait for 15 milliseconds to see the dimming effect    
      delay(15); 
    }
  }  
  //---------------------------------------------------------------- value between 71 - 135
  
  
  //---------------------------------------------------------------- value between 136 - 204
  else if (outputValue >= 136 && outputValue <= 204){
    // For value between 136 - 204 :: LED3
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED3, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED3, fadeValue);         
      // wait for 8 milliseconds to see the dimming effect    
      delay(8); 
    }
    
    // For value between 136 - 204 :: LED5
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED5, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED5, fadeValue);         
      // wait for 8 milliseconds to see the dimming effect    
      delay(8); 
    }
    
    // For value between 136 - 204 :: LED6
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED6, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED6, fadeValue);         
      // wait for 8 milliseconds to see the dimming effect    
      delay(8); 
    }
  }
  //---------------------------------------------------------------- value between 136 - 204
  
  
  
  //---------------------------------------------------------------- value between 205 - 255
  else if (outputValue >= 205 && outputValue <= 255){
    // For value between 205 - 255 :: LED3
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED3, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED3, fadeValue);         
      // wait for 2 milliseconds to see the dimming effect    
      delay(2); 
    }
    
    // For value between 205 - 255 :: LED5
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED5, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED5, fadeValue);         
      // wait for 2 milliseconds to see the dimming effect    
      delay(2); 
    }
    
    // For value between 205 - 255 :: LED6
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      analogWrite(pinLED6, fadeValue);                                        
    }
    // fade out from max to min in increments of 5 points:
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
      // sets the value (range from 0 to 255):
      analogWrite(pinLED6, fadeValue);         
      // wait for 2 milliseconds to see the dimming effect    
      delay(2); 
    }
  }
  //---------------------------------------------------------------- value between 205 - 255
  


//----------------------------------------------------------- Four if statements :: ends


  // prints out result in serial monitor (sensorValue + outputValue).
  Serial.print("sensor = " );
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);
  delay(100);
}
//------------------------




Using four if statements, participants can experience four different behaviours, depending on the value sensor senses.


Also, most of the code involved examples from Arudino such as Fade in/out, mapping, and AnalogInOutSerial.




** On Nov. 17th - 27th 2010 **

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Progress

* Since, I did not have a group, I had to work by myself *




Very, first task I started to work on was refining the sketch and working on schematic for the circuits after getting feedbacks and  advice from Greg and Jinsil.






During the process, I had to reduce the number of LEDs, because I had too many LEDs for single PWM input channel, and also it would be way too much work amount for one person to handle.


Also, I had a solution for my sensor (I was having problem with sensor, because rotational sensor was not suitable for the project, since it was hard to be rotated using human's breath, and also it only rotates up to certain degrees.); Jinsil pointed out the sound sensor that I can make that can replace the rotational sensor, So I started to work on schematic as soon as I get the all the materials from Lee's electronics.


** On Nov. 16th 2010 **

2010년 11월 17일 수요일

IAT320 - Body interface :: Soft-Circuit Assignment >> Photo

IAT320 :: Soft-Circuit Assignment
                 Simple soft-circuit which let LEDs to blink once the buttons at two finger tips (and if there is conductive materials). This circuit is definitely wearable for participants to work it out.

Example photo of soft-circuit


2010년 11월 15일 월요일

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 imageries

Imageries that I used for the sketch two project


Sensory data came from the user is measured with the rotational device such as a pinwheel.

In order to make a blow (wind) from the user gets to the rotational device effectively, I designed the pipe-looking parts for users to blow.

Intensity of the wind is the input of the interaction.

LED (outputs) represents movement of the wind (visualizing movement of wind into lights, using LEDs). 

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 References

Reference websites that I've researched 


Rotational sensor::
http://www.google.ca/#hl=ko&expIds=17259,17311,23756,24878,26788,27400,27404,27601&xhr=t&q=rotational+sensor&cp=17&pf=p&sclient=psy&aq=f&aqi=&aql=&oq=rotational+sensor&gs_rfai=&pbx=1&fp=79a4883b5db0480c

Lego Rotational sensor::

http://www.philohome.com/sensors/legorot.htm

types of sensors::

http://www.sensorsportal.com/HTML/SENSORS/RotationSens_Manuf.htm

IAT320 - Body interface :: Physical Interactive Skin >> Sketch 2 Brainstorming Ideas

Sketches of brainstormed ideas of mine for Sketch Two
This idea was the first brief idealization of using feet as interactive medium (Pressure).

This was the second idea which uses intensity of the wind to make device on the neck to rotate and works similar as rotational sensor (but not exactly a rotational sensor).
Due to the fact that rotational sensor only rotates once from 0 degree to 360 degree, which would stop functioning once, it reaches 360 degree... so I have to come up with other hand-crafted device to work this out.

More detailed view of the sketch.

basic component of the device that functions as rotational sensor, I symbolized the component which rotates, since i haven't figured out what to replace the component.