WOOL'S WORLD

Group Project by Yun Liu | Xiangzhen Fan | Qianqian Li

Basic Idea

As growing in the society, people can't avoid setting up the relationships with others and the relationship will become more complex and extensive. Some people become more mess when they rush to solidify the relationship, while others choose become indifferent and even no longer social with people, which make them gradually derailment with society. We do not want to defined it how to deal with it is totally exactly. We turn the relations visualized and let the users to feel their relationship with others in the society, looking directly at it, make himself balance. We aim to help people to find a balance of dealing with the interpersonal relationship, try to find a way to perspective on this relationship.

For this project, we'd like to use the wool as the theme. In China, the word 'WOOL (毛mao线xian)' will be used to describe complex relationships, because it is 'shear continuously, manage to return disorderly'.

Design | Interaction with Screen

The user will see a representative image of him on the screen, many fine lines around on it. The thin lines are a kind of metaphor of the complex relationships in the society.

Original Diagram
Original Graphic Design


If the user stood there motionless, lines will disappear slowly and weak, and the user will disappear on the end. It means that if you do not take care of interpersonal relationships, the relationship will not get clearer, only would make themselves out of touch with the community.

Various relationship in the society


Keep balance in the society
Cut off from society


If users try to clear the lines by doing actions quickly and aimlessly, those lines will be more and more disorderly which would turn into a mess. This shows that if you are too eager to sort it out in a rush and expand relationships, not only will make the relationship more chaotic, but also separated from the real contact with others.

Mess with all the relationships


Design | Interaction with Objects

Using different forms of wool represent various relationships in the modern society.

Object Diagram


Plumb Line

Nowadays, people sometimes know each other just by coincidence. Some people feel attracted to each other, but some just pass by in your life. We'd like to hang many plumb woolen lines with photocell and vibration sensor in the space. If two or more than two people holding the end of the woolen line at the same time, they will feel the vibrations. It likes the meeting between each other. We also thinking about using Pulse Sensor to control the strength of the vibration, that people will feel different feedback by themselves. This also stands for different relationships, some are close and some are estranged.

Object Diagram
Plumb Line with Sensors



Mystic Box

More and more media appear in the modern society, people take the initiative to establish a wide range of contacts with others through the media. Actually,this box in our interaction design means the media. It is a collection of many different colors of wool. The user can choose a yarn and try to pull it. However, there are many possibilities represent the development trends of different relationships. For example, one line is pulled up, but there is no change, which similar to the result of the failed social. While two lines are pulled up, and found that it was the same root rope. This implies that the two people have established a connection through the media. But this connection is not stabled, there is another possibility that when you pull away from long distance or forced over, the line will be broken. It shows that interpersonal relationship should maintain a more healthy and reasonable distance,a good way could help people to make the relationship stable.

Object Diagram


Installation

Interaction with Screen

At the beginning of the installation, we decided to replace those colorful fine lines with a 3D Chinese knot, which is designed with one line and very expressive in shape. On the other hand, a complex knot could also become a metaphor to describe a human being with complex relationships in his/her life. So we would like to use a Chinese knot as a representation of user on the screen. User can control the knot with his/her movement. If user move quickly or keeping doing gestures, the knot will get very tight which means those relationships cannot be get rid of easily. If user just stay put and do nothing, the knot will get more and more loose. And during the whole interaction, the position of knot is consistent with user.

3D Chinese knot


During the process of installation, the biggest problem we met is how to stimulate the 3D Chinese knot in real-time. We have explored methods online and obtained with few proper answers. Finally we decided to use a pre-made animation of 3D Chinese knot instead of a stimulation in real-time. The speed of playing fast forward or rewind the animation is related with the changing rate of user's movement. The faster user move on, the faster the animation will be played on, vice versa.

Chinese knot get tight
Chinese knot get loose


The user is captured by the tracking system in real-time, and the related data of his/her movement will be sent to the Processing which control the play of the animation we made.

Chinese knot demo


Here is the code running in Processing: Main Tab:

import netP5.*;
import oscP5.*;
import processing.video.*;

OscP5 osc;
NetAddress remote;
Movie myMovie;

int localport = 12000;
int remoteport = 1065;
boolean debug = true;

Sphere sphere1;

String skeleton1 = "LiQianqian";
String bone1 = "Root";
String bone2 = "LeftHand";
String bone3 = "RightHand";

int depth;

void setup() {
  frameRate(60);
  background(0);
  myMovie = new Movie(this, "Chinese Knot_Final.mov");
  fullScreen(P3D);
  
  sphere1 = new Sphere(1);
 
  depth = width;
  
  osc = new OscP5(this, localport);
  remote = new NetAddress("kosmos.medien.uni-weimar.de", remoteport);
  setPort(localport);

  plugBone(sphere1, skeleton1, bone1);
  plugBone(sphere1, skeleton1, bone2);
  plugBone(sphere1, skeleton1, bone3);
  
  refreshSubscriptions();
}

void refreshSubscriptions() {
  subscribeBone(skeleton1, bone1);
  subscribeBone(skeleton1, bone2);
  subscribeBone(skeleton1, bone3);
}

void movieEvent(Movie m) {
  m.read();
}

void draw() {
  sphere1.draw();

  if (frameCount % 10 == 0) {
    refreshSubscriptions();
  }
}

void oscEvent(OscMessage msg) {
  if(debug) {
    print("### received an osc message.");
    print(" addrpattern: "+msg.addrPattern());
    println(" typetag: "+msg.typetag());
  }
}

void plugBone(Object target, String skeleton, String bone) {
  String path =  "/" + skeleton + "/blender/" + bone + "/vector";
  osc.plug(target, "update" + bone, path);
}

void setPort(int port) {
  OscMessage msg = new OscMessage("/configure/port");
  msg.add(port); 
  osc.send(msg, remote);
}

void subscribeBone(String skeletonId, String bone) {
  OscMessage msg = new OscMessage("/subscribe/" + skeletonId + "/blender/" + bone + "/vector");
  msg.add(50.0);
  msg.add(0.0);
  msg.add(100.0);
  osc.send(msg, remote);
}

Sphere Tab:

class Sphere {
  float x, y, z;
  float x1, y1, z1;
  float x2, y2, z2;
  float x3, y3, x4, y4;
  
  float a, b, cc;
  float a1, b1, cc1;
  float a2, b2, cc2;
  float a3, b3, a4, b4;
  
  float d, e, f;
  float d1, e1, f1;
  float d2, e2, f2;
  float d3, e3, d4, e4;
  
  float speedChange, speedChange1, VideoSpeed;
  int play;
  color c;
  
  int getLength() {
      return int(myMovie.duration() * myMovie.frameRate);
  }
  
  int getFrame() {    
      return ceil(myMovie.time() * 60) - 1;
  }
  
  int newFrame = 0;
    
  Sphere( color c) {
    this.c = c;
  }

  void draw() {
    image(myMovie, 0, 0, width, height);
    
    if(speedChange > 0.3 && getFrame() < 599){
      play = 1;
      myMovie.play();
    }
    else {
      play = -1;
      myMovie.play();
    }
    
    if(getFrame() < 0) myMovie.play();
    
    float newSpeed = map(speedChange1, 0, 150, 0*play, 2*play);
    myMovie.speed(newSpeed);
    
    fill(255);
    x4 = abs(x2 - x3);
    y4 = abs(y2 - y3);
    speedChange = abs(x4 - y4);
    println(speedChange);
    text("Root Speed: " + nfc(speedChange, 2) + "X", 10, 30);
    x3 = x2;
    y3 = y2;
    
    speedChange1 = dist(a, b, cc, d, e, f);
    text("Hand Distance: " + nfc(speedChange1, 2), 10, 50);   
    
    VideoSpeed = speedChange1*play;
    text("VideoSpeed: " + nfc(VideoSpeed, 2) + "X", 10, 70); 
    
    text(getFrame() + " / " + (getLength() - 1), 10, 90);
  }

  public void updateRoot(float x, float y, float z) {
    this.x = map(x, 0, 100, -width/2, width/2);
    this.y = map(y, -100, 100, -height/2, height/2);
    this.z = map(z, 0, 100, 0, depth);
    
    x2 = abs(x - x1);
    y2 = abs(y - y1);
    z2 = abs(z - z1);
    
    x1 = this.x;
    y1 = this.y;
    z1 = this.z;
  }
  
  public void updateLeftHand(float a, float b, float cc) {
    this.a = map(a, 0, 100, -width/2, width/2);
    this.b = map(b, -100, 100, -height/2, height/2);
    this.cc = map(cc, 0, 100, 0, depth);
    
    a2 = abs(a - a1);
    b2 = abs(b - b1);
    cc2 = abs(cc - cc1);
    
    a1 = this.a;
    b1 = this.b;
    cc1 = this.cc;
  }
  
  public void updateRightHand(float d, float e, float f) {
    this.d = map(d, 0, 100, -width/2, width/2);
    this.e = map(e, -100, 100, -height/2, height/2);
    this.f = map(f, 0, 100, 0, depth);
    
    d2 = abs(d - d1);
    e2 = abs(e - e1);
    f2 = abs(f - f1);
    
    d1 = this.d;
    e1 = this.e;
    f1 = this.f;
  }
}

Interaction with Objects

We finally decided to use the photocell sensor and vibration motor to build a plumb line. Each line is wrapped with red wools and tied as a handle. The sensor and motor are connected to the Arduino Uno which is running on a laptop.

Here is the code running in Arduino:

int photocellPin = 0;     // the cell and 10K pulldown are connected to A0
int photocellPin1 = 1;     // the cell and 10K pulldown are connected to A1
int photocellReading, photocellReading1;     // the analog reading from the sensor divider

void setup() {     // We'll send debugging information via the Serial monitor
  Serial.begin(9600);
  pinMode(3, OUTPUT);   
  pinMode(5, OUTPUT);
}
 
void loop(void) {
  photocellReading = analogRead(photocellPin); 
  photocellReading1 = analogRead(photocellPin1); 

  if(photocellReading < 400 && photocellReading1 < 400 ){
    digitalWrite(3, HIGH);
    digitalWrite(5, HIGH);
    delay(100);
  }

  else {
    digitalWrite(3, LOW);
    digitalWrite(5, LOW);
    delay(100);
  }
 
  Serial.print("Analog reading1 = ");
  Serial.println(photocellReading);     // the raw analog reading1
  Serial.print("Analog reading2 = ");
  Serial.println(photocellReading1);     // the raw analog reading2
  Serial.println(" ");
  
  delay(10);
}

Demonstration

Chinese Knot Interaction

Summary

On the 16th of July, Wool's World exhibited in Digital Lab. We played the PPT about the introduction of Wool's World on the video wall when we arranged the exhibition. The red object handles and all the plumb lines with different length hung from the top. The mystic box covered by black wool felt with knitted woolen lines set in the center of the platform. It's glad that all the participants had a good experience when they tried the object handles, especially felt the vibration of the handles. For sure, if we can do more interactive handles, it will be more interested for lots of people.
It was a pity that the Captury didn't work well that day because of the update. We could only show the screen interaction part with play back video of the Captury and the live capture video shot before to explain to every participant. If it work, the interactivity will definitely be more meaningful and interesting.

Wool's World
Plumb Line
Mystic Box
Summary
Summary


Conclusion

In the design process of our work, the interactive elements set up complete connected to our theme. We hope that the user can realize the vivid state of human relationship by this work, and can control and influence it through their own movement, eventually reach the self-sustainability. After many investigations and relevant data studying, finally we found that the "rope" can be maximum physical and poetic simulate the "relationship". Further, we developed the simple rope to the Chinese knot. Chinese knot represents a kind of harmony and good will, which is very similar to the interpersonal relationships we pursue. At the same time, based on the interaction of the screen, we increased the physical interaction part in same style. A wide variety of wools also represent the complicated interpersonal relationship, and multiplayer interaction device allows users to experience the different results of interpersonal communication directly. We hoped that we could give the users the experience of all aspects.

However, we must admit that there are many regrets. For example, in the original design, we wanted to simulate the process of tie the knot through 3D technology and interact with users in real-time. But unfortunately, because of our technical level is very limited, the time is not abundant,we decided to use the knot animation to be controlled by user`s movement after discussion. Very fortunately, finally we display very well. The Feedback from users who played the device is also satisfactory. Overall, we achieve the expected effect.

Expectation

Art is very independent and personalized. Each user can obtain different experience in our interactive device. Therefore, when design the project, we should prepare more comprehensive investigation and analysis in the early, it can make the project more perfect. At the same time, in terms of technology, we believe it is possible that when we have higher technical ability to complete process of tie the Chinese knot through 3D technology, it will be more striking and have more artistic effect. It is worth mentioning that the Chinese elements in our work are also very unique. In the future, we hope that we can integrate a variety of different countries and regional cultural elements, which will increase more possibility in our design.