Response to Manakamana

Personally I really enjoyed this experimental film. It reminds me of a short story called The Garden of Forking Paths written by Jorge Luis Borges. I love the Title “Manakamana” because it is repeated and circling structure, just like the structure of the film. Meanwhile the word gives me a sense of mystery, which set off the religious atmosphere.

The film is kind of strange. I don’t understand where is the cable car going. In the three rounds at the beginning, the cable car stopped and picked new passengers, and kept going up. In the fourth round we knew the destination while the cable kept going up and this time it passed through the totally different scenes.

The goal of the film is confusing and blurry. At first I thought the director was trying to display a kind of inner psychological activity. It not only reflected the pilgrims’ inner activity but also reflected the collective unconsciousness of the human. The human are struggling to go up into the paradise, getting rid of the flesh and blood and the chains from the reality.

As I did the research, I found the director tried to discuss about the relationship between nature and science. The interval darkness suggested the interval transitions in the cinema and the interspace between the project machine’s rotation. The director tried to combine the cinema and the film together. However the film did not make me feel this point. Maybe it is because I did not seat in the cinema and watched this movie.

Response to Kings of Nowhere

The film, Kings of Nowhere by Betzabé Garcia, is a poem. It is delicate, gorgeous and beautiful. It creates a strong sense of loneliness but the film actually seldom directly describes the loneliness in the places and its residents.

First is the color. The color style is cold, most of which is grey, blue and green. The saturability is low. Amazingly the color does not make the film look abandoned. It looks a little bit sad and lonely, but also harmonious and peaceful.

Second is the scenery.  I love the river, the island, the flourishing grass and trees. There is a scene that a man with a cow approaching closer to the camera. The flourishing green grass overfilled the screen. The scenery in the film is full of vigor, which is contrast with the sense of loneliness. There is a tension within the film that impressed me a lot.

Third is the composition of the camera. Most of the time the shoot stands out the single person or several people. It suggests that  this community is lonely and like a small island in the sea, while the connection between the people are close and warm. It does not only strengthen the lonely sense, but also reflects the warmness and affection within the residents.

At last is the way the director narrates the story. The director restrains his emotion very well. The style is gentle and calm. There is no heartbreaking emotion but very impressive.

Final Project Essay

Name: Adonis Langumas

Professor: Moon

Project Title: Guardian Angel

Interaction is when the user of a device or medium connects to the device or medium through the physical world. As a large fan of video games, I want to critique the established formula for games.

Most video games focus on the user becoming an avatar that directly takes part in the story, and use typical controllers to perform onscreen actions. Pushing simple buttons is never the same motion as what is on the screen. Also,the stories are formulaic with the player always in the center.

I wanted to create a game that subverts this story making idea by separating the user and the action on the screen. To achieve this concept, but maintain the interesting aspects of the game, I needed to make the user feel responsible for the on-screen actions.  I decided that “Guardian Angel” would allow me to do this. In my cultural background, a Guardian Angel is an impersonal agent that protects individuals despite not influencing your decisions or personal will.  My concept involves the player taking on the role of a Guardian Angel, while the story revolves entirely around a different on-screen character.

Anna, my character, needed to attend school and pass her exam. As the player and Guardian, a user needed to defend her. The story is not about the player’s abilities or actions;rather, focuses on the character’s goals. I wanted to incorporate a physical doll as the controller so that the player feels like a separate agent pushing, pulling, and guiding the character in different directions. Using our Arduino knowledge allows me to use sensors to detect how the player interacts with the doll. By incorporating this component, the player became a Guardian Angel, that could influence the character’s story but lie outside of this main story.

I took care to make sure the game’s imagery and soundscape matched this feeling. The imagery of the character needed to match the doll in order to connect the experience of the controller to the digital game. I want to use Processing’s sound library to import dialogue that could try to create this feeling. The voice of “God” could alert the player with their needed tasks, but the lines should focus on helping the character accomplish their goals, not on the player achieving their personal tasks. All the screens in the game needed to adhere to the responsibility the player has on the character. I took care to display the result that the character achieved, but that it was the player’s fault. Having a sound reaction by the character screaming out helps to make the player feel bad for failing to help the character.

Despite not being in the action, I hope the user could get a sense of responsibility for the character and become interested in a story despite not being a main character. The interaction of the doll allows the player to become a real Guardian Angel.

 

ILab Final project | Xiaoyan Kong (Moon)

Final Project – BandX

Date: December 18th, 2017

Documented by: Xiaoyan Kong

Instructor: Professor Moon

Partner: Dylan Wang

Motivations & Inspirations:

Me and Dylan decided to make something useful and practical for our final project —— a wireless wearable assistive technology device that helps disabled people type. We came up with this idea because we wanted to make something that could have some impact on our society.

Part 1: Alphabet

Continue reading

import processing.serial.*;
import processing.sound.*; 
SoundFile fileA;
SoundFile fileB;
SoundFile fileC;
SoundFile fileD;
SoundFile fileE;
SoundFile fileF;
SoundFile fileG;
SoundFile fileH;
SoundFile fileI;
SoundFile fileJ;
SoundFile fileK;
SoundFile fileL;
SoundFile fileM;
SoundFile fileN;
SoundFile fileO;
SoundFile fileP;
SoundFile fileQ;
SoundFile fileR;
SoundFile fileS;
SoundFile fileT;
SoundFile fileU;
SoundFile fileV;
SoundFile fileW;
SoundFile fileX;
SoundFile fileY;
SoundFile fileZ;
SoundFile fileSpace;
SoundFile filePeriod;

int x, y, z;
int ax, ay, az;
int px, py, pz;

int MAX_INTERVAL = 60;
int interval = MAX_INTERVAL;

String myString = null;
Serial myPort;


int NUM_OF_VALUES = 3;
int[] sensorValues;

int state1 = 0;
int state2 = 0;
int state3 = 0;

boolean printed = true;
boolean shaked = false;

String di = "";
String ch = "";

int[] axf = {  0, -51,  0,   0,  0,  0, 0,  0,-51,  0, 0,-51, 0, 0,-51,51,-51, 0, 0,0, 0,-51, 0,-51,-51, 0,  0,-51,  0, 0,  0,0,-51,-51, 0,  0,-51,  0, 0,  0};
int[] azf = {-51,   0, 51, -51, 51, 51,51,-51,  0, 51,-51,  0,51,51,  0, 0,  0,51,51,51,51, 0,51,  0,  0,51,-51,  0,-51,51,-51,51,  0,  0,51,-51,  0,-51,51,-51};

int i = 0;

void setup() {
  size(600, 600);
  setupSerial();

  fileA = new SoundFile(this, "A.wav");
  fileA.rate(0.18);

  fileB = new SoundFile(this, "B.wav");
  fileB.rate(0.18);

  fileC = new SoundFile(this, "C.wav");
  fileC.rate(0.18);

  fileD = new SoundFile(this, "D.wav");
  fileD.rate(0.18);

  fileE = new SoundFile(this, "E.wav");
  fileE.rate(0.18);

  fileF = new SoundFile(this, "F.wav");
  fileF.rate(0.18);

  fileG = new SoundFile(this, "G.wav");
  fileG.rate(0.18);

  fileH = new SoundFile(this, "H.wav");
  fileH.rate(0.18);

  fileI = new SoundFile(this, "I.wav");
  fileI.rate(0.18);

  fileJ = new SoundFile(this, "J.wav");
  fileJ.rate(0.18);

  fileK = new SoundFile(this, "K.wav");
  fileK.rate(0.18);

  fileL = new SoundFile(this, "L.wav");
  fileL.rate(0.18);

  fileM = new SoundFile(this, "M.wav");
  fileM.rate(0.18);

  fileN = new SoundFile(this, "N.wav");
  fileN.rate(0.18);

  fileO = new SoundFile(this, "O.wav");
  fileO.rate(0.18);

  fileP = new SoundFile(this, "P.wav");
  fileP.rate(0.18);

  fileQ = new SoundFile(this, "Q.wav");
  fileQ.rate(0.18);

  fileR = new SoundFile(this, "R.wav");
  fileR.rate(0.18);

  fileS = new SoundFile(this, "S.wav");
  fileS.rate(0.18);

  fileT = new SoundFile(this, "T.wav");
  fileT.rate(0.18);

  fileU = new SoundFile(this, "U.wav");
  fileU.rate(0.18);

  fileV = new SoundFile(this, "V.wav");
  fileV.rate(0.18);

  fileW = new SoundFile(this, "W.wav");
  fileW.rate(0.18);

  fileX = new SoundFile(this, "X.wav");
  fileX.rate(0.18);

  fileY = new SoundFile(this, "Y.wav");
  fileY.rate(0.18);

  fileZ = new SoundFile(this, "Z.wav");
  fileZ.rate(0.18);

  fileSpace = new SoundFile(this, "s2.mp3");

  filePeriod = new SoundFile(this, "p1.mp3");
}


void draw() {
  updateSerial();
  //printArray(sensorValues);

  x = sensorValues[0];
  y = sensorValues[1];
  z = sensorValues[2];
  ax = x - px;
  ay = y - py;
  az = z - pz;
  px = x;
  py = y;
  pz = z;

  background(0);
  fill(255);
  textSize(60);
  text(interval, 500, (30+355)/4+20);
  textSize(90);
  text(di, 505, 310);
  textSize(30);
  text("A  |  B  |  C  |  D  |  E  |  F  |  G  |  H  |  I", 10, 30+380+50+3);
  //text("--------------------------------------------", 0, 45+380+50);
  textSize(20);
  text("↑↑↑ | ↑↑↓   | ↑↑←  |  ↑↓↑   | ↑↓↓  | ↑↓←  | ↑←↑  | ↑←↓   | ↑←←", 10, 55+380+50);
  textSize(30);
  text("J   |  K  |  L  |  M  |  N |  O  |  P  |  Q  |  R", 10, 85+380+50+3);
  //text("--------------------------------------------", 0, 100+380+50);
  textSize(20);
  text("↓↑↑ | ↓↑↓   | ↓↑←  |  ↓↓↑   | ↓↓↓  | ↓↓←  | ↓←↑  | ↓←↓   | ↓←←", 10, 110+380+50);
  textSize(30);
  text("S  |  T  |  U  |  V  |  W |  X  |  Y  |  Z   |  .", 12, 140+380+50+3);
  //text("--------------------------------------------", 0, 155+380+50);
  textSize(20);
  text("←↑↑ | ←↑↓  | ←↑← |  ←↓↑  | ←↓↓ | ←↓← | ←←↑ |  ←←↓ |←←←", 0, 165+380+50);
  textSize(30);
  text("--------------------------------------------", 0, 30+380+30);
  text("--------------------------------------------", 0, 55+380+50+15);
  text("--------------------------------------------", 0, 110+380+50+15);
  textSize(35);
  text("Space: →", 230, 30+380+8);

  stroke(255);
  strokeWeight(2);
  line(0, 30+355, 600, 30+355);
  line(480, 0, 480, 30+355);
  line(480, (30+355)/2, 600, (30+355)/2);



  if (abs(ax) > abs(ay)) {
    if (abs(ax) > abs(az)) {
      ay = 0;
      az = 0;
    } else {
      ax = 0;
      ay = 0;
    }
  } else {
    if (abs(ay) > abs(az)) {
      ax = 0;
      az = 0;
    } else {
      ax = 0;
      ay = 0;
    }
  }


  /*State:
   up = 1;
   down = 2;
   left = 3;
   right = 4
   */

  int faz = azf[i];
  int fax = axf[i];

  if (interval > 0) {
    interval--;
    // not ready yet!
  } else {
    // do something!
    if (az > 50 || az < -50 ||ax > 50 ||ax < -50 ) {
      shaked = true;
      if (faz > 50) {
        //println("down");
        di = "↓";
        state3 = state2;
        state2 = state1;
        state1 = 2;
        printed = false;
        interval = MAX_INTERVAL;
      } else if (faz < -50) {
        //println("up");
        di = "↑";
        state3 = state2;
        state2 = state1;
        state1 = 1;
        printed = false;
        interval = MAX_INTERVAL;
      } else if (fax > 50) {
        //println("right");
        di = "→";
        state3 = state2;
        state2 = state1;
        state1 = 4;
        printed = false;
        interval = MAX_INTERVAL;
      } else if (fax < -50) {
        //println("left");
        di = "←";
        state3 = state2;
        state2 = state1;
        state1 = 3;
        printed = false;
        interval = MAX_INTERVAL;
      }
    }
  }



  if (state3 == 1 && state2 == 1 && state1 == 1 && printed == false ) {
    ch = ch + "a";
    fileA.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 1 && state1 == 2 && printed == false) {
    ch = ch + "b";
    fileB.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 1 && state1 == 3 && printed == false) {
    ch = ch + "c";
    fileC.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 2 && state1 == 1 && printed == false) {
    ch =ch +  "d";
    fileD.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 2 && state1 == 2 && printed == false) {
    ch = ch + "e";
    fileE.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 2 && state1 == 3 && printed == false) {
    ch = ch + "f";
    fileE.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 3 && state1 == 1 && printed == false) {
    ch = ch + "g";
    fileG.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 3 && state1 == 2 && printed == false) {
    ch = ch + "h";
    fileH.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 1 && state2 == 3 && state1 == 3 && printed == false) {
    ch = ch + "i";
    fileI.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 2 && state2 == 1 && state1 == 1 && printed == false) {
    ch = ch + "j";
    fileJ.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 2 && state2 == 1 && state1 == 2 && printed == false) {
    ch = ch + "k";
    fileK.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 2 && state2 == 1 && state1 == 3 && printed == false) {
    ch = ch + "l";
    fileL.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 2 && state2 == 2 && state1 == 1 && printed == false) {
    ch = ch + "m";
    fileM.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 2 && state2 == 2 && state1 == 2 && printed == false) {
    ch = ch + "n";
    fileN.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 2 && state2 == 2 && state1 == 3 && printed == false) {
    ch = ch + "o";
    fileO.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 2 && state2 == 3 && state1 == 1 && printed == false) {
    ch = ch + "p";
    fileP.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 2 && state2 == 3 && state1 == 2 && printed == false) {
    ch = ch + "q";
    fileQ.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 2 && state2 == 3 && state1 == 3 && printed == false) {
    ch = ch + "r";
    fileR.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 3 && state2 == 1 && state1 == 1 && printed == false) {
    ch = ch + "s";
    fileS.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 3 && state2 == 1 && state1 == 2 && printed == false) {
    ch = ch + "t";
    fileT.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 3 && state2 == 1 && state1 == 3 && printed == false) {
    ch = ch + "u";
    fileU.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 3 && state2 == 2 && state1 == 1 && printed == false) {
    ch = ch + "v";
    fileV.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else  if (state3 == 3 && state2 == 2 && state1 == 2 && printed == false) {
    ch = ch + "w";
    fileW.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 3 && state2 == 2 && state1 == 3 && printed == false) {
    ch = ch + "x";
    fileX.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 3 && state2 == 3 && state1 == 1 && printed == false) {
    ch = ch + "y";
    fileY.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 3 && state2 == 3 && state1 == 2 && printed == false) {
    ch = ch + "z";
    fileZ.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 3 && state2 == 3 && state1 == 3 && printed == false) {
    ch = ch + ".";
    filePeriod.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state1 == 4 && printed == false ) {
    ch = ch + ' ';
    fileSpace.play();
    printed = true;
    state1 = 0;
    state2 = 0;
    state3 = 0;
    i ++;
  } else if (state3 == 0 && state1 != 0 && printed == false && shaked == true) {
    i++;
    shaked = false;
  }

  text(ch, 30, 59);
}





void setupSerial() {
  //printArray(Serial.list());
  myPort = new Serial(this, Serial.list()[ 2 ], 9600);
  myPort.clear();
  myString = myPort.readStringUntil( 10 ); 
  myString = null;
  sensorValues = new int[NUM_OF_VALUES];
}



void updateSerial() {
  while (myPort.available() > 0) {
    myString = myPort.readStringUntil( 10 ); 
    if (myString != null) {
      String[] serialInArray = split(trim(myString), ",");
      if (serialInArray.length == NUM_OF_VALUES) {
        for (int i=0; i<serialInArray.length; i++) {
          sensorValues[i] = int(serialInArray[i]);
        }
      }
    }
  }
}

Response to Moana with sound

This movie actually did not catch me because I cannot really understood its narrative. It jumps from one situation to situation without strong logic and it made less sense for me. However it did created a peaceful and tranquil atmosphere. Because the shoots and frames have a power, which I call, a kind of purity, lively and firm power. The composition of frame is clear and attracting.

I like this dance shoot best. It is a long shoot with background music. The original song recorded from the local people worked very well because I can hear the happiness and joy from the song. The dance is completed by the man and his wife.

First, the emotion and eye connection between the couple are vivid and impressive.  They are better than any other actors’ emotion and facial expression in the films. Second, the gestures and body language are powerful and show the wildness. The long shoot totally focus on the dancing of the couple without any other distractions. The black and white color stand out this kind of purity.

The Kissing Hand (Talking Fab Final) blt277

Team:
Ben Tablada, Ali Fung, Alana Bayarin, Tyler Sparling

Materials:
Xbee’s (x2)
Arduino Uno (x2)
Lily Pad Arduino (x4)
Relay
Pressure Sensor
3.5 Volt Battery
9 Volt Battery
Heating Pad (Hacked)
Wires
Neoprene
Perf Board
Resistor
Alligator Clips
Glove
Elastic
XBee shield

Equipment:
Wire Cutter
Glue Gun
Fabric Scissors
Solder & Soldering Iron
Markers
Needle/Thread

Concept/Background:

The idea for the project came from a memory that Alana had growing up. She spoke about a children’s storybook called “The Kissing Hand” where a mother raccoon would kiss her son’s hand and told him that if he ever felt lonely to place his hand on his cheek to feel his mother’s love. As a team full of very sentimental and overly sweet people, we decided to create something very similar. Something that would allow someone else to feel “loved”. We began to think of long distance relationships and how partners can often find it difficult to communicate or tell their loved one just how much they care when they think of them. As a result, we finalized a concept of two separate items, a glove and some sort of heating device that would allow a long distance couple send love and to feel the warm sensation of “love”. The way it would work is that by kissing the glove, it would send a signal (through wireless communication) to the other item that would then turn on and heat up.

Brainstorming:

The biggest questions we had going into the project was choosing an item that would heat up, how we would make two systems communicate wirelessly, and which sensor we would use to trigger the interaction. For the first problem, we were suggested on using some sort of heating device that is already pre-made, something like a heated blanket or a motor that would heat up. Secondly, wireless communication was something that none of us have ever done before or even attempted. We began looking at Xbee’s which send radio waves and possibly even Bluetooth. Lastly, the team was deciding between infrared, pressure, and even moisture.

Ideation (Phase 1):

Problem 1

To solve our first problem we needed to find an object that we could turn on wirelessly and heat up. There were many potential items/products like heated blankets, pillows, shoes, and etc. After Ali and I decided to take a trip to the nearby mall, we were able to find a stuffed pink flamingo that heats up when plugged in via USB. The stuffed animal had a removable fabric heating pad that could potentially be hacked for later use. So we purchased it and then we finally had the foundational piece of the project.

Drawing

The next step was prototyping the sensor of our choosing. As interesting as the infrared and moisture sensors sounded they both had large drawbacks that we were all hesitant to tackle. The infrared sensor would have to be hacked to through a infrared remote and since we e were already hacking a heated pad, time was our greatest challenge. For the moisture sensor the team was afraid of it mixing anything wet or moist with open wiring and also the sanitation aspect of the sensor also deterred s from using it. Fortunately, Ali and I used pressure sensors for our Touch Project so it was something we were familiar with. We were familiar with how to code it(see Touch Project Codes on Ali’s). Now, instead of coding it to turn on LED strips the pressure sensor, in turn, would turn on the heating pad.

Prototyping Phase 2:

-choosing between Bluetooth and XB

Now we had to decide between the two methods of wireless communication that we discussed in class. Ultimately, the team decided to use Xbee’s as it was the most recommended and the supposed easiest as we were using Lilypad Arduino to move our project to a smaller scale. None of us ever used Xbee’s before or knew how to code it which was the most challenging part of the project. We had to download a separate software that allowed us to communicate with the Xbee’s and program them separately by using a Xbee shield.

-set up & coding + Hacking

The setup and codes were very similar to the touch project’s pressure sensor but this time the heating pad took the place of the LED. We were very lucky that when we opened the wires connecting the pad to the USB it only had two wire connectors, a positive and a negative(ground). This made it easy to connect the pad directly to a breadboard to prototype. We did, however, need a separate power supply for the heating pad and a 9V external battery pack was used to power it. Another thing we had to keep in mind was the amount of current that the pad needed. We ended up having to use a relay to control this and the pad was able to heat up after multiple tries and tweaks within the code. A delay and a line that states how long to keep the pad on for before it turns off completed the prototyping phase of making sure it worked. After creating two separate units with two arduinos, one for the glove with the pressure sensor, and the other with the heating pad we were ready to try and make it wearable by moving to a smaller form factor.

Moving to smaller scale Phase 3:

-lilypad Arduino

To make the units smaller, we wanted to use Lilypad Arduino. We could attach the Xbee’s we were using and still have enough space to move our project onto the body. We later ran into a problem with using the lily pads as we forgot to separately code them. We programmed the Xbee’s but never fully uploaded our codes to the lily pads themselves. Fortunately, Professor Antonius was able to help us determine the issue and move forward with the project.

-soldering

The most time-consuming part of the project was soldering all the pieces together in small lily pads and tiny perf boards. In total we had to use 4 lily pads, 2 for the glove part and 2 for the heating pad. Luckily, I realized that soldering was a surprising skill of mine and the more I did it the more I enjoyed the process. Alana created schematics for the boards before soldering and it made the process much easier.

-perf boards

Assembly Phase 4:

-glove

The second most time-consuming part was now the assembly phase as we had to take all of our parts and figure out how to cohesively put them together. As small as the lily pads were, they were still significantly too bulky to be placed on the outside of the glove. Luckily, we had crafty Alana and Tyler who create a steerage armband that attaches to the wrist on the shape of a heart. The heart-shaped wrist/forearm straps would hold the lilypads, batters, and wiring, and the pressure sensor would have its own place on the front part of the glove. This is the part that was supposed to be kissed, the top of the hand, this way when one touched or grabbed something it would not trigger the pressure sensor.

-backpack

As for the heating pad aspect, we had the original intention of putting it on a stretchable fabric or elastic so the user had the freedom to wrap it on any part of the body and feel the warmth. However, we ran into the same issue of the lily pads, wiring, battery, relay, and etc. to be too clunky to be added solely to the elastic. Alana and Tyler came through again and created a heart-shaped pocket that could be attached to the elastic. I thought it mimicked a backpack-esque design so I thought why not put it all together and add more straps, we might as well make into a wearable and portable heating pack. The design changed so that there were two shoulder straps and a waist strap that attaches the heating pad right on the heart. It made more sense this way as you can still remove or change the battery and it became more wearable overall. We also designed the back by tracing our hands on the back of the backpack just to make it more aesthetically pleasing and tie in the whole concept of the “Kissing Hand’.

User Testing Phase 5:

-how it works

The way it works is the same as the ideation/brainstorming process. By kissing the top of the hand, the Xbee’s would send a wireless signal that turns the heating pad on, thus mimicking the feeling of sending love to one’s partner. The pad required quite a bit of user testing and we also had to make sure it was heating up. A thermometer gun like this one showed it heating up but we also had other people touch the pad to make sure heat was being conducted. You can also take a thermosensitive camera and see how the color changes indicate a change in overall temperature.

-what we could have done better

Antonius suggested painting the heating pad with heat sensitive ink so that it will change color once it begins to heat up. This is something that we could have considered and could have potentially elevated the project. It would have eliminated all the “proof” testing we had to do, had we painted it with the heat-sensitive ink.

How did we work well together?

Amazing! I was so fortunate to have a team that wanted to split the tasks based on our abilities. The workload was doable and we all became closer as the project continued.

Photo Gallery: Coming Soon!

NOC – Final by Bruce

Full presentation (Videos included): noc-final.pptx

Code: https://bl.ocks.org/bruce55/941181c9621fd480e22c5b9eb3ed202e

Live Demo: https://bl.ocks.org/bruce55/raw/941181c9621fd480e22c5b9eb3ed202e

Oh well, an interactive tree.

Based on my previous midterm work, the ripple field now drives all the particles tied to the tree by a weak spring that breaks. No more shiny ripples, but just flying leaves.

The tree itself is also affected by the “wind”, with each joint taking the wind force calculation and a simple vector plus.

I thought I was going to make the tree an object, but I ended up doing something like joint_id.

 

Limited by the performance of canvas drawing (like over 50% of the CPU was used to draw the leaves), I can port the app to OpenFrameworks for better performance.

Final Project: the Story of Sharing an Umbrella

In the final project we made a performance device on the idea of umbrella sharing. It often occurs to us that we don’t have an umbrella with us when it rains; when someone comes up to share an umbrella with us, we often feel like they have lit up our world in sunshine!!:) Yet this warm, happy and super grateful feeling sometimes goes beyond word. So this is how we may express it out: we truly create lights and natural songs to the person^^

So this is how the performance actually turns out:

  1. You need to wear the special earmuff.
  2. When your generous friend carries the umbrella to us and put the umbrella above your head, the lights around the umbrella will turn up! What’s more, the original sound of the rain will turn into the sound of birds’ singing!
  3. Enjoy the love of generosity with your friend together!!
  4. see the video here: https://www.youtube.com/watch?v=PDz1V7fWZ38

How we come up with the idea:

It is quite a struggle to come up with the idea of the performance actually. Scroll down to see our three versions:)

  • Version 1.0:

Carol came up with the idea that the umbrella can project the weather of the day. if it is sunny, the umbrella will project the sunny scene onto the ground; if it is rainy, the umbrella will project the raining scene.

Drawbacks of this idea: we may not be able to find the proper projector that can hang over on top; it is hard to figure out how to detect the weather in the most appropriate manner;

  • Version 2.0:

We thought about making the umbrella like a hat that can be worn on the head. When one person notes that it is raining, he or she can send a signal to the surrounding umbrellas, so that all the other umbrellas will open.

Drawbacks of this idea: we find it really hard to work out the mechanics of opening up an umbrella automatically, the professor also told us that incorporating mechanical devices can be super time-consuming;

  • Version 3.0:

We come to the final version of the sharing umbrella idea:) at first it was a rough idea about sharing an umbrella and some effects will happen. Cheryl wants to use the distance sensor to create the sensing part and Carol wants to use processing for the effect. Ines and I thought the lighting effect will make the performance really beautiful so we are happy with the idea as well.

 

 

How we finalize the idea in terms of materials we want to use:

for the fabrication part, Ines and I gathered together to draw a draft for our design.

for the earmuff, I proposed we make the sensing device on top of our head since that is the most usual place to sense the umbrella and have less chances to receive disturbing signals. I was orginally considering earphones, and Ines proposed the idea of earmuffs, which is really nice and suitable for winter in particular:)

We though we would go online and buy an earmuff and sew circuit onto it. Because the band is really thin, I was worried whether it could hold the entire circuit. Ines said we could use the to ear parts to hold the arduino and use hard wires over the band. We didn’t use conductive thread because the thinness of the band can easily cause collision between the threads and generated short circuit. The final version is below:

  1. the two earmuffs respectively hold the microcontroller and the battery
  2. the distance sensor will be on top of the earmuff at the middle of the band
  3. the wires from the distance sensor to the arduino will be on top of the band; the wires from the arduino to the battery will go underneath the band; we will cover the circuit with fabric at last.

for the umbrella, we were originally thinking of using christmas lights, sticking them along all the supporting structures of the umbrella to make it very shiny. However on the thursday class, we realized its challenges: first, the christmas lights online cannot be connected to the arduino; second, the LED strips require greater power and need to be plugged into the wall. We want the umbrella to be movable and flexible, so we have to give up using either the material and return to the most basic plan of connecting each LED light into a circuit and use a battery to light them up. Because of this, we reduced the amount of lights we originally planned to use, only attaching 8 lights to each tip of the umbrella.

How we carry out what we planned:

  • The umbrella part:

We started with the umbrella. Ines brought her umbrella and I started working on it first. After talking with Nicholas, I realized the 5v battery will not be able to light up 8 LEDs if we put them in series. Nicholas suggested I use a transistor and plug the power in vin pin. In this way, the light still gets the larger voltage power while the arduino can still function in 5v. The only thing I needed was to write a simple code for the micro-controller.

As I was borrowing the equipment, Jingyi offers me another option: instead of connecting eight LED lights in series, I can connect four LEDs in a series and put the two sets in parallel. I borrowed the circuits and first prototyped them on a breadboard. I wrote the code as well following the example on the website. I put the transistor in series with the two sets of LEDs acting as a switch, so that only when the arduino send a signal to the transistor that the transistor will function and pass the circuit through onto LEDs. For prototyping I set the transistor as always HIGH.

 

After putting things together, I was happy to find that the circuit worked! All the lights lit up. Ines came to work together with me at this point, and we soldered the two sets of series circuits. I was not free after that so I drew the circuitry to Ines to let her know how to move to the next step.

 

The next morning when we gathered together for class, however, Ines told me that the circuit didn’t work. She told me that for each series, the first LED light will be super bright but the rest of the LEDs turns dimmer and dimmer and the last one didn’t light up. I was confused because on the breadboard it definitely worked. Reflecting back on it I think it can be because of the wires that connect the LEDs together have resistance that consumes part of the voltage, while on the breadboard the LEDs are closer to each other and the overall voltage loss was not as much.

But any way, so we decided to desolder all the circuits we had done the other day and returned to very basic plan of putting every LED in parallel with the other. We redesigned the way we wanted the circuit to situate on the umbrella as well.

  1. The black (negative) wires of two neighbor LEDs will first be respectively connected to resistors, then the ends (negative) connected together; we will have four sets of negative wires in total; we further soldered the four sets into on set and connect them to GND pin.
  2. all the blue-end wires (positive) of the LEDs will separately go into the digital pin 2–9.

We were cooperating really nicely! Ines cut and stripped the wires and I soldered them together; sometimes we switched work, but we finished almost all the circuitry on the umbrella by the end of the class! I stayed on for a while to cover all the connecting joints with dusk tapes (Antonius told me that can help prevent short circuit given that we had many joint parts). Ines went in the evening to linearize all the wires, glued the LEDs tightly to the tips and covered all the wires with black tape. That night Ines also soldered wires onto the bluttooth connectors (whose pins were really close to each other) and plug it into the Arduino pin as well.

  • The Earmuff part:

The Earmuff part is giving us the most trouble~

First, the code did not work for a really long time. At one point Carol was really depressed given that she also had her other projects undone as well. There is also one point where the fellow told us that we couldn’t use the original coding model and need to use serial communication. When Carol was away with Laser cutting I tried to learn serial communication from Nicholas but ended up unable to work out the code neither. Carol came back later and the coded worked at one point. But it soon didn’t work again. We were at the bottleneck not knowing how to tackle the problem until Carol suddenly realized there was one sentence that was changed into explanation when she was asking help from a fellow and didn’t change it back. We were so relieved at that point and glad to see that the circuit finally worked, even though it could be not sensitive at some point.

It was Friday but the IMA faculties generously elongated the open time to 9 o’clock. Ines and I immediately started working on the circuitry after the coding part was set. Ines knew the structure of the circuit on the earmuff better so I basically followed her instructions to solder things together, and she further connected the spare parts into a complete circuit. Again, what causes us the most trouble are the connectors of the Bluetooth and the distance senor, because the four pins were super close and we were afraid we would create a short circuit. also it is very hard to solder the wires very solidly to the pins and we redid the soldering multiple times as we were connecting the circuits. Some parts of the connection we needed to solder close to the fabric because the wires were attached. Although we could not use the helping hands, Ines and I worked together to finished the soldering. As we have planned:

  1. the above circuit connected the distance sensor in the middle downward to the arduino
  2. the bluetooth is atached to the connector and connected to the arduino; the bluetooth will be hidden inside the earmuffs together with the arduino
  3. the battery will be hidden on the other earmuffs and the wires connecting it to the arduino will go underneath the band.

So we finished the circuitry. Since Ines was doing most of the fabric work on the umbrella to cover everything, I proposed to do the covering job on the earmuff. I first overed the two bands with a double-folded green fabric. I used the back stitch to close the two ends and the running stitch to close the two sides.

For the distance sensor covering, I initially thought about making a heart shape but then switched to making a raindrop. I used the scissor to cut open the two holes for the sensor part and used a running stitch to close the two pieces of fabric. In order to make the fabric stand and to protect the wires within, I rolled newspaper pieces inside before completing the final stitches.

On top of the rain drop I initially planned to sew the word “RAIN”, but messed up at almost the end of the sewing–some threads got entangled, and since the general fabric was already closed, I couldn’t flip it over and linearize the entangled part. To cover the undone words, I used a green fabric on top and sewed using a running stitch. So interesting that the rain drop has a green smile now haha.

We originally were thinking of filming together in the afternoon. But as we gathered, the code didn’t work again. Cheryl was at work this time, and it seemed the code has also changed a bit. Ines and I were also in the lab for support, and at some points, the Bluetooth connector had some of the pins disconnected to the wires again. We had to go back and re-soldered the pin to the wire for a couple of times.

When we thought it would work and borrowed the umbrella, the sensors became insensitive again. After consulting with Antonius, Cheryl told us it was the battery running out on the earmuff. We went to change the battery and then the bluetooth pins fell off again. We had to resolder. Thinking back on these small instances clustering all together that Monday, it was really a long and hard fight for all of us, but rewarding as well!!:)

We finally filmed the video and you may watch it here again:

What is the mechanism:

In the beginning I described the mechanism from an experiential perspective. Here I want to elaborate more on the mechanical principles:

  1. the distance sensor would sense the umbrella when it is close on top of the two round sensing parts; the arduino will receive the signal from the distance sensor and send a signal to the computer via bluetooth.
  2. the computer when receiving the signal will activate the processing. The sound will change from the rain to the bird’s singing.
  3. The processing will at the same time send a signal to the other arduino on the umbrella.
  4. The bluetooth on the umbrella will receive the signal from the computer and send a signal to activate the lights. The LED lights on the umbrella will light up.
  5. once the umbrella is removed from the head, the distance sensor does not send signals to the computer and step 2–4 will not be triggered. the sound switches back to the rain, the LED lights turn off.

What we have learned from this project:

  1. Group work is challenging but also inspiring and gave each one of us a lot of support! So much work I couldn’t have done without Ines’ support.
  2. Be ready for changing the plans and sometimes starting from scratch; the umbrella circuitry was upsetting for me and Ines, but we were working together to re-form the circuitry together.
  3. Be patient and supportive! The Monday drama just made me realize how accidents and emergencies can occur at any time, but it’s ok:) although we both didn’t know much about the code, we were happy that we were there to accompany Cheryl and Carol go through their dramas and frustrations:)

What we can improve next time:

  1. we may probably anticipate situations like the resistance better next time when building the circuit; this time the umbrella circuit connection gives us a better sense of how to guarantee that there is enough voltage;
  2. we may want to also taped the joints that were more easy to break, such as the bluetooth connection joints; this is something I am still unsure about how to prevent from happening, since the taping can also be hard given the closeness of the pins against each other.
  3. I should be more organized in sewing fabrics and think before hand what to sew first. If I sewed the letters before closing the two general fabrics, it would be much easier for me to redo the stitches instead of having to cover it with a new fabric.

Where to move on from this project:

  1. getting rid of the computer!! This was something I came to realize at the IMA show when people were asking whether we could use it without the computer.
  2. turning earmuffs into earphones!! This is closely connected to the first point, for if we are able to create the sound from the devise itself, we could totally get rid of the computer as actually an intermediate audio player:)
  3. use stronger and more durable batteries!! This time batteries run out really quickly and can cheat us into thinking that it was the problem of the code or the connection that prevent the device from working. We could maybe use a solar battery so that it could always be recharged when it is sunny?

Overall, I love our project and my team!! Good Job for all of us!!

//from arduino to processing

int echoPin = 7;
int trigPin = 8;
int sendingValue;

int maximumRange = 255;
int minimumRange = 0;
long duration, distance;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);

  distance = 255 - duration / 10;

  if (distance < maximumRange && distance > minimumRange) {
    // only for debug
    //Serial.println(distance);
    Serial.write(distance); // bytes (0-255)
  }

  // sendingValue = 255 - analogRead(sensorPin)/4;
  // Serial.write(sendingValue);
  delay(50);
}

//from processing to arduino

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;

int incomingValue;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  while (Serial.available()) {
    incomingValue = Serial.read();
    analogWrite(led1, incomingValue);
    analogWrite(led2, incomingValue);
    analogWrite(led3, incomingValue);
    analogWrite(led4, incomingValue);
    analogWrite(led5, incomingValue);
    analogWrite(led6, incomingValue);
    analogWrite(led7, incomingValue);
    analogWrite(led8, incomingValue);
    
  }

 // analogWrite(outPin,0);
  delay(2);
}

import processing.serial.*; //library for serial communication
import processing.sound.*;
Serial firstArduinoPort; //creates object "firstArduinoPort" of serial class
Serial secondArduinoPort;//creates object "secondArduinoPort" of serial class
SoundFile file1;
SoundFile file2;

boolean file1Playing = true;
boolean file2Playing = false;

int distanceState = 0;



//==================================================================
void setup() 
{
  println(Serial.list()); //prints a list of open ports use this to doublecheck which port is which
  //also make sure to assign correct boud rate
  //initialize serials  
  firstArduinoPort = new Serial(this, Serial.list()[1], 9600); 
  secondArduinoPort = new Serial(this, Serial.list()[2], 9600); 
  file1 = new SoundFile(this, "rain.wav");
  file2 = new SoundFile(this, "sunny.wav");
  file1.play();
}


//==================================================================
void draw()
{
  // if not reading anything than led does not blink
  distanceState = 0;  
  secondArduinoPort.write(distanceState);

  while (firstArduinoPort.available()> 0 ) {
    distanceState = firstArduinoPort.read();
    println(distanceState);
    secondArduinoPort.write(distanceState);
    // for(distanceState++){
    // file2.amp();
    // }
//    /*
    if (distanceState > 100) {
      if (file2Playing == false) {
        //println("stop playing");
        file1.stop();//rain
        file1Playing = false;
        file2.play(); //sunny
        file2Playing = true;
      }
    } else {
      if (file1Playing == false) {
        file2.stop();//rain
        file2Playing = false;
        file1.play(); //sunny
        file1Playing = true;
      }
    }
//    */
    
   // println("file 1 playing: "+file1Playing);
    //println("file 2 playing: "+file2Playing);
  }
}

Weekly: Final Project Documentation[Eden&Patricia](Cici&Alvin)

Our final project is called Sleepless Diner in Shanghai(浅夜食堂 in Chinese). We do this project because Patricia and I are all big fan of eating and we want to make such a food blog for those who want to eat outside late in Shanghai. The idea of our title and style are basically came from the TV drama called “Midnight Diner” and also the English name is from the movie “Sleepless in Seattle”. Because I like to enjoy the silent moment of the midnight when eating while Patricia prefers to eat together with friend in a active atmosphere. So we decide to provide different places with two types pf atmosphere for different people.

Here’s a draft drawn by me:

Processed with Rookie Cam

 

It is a draft for our website. We devide the index into two parts—Eat alone and eat together(一人食&友人食 in Chinese). Combined with the experiences of making a map in the comic project with France, I decided to make a map inside each of the sections. And for the outface of the webpages inside, we decided to make it just like the food blogs online. However, contains many interactive functions witch makes users more convinient to see the features of the restaurants. 

We decides to add 10 restaurants inside at the first place but it turned out to be too much for us to do so we adapted it to 9. We go to 4 of the restaurants ourselves and shot and recorded the videos of the deshes. Then I designed the basic layout of our webpages and draw the title page on PS while Patricia fixed our photos and editted our vlogs. Finally we put the pictures, videos, and texts into the webpages. I also added beautiful background patterns and background music that matched to the restaurants’s atmospheres to our pages.

The last step we did is add many funny functions to the Eat Together section. Such as hover to show the videos of hotpot:

So here’s our final project! Throught extremely hard work we finally matches our expectations. You can find that our product is just like the thing on the draft!