Assignment 3c: Intention of Research on Cellular Squirrel

The researchers argues that while the cellular phone get a phone call, the response of it would disturb people during meeting or communication, what’s more, this is a response that out of our natural environment. Therefore, the Cellular Squirrel is a toy squirrel that contain a cellphone inside. It replace the ringtones by the physical movement. This cellular squirrel make the communication smooth and nature.

Final Project: Running Fish-Lazy!

Name: Yun Huang

Date: May 19

Background story: 

Lazy a fish that living in human world. He loves human he hopes he can live and work like a normal human. He has a job in a company, he loves his job bur he always be late for his work because he doesn’t has legs, he can’t run or take any vehicle to the company. He is very upset about it and one day he make a promise to a witch that he will work hard during  his whole life if the with can give him hands and legs. The witch accept it and gives him legs and hands. So our Lazy was so excited and work very hard in his whole life. What’s more, he always can’t wait to go to job, so he is running in is way to work! If someone block his way to work, he always shout “Go away! I need work!!”

Emotion to transmit:

The main emotion I would like to transmit is Lazy’s enthusiasm and anxiety for his job. Even Lazy is a fish, he is very hardworking and loving his life. However, many young people do not like their job nowadays, they don’t have enthusiasm their job and life. I hope my audience could be inspired by Lazy, I hope our young people can learn something form Lazy: a fish can try his best for his job, why can’t we!?

Building Processing:

My design: This project is inspired by a Japanese fish character. The fish is very lazy and do not want to move. For my project, I want to make my fish run and hardworking.

timg-2

My sketch:

FullSizeRender

There are mainly three four for my Lazy to move: his mouth, his legs, his hands, and a sensor. I will document they separately:

Mouth: I hope the movement of Lazy’s mouth could be very obviously, so I decide to attach the servo on his mouth directly. First of all, I make a hole by scissors, And I make the servo attach on the original cloth that I cut form the stuffed toy. However, the cloth is so soft that the servo can only move a part of his mouth. Then I change the cloth into the cardboard. Fish has pointed mouth, therefore, I make two triangular cardboard as his mouth. Therefore, the servo can move the whole mouth that the movement could be obviously. What’s more, after I get the feedback from Rudy, I decide to use plasticine made lip for him, the lip can hide the cardboard,which make him more active and cuter.

IMG_7825IMG_7910

Backbone: the movement of my fish would be very big, therefore, I need to make a strong backbone that ensure my fish would be stable when he is running. therefore, I use the most thickest wire and fixed band to make his backbone. What make it difficult is I need to make sure the backbone should be perfectly match to my stuffed toy. After inspired by Rudy, I use four Splint to stick the two servos on the backbone. IMG_7831 3

Hands, Legs: Hands and Legs are the main part of my project. Because running is the only movement of Lazy, therefore, I decide to make the hands fixed but make the legs moveable. After do some research of human movement, especially the running movement, I decide to make them like this:

IMG_7924

Because I have to shape them by myself, I decide to use the instamorph to make the hands and legs. The product of the first try was too heavy, the servo do not have enough power to drive it, so I make the hands and legs smaller and lighter at the second time.  The connection between his thigh and shank is movable. Therefore, when the servo driving his thigh, his shank would be driven by the thigh.

 

Sensor: I hope my fish could sense people while they are getting closer to Lazy. In order to not damage the appearance of my fish, I decide to make a crown for him and hide the sensor inside. then I sew in on Lazy’s head. This is the first time I do the sewing work. It’s very hard but interesting.

IMG_7884

The last thing I need to do is to put the batteries pats and the Romeo into his belly, I hope my audience do not see the wires and Romeo when they are enjoying Lazy’s preform.

Interaction: There are tow interaction between Lazy and his audience.

1. while the audience get closer to him, he will sense the audience and start running. What’s more, his will keep on shout that “Go away! I need my job! I love my job!”

2.Lazy would ask the audience that “Hey boss, When should I go to job?” Then the audience can type a working time to him on the processing. Lazy would star calculating, if the current time is earlier than the input time, Lazy will starts running to his job, if the current time is later then the input time, the fish will keeps stay.

IMG_7925

What I have learnt:

1. How to use the  instamorph.

2. How to use lp5messagebox on the processing.

3.Start working as early as possible!

4.Use the glue gun carefully!! Use the glue gun carefully!! Use the glue gun carefully!!

Conclusion:

This is really a project that make me learn and think. This is the first time for me to make my own puppet, I am very excited that my fish is such popular during the IMA show. I hope Lazy could bring more people pleasure and encouragement.

 

Arduino:
#include <Servo.h>
char val; 
Servo myservo1; //hands
Servo myservo2;
Servo myservo3; //mouth
Servo myservo4; //legs
Servo myservo5;

int valueFromProcessing;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  myservo1.attach(9);
  myservo2.attach(10);
  myservo3.attach(11);
  myservo4.attach(5);
  myservo5.attach(6);
  myservo1.write(90);
  myservo2.write(90);
  myservo3.write(0);
  myservo4.write(90);
  myservo5.write(90);
}

void loop() {
  int sensorValue = analogRead(A0);
  //  Serial.write(sensorValue);

  // get message from processing
  while (Serial.available()) { // If data is available to read,
    val = Serial.read(); // read it and store it in val
  }
  if (sensorValue > 300 || val == 'R') {
    runing();
    //Serial.println(sensorValue);
    //Serial.println(0);
  } else if ( sensorValue < 300 || val == 'S') {
    stay();
    //Serial.println(sensorValue);
  }
}

void runing() {
  myservo1. write(90);
  myservo2. write(90);
  myservo4. write(90);
  myservo5. write(90);
  myservo3. write(120);
  delay(250);

  myservo1. write(180);
  myservo2. write(180);
  myservo4. write(180);
  myservo5. write(180);
  myservo3. write(0);
  delay(250);

  myservo1. write(0);
  myservo2. write(0);
  myservo4. write(0);
  myservo5. write(0);
  myservo3. write(120);
  delay(250);

  myservo1. write(180);
  myservo2. write(180);
  myservo4. write(180);
  myservo5. write(180);
  myservo3. write(0);
  delay(250);

  myservo1. write(0);
  myservo2. write(0);
  myservo4. write(0);
  myservo5. write(0);
  myservo3. write(120);
  delay(250);



}

void stay() {
  myservo1. write(90);
  myservo2. write(90);
  myservo4. write(90);
  myservo5. write(90);
}

Processing:
import processing.serial.*;
import controlP5.*;
import processing.opengl.*;
import processing.sound.*;
SoundFile soundfileA, soundfileB;


Serial myPort;  // Create object from Serial class
int val;        // Data received from the serial port
int timer = 0;

void setup() {
  size(640, 480, P3D);
  noStroke();
  setupControlP5();

  printArray(Serial.list());
  //String portName = Serial.list()[79];
  //myPort = new Serial(this, portName, 9600);
}
void draw() {
  messageBox();
  int inputTime = 60 * h + m;
  //println("start to work at: " + inputTime);
  int time = 60 * hour() + minute();
  //println("now: " + time);
  if (inputTime > time) {// not late
    //send data 'S'
    //myPort.write('S');
    println("S");
  } else {//late
    //send data 'R'
    if (timer++ < 1000) {
      //myPort.write('R');

      println("R");
    } else {
      timer = 0;
      inputTime = 0;
    }
  }
}
   String[] inputTimeStr = split(messageBoxString, ":");
    h = Integer.parseInt(inputTimeStr[0]);
    m = Integer.parseInt(inputTimeStr[1]);
  }
}


// function buttonCancel will be triggered when pressing
// the Cancel button of the messageBox.
void buttonCancel(int theValue) {
  println("a button event from button Cancel.");
  messageBoxResult = theValue;
  messageBox.hide();
}

// inputbox is called whenever RETURN has been pressed 
// in textfield-controller inputbox 
void inputbox(String theString) {
  println("got something from the inputbox : "+theString);
  messageBoxString = theString;
  messageBox.hide();
}

Animatronics Final Project:Snowman Olaf

Name:Jiayun Qu

Date:May 18

 

The slides of my presentation can be accessed here.

 

Background story:

Initially, Olaf is the snowman character in the movie Frozen, who represents the innocent love and pure joy between Anna and Elsa. Olaf accompanied Anna to find her sister Elsa after Elsa applied the super power and left. During the process, he was always optimistic and happy.

After getting the feedbacks from classmates and professor, I decided to recreate the character and rebuild it in NYU Shanghai. Olaf is a snowman that loves snow. However, when he came to NYU Shanghai, he saw students struggling a lot during finals. They always study inside the Academic Building without realizing how nice the weather is outside. Therefore, Olaf felt it a pity and wanted to encourage the students to here to look forward to the summer as he does.

 

Emotions to Transmit:

Snow will melt in summer but Olaf is a special character that loves summer. The emotions that I want to transmit from Olaf is happiness, optimism and encouragement. He acts as a character that can remind people of the approaching of summer and relieve students’ stress during the finals to some extent. When you talk to Olaf, he will make you think of the summer weather with his moves and words.

 

Building Process:

I spent a lot of time on building the entire structure of Olaf, and experimented many different materials. I went through the process of sketching – building the metal wire – stuffing the inside with paper – using foam to cover the outside – using cotton to cover the foam. And during the process, I managed to put in servos and thought of ways to not disturb the movement of the servos. The followings are the pictures to show my building process:

 

IMG_2460

I used metal mire to build the skeleton

IMG_2652

In the upper body part, I attached two servos to control the arms. I used foam to cover the lower body and there’s paper inside

IMG_2653

I use cotton to cover the foam layer to make it look cuter and more like snow IMG_2664

^Iteration for the upper body

IMG_2666IMG_2667

In order not to disturb the servos moving, I covered the metal wire with a layer of paper and then used the foam to cover.

IMG_2671 IMG_2673

Left: The body part was covered with cotton as well Right: Attached the head part on the body

IMG_2677 IMG_2684

Left: Attached the eyelid on the head Right: Attached the eye, and covered the head with paper

IMG_2686

similarly, I used a layer of paper to cover the head => two servos attached on the head

IMG_2683

I made the snowman elements: nose, buttons, eyes, eyebrows, hair with instamorph and colored them with paint

IMG_2691 IMG_2694

left:cover the head with paper right: connecting it to the arduino

IMG_2696 IMG_2697

left: use foam to cover the head right: use cotton to cover the head and added the elements made by instamorph

IMG_2701 IMG_2706

left: drew pieces of wooden like arms and glued them to the body right: built the stage and the nyush flag + sun

 

Technology / Interaction:

Hardware: I used Arduino and 4 servos to control the movement. Two servos are attached to the arms and they will move at the same pace. I got this suggestion from the dancing man assignment, so that it moves more humanlike. One servo is attached to the mouth and the other one is attached to the eyelid as if it is blinking.

Software: I used processing to make a small question set for the audience to interact with the character. And I used the beat detecting to control the servos. I realized that the beat detecting functions don’t really fulfil my purpose because the song that I chose doesn’t have strong beats so the movement aren’t very obvious. Especially, the mouth and eyelid move very subtly.

Interaction: The user will answer the questions that Olaf raised. And after they answer all the questions, Olaf will reply and dance to the music. Below is the demo video: (the servos attached to the mouth and eyelid are moving but very subtly. You may not see the eyes from this angle, so please refer to the pictures above)

 

Conclusion:

Difficulty: The first difficulty that I met is the building process because I have to build up the entire body structure, including the body parts and the head part. The process is iterated and really takes time and efforts. The second difficulty is the body structure. Every body part is related with each other, so I really need to think of how each part is built on one another and the mechanism of the movements. Therefore, if one part of the body structure were built wrongly, it would make it harder for me to keep building the body. Lastly, the time was also limited for me to so many things, so I really had to make the best use of the time and think of the timeline carefully.

Takeaway: Though the process is quite difficulty, I learned a lot and gained many takeaways. Firstly, start early and draw all the designs in advance. I think it is important to plan the entire body structure including where to put the servos. Then later on,  I can try the designs and iterate for several times to see whether the design works or not. Also, because the time is limited, starting earlier is always a wise decision because you never know what will happen in between. Secondly, I got the opportunity to explore and experiment different materials, including the foam, cutton, paint, instamorph, face snow, etc. Because of the experiments, I can now understand how the materials will work and their features. Lastly, getting feedbacks from others or seeking help from others are quite essential as well. Feedbacks helped me improve my ideas so that I could make quick adjustments.

 

 

Alicja’s Final Project: Fede, Pingu’s Friend

My presentation can be accessed here: https://docs.google.com/presentation/d/1AVvi2XhT0bkWxeg8-dboIzKY06iUXNZF640Hh83m_Gc/edit?usp=sharing

Since almost all of my assignments for this class shared a penguin theme, I decided to construct a penguin again. This time, however, I focused on the wing movement – I wanted to make it seem organic and to be able to express emotions through it.

Step 1. Design

I started my drafting process thinking I would create a figure that would be more furby-like in shape:

PINGWIN1 PINGWIN3

However, as I received feedback about these sketches, I quickly drew a new design that would emphasize the wings more, since they were supposed to be the main focus of my project:

DSC_1273

Step 2. Wing Mechanism

My idea first was to work with three servos mounted in parallel:

DSC_1274

I thought that, as each of the three parts of the wing could move separately, I would be able to control the wing movement extremely precisely with this structure. I started by hot-gluing the servos onto a plastic board and attaching metal plates to their arms. Joints were tightened with a rubber band:

DSC_1151DSC_1148

*Tip: To make the servos stick well to the board, I filled the holes on the bottom of the board with hot glue as well.

After I had this structure built, I plugged it into an external power supply and controlled it with my Arduino. While I was happy with the degree of control this set-up gave me, I quickly found that the metal plates were too rigid:

To fix this problem, my professor, Rudi, suggested using carbon fiber instead of metal plates. Following his advice, I built my second iteration, still using rubber bands as joints:

DSC_1157

This material worked much better as it came to quickly and smoothly moving the tip of the wing:

However, when I dressed this structure in fabric, I was disappointed to find that the material obstructed the movement:

DSC_1161

It was time, then, to come up with a new mechanism, one that would not involve the wings changing their thickness with movement. The professor, Rudi, came to the rescue once again and shared with me the concept of a fishing rod-like structure:

DSC_1163

The idea was that by pulling a string attached to the end of a thin carbon fiber stick, I would be able bend the wing, moving its tip upwards or downwards, depending on whether the string went up the top or the bottom of the carbon fiber: Video 1

This worked, but not perfectly, because a lot of force needed to be used to bend the central “bone.” I realized, however, that this can be fixed by adding one more point which stabilized the string: Video 2

DSC_1176 DSC_1194

I created these joints with Instamorph, and I also added a flat piece at the end of the carbon fiber so that I could mount the stick onto a servo arm easily.
*Tip: I used needles to form holes in the instamorph structure; once the plastic cooled down, I removed them and thread the string through them.

The next step was connecting the servos:

DSC_1169 DSC_1175

I attached carbon fiber to one servo, which was mounted onto a plastic board. Then, I added another board with two servos hot-glued to it. The arms of these servos were pulling one string each. I secured the two separate plates in place with screws and plastic building blocks, as can be seen in the photo. Now my structure looked like this:

DSC_1181

And worked like this: Video 3

While it definitely functioned, the action of string pulling seemed to be too demanding for the little servos, and they kept breaking. As a result, I had to switch to bigger ones:

DSC_1189 DSC_1193

These worked perfectly! Finally, I had my wing structure in place. The next step, of course, was to duplicate it and mount it on top of the penguin’s body.

*Tip: A lot of things kept malfunctioning in my project. One of the issues was an instable connection at the power supply plug. Once I soldered the wires and secured the connections with hot glue, this problem disappeared.

DSC_1218

This is the final design of my wing structure:

DSC_1275

Step 3. Structure

I was extremely lucky in this domain – my Professor already had a laser-cut oval shape that fit my design perfectly and he offered it for me to use. I only needed to secure the connection points by hot gluing them:

DSC_1212

Once I had two wings done, I connected them with little wire loops:

DSC_1203

Then, I added metal plates that connected the servos to a plastic board that served as the base:

DSC_1206DSC_1207

Once that was in place, I could hot-glue my wings on top of the laser-cut oval:

DSC_1209 DSC_1215

Here are the two wings working:

Now, I needed to add a horizontal dimension to the wings, so I attached little perpendicular carbon fiber “bones” to both wings:

DSC_1225 DSC_1221

As shown, I hot-glued them in place. Finally, I also constructed the top part of the penguin’s body, which was made from bent wire and secured with hot glue again:

DSC_1243 DSC_1244

Step 4. Skin

Now was the time to actually transform my electronic structure into a penguin. I started with sawing the wings:

DSC_1229 DSC_1250

I secured them in place with pins:

DSC_1280

Then, I moved on to constructing the cloth that was to cover the body. In order to achieve that I cut and sew two pieces of material together that enveloped the body. I also added a white patch in the front. The sides could be shut and opened with velcro.

Once I had the body, I could work on the head. I followed this tutorial. First, I cut five shapes like this:

DSC_1258 DSC_1259

Then, I sew them together at the joints and stuffed the inside:

DSC_1265 DSC_1270

All that I was missing now were the eyes and the beak. These I created with magic clay and felt correspondingly:

DSC_1278 DSC_1284

And here is Fede:

DSC_1292

Step 5. Programming

After I finished the hardware, I worked a little bit on the software as well. Since the idea was that Fede would express emotions through wings, I coded 6 actions: “Happy,” “Sad,” “Chill,” “Hi” “Hello” and “Fly.” While all of them worked, the last one seemed too instense and broke the strings frequently, so I avoided using it.

DSC_1287

*Tip: I used hot air gun to heat up the instamorph tip and replace the broken strings.

Here is my final demo:

A lot of people seemed to really like the wing movement, which made me happy. The concept of these actions expressing emotions though seemed confusing to many, so I should work on this issue next. Perhaps I could find, by trial and error and user testing, which action sequences are more meaningful to the audience, and which ones have the potential to be more universally understood as expressing certain emotions by the viewers.

Here is the code:

int happyX, happyY; // Position of “Happy” button
int sadX, sadY; // Position of “Sad” button
int helloX, helloY;
int hiX, hiY;
int chillX, chillY;
int flyX, flyY;
int rectSize = 200; // Diameter of rect
color rectColor, circleColor, baseColor;
color rectHighlight, circleHighlight;
color currentColor;
boolean happyOver = false;
boolean sadOver = false;
boolean helloOver = false;
boolean hiOver = false;
boolean chillOver = false;
boolean flyOver = false;

import processing.serial.*;
import cc.arduino.*;
Arduino arduino;

void setup() {
size(680, 160);

println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[2], 57600);
for (int i = 0; i <= 13; i++)
arduino.pinMode(8, Arduino.OUTPUT);
arduino.pinMode(9, Arduino.OUTPUT);
arduino.pinMode(10, Arduino.OUTPUT);
arduino.pinMode(11, Arduino.OUTPUT);
arduino.pinMode(12, Arduino.OUTPUT);
arduino.pinMode(13, Arduino.OUTPUT);
rectColor = color(43,199,203);
rectHighlight = color(236,255,33);
baseColor = color(255,255,255);
currentColor = baseColor;
chillX = 20;
chillY = 20;
sadX = 240;
sadY = 20;
happyX = 460;
happyY = 20;
helloX = 20;
helloY = 90;
hiX = 240;
hiY = 90;
flyX = 460;
flyY = 90;
}

void draw() {
update(mouseX, mouseY);
background(currentColor);

if (happyOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(happyX, happyY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“happy”, happyX+70, happyY+32);

if (sadOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(sadX, sadY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“sad”, sadX+85, sadY+32);

if (helloOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(helloX, helloY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“hello”, helloX+75, helloY+32);

if (hiOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(hiX, hiY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“hi”, hiX+90, hiY+32);

if (chillOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(chillX, chillY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“chill”, chillX+80, chillY+32);

if (flyOver) {
fill(rectHighlight);
} else {
fill(rectColor);
}
stroke(255);
rect(flyX, flyY, rectSize, rectSize/4);
textSize(20);
fill(255, 255, 255);
text(“fly”, flyX+85, flyY+32);
}

void update(int x, int y) {
if ( overSad(sadX, sadY, rectSize, rectSize/4) ) {
sadOver = true;
happyOver = false;
helloOver = false;
hiOver = false;
chillOver = false;
flyOver = false;
} else if ( overHappy(happyX, happyY, rectSize, rectSize/4) ) {
happyOver = true;
sadOver = false;
helloOver = false;
hiOver = false;
chillOver = false;
flyOver = false;
}
else if ( overHello(helloX, helloY, rectSize, rectSize/4) ) {
helloOver = true;
sadOver = false;
happyOver = false;
hiOver = false;
chillOver = false;
flyOver = false;
}
else if ( overHi(hiX, hiY, rectSize, rectSize/4) ) {
helloOver = false;
sadOver = false;
happyOver = false;
hiOver = true;
chillOver = false;
flyOver = false;
}
else if ( overChill(chillX, chillY, rectSize, rectSize/4) ) {
helloOver = false;
sadOver = false;
happyOver = false;
hiOver = false;
chillOver = true;
flyOver = false;
}
else if ( overFly(flyX, flyY, rectSize, rectSize/4) ) {
helloOver = false;
sadOver = false;
happyOver = false;
hiOver = false;
chillOver = false;
flyOver = true;
}
else {
sadOver = happyOver = helloOver = hiOver = chillOver = flyOver = false;
}
}

void mousePressed() {
if (sadOver) {
Sad();
}
if (happyOver) {
Happy ();
}
if (helloOver) {
Hello ();
}
if (hiOver) {
Hi ();
}
if (chillOver) {
Chill ();
}
if (flyOver) {
Fly ();
}
}

boolean overHappy(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}

boolean overSad(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}

boolean overHello(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}

boolean overHi(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}

boolean overChill(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}

boolean overFly(int x, int y, int width, int height) {
if (mouseX >= x && mouseX <= x+width &&
mouseY >= y && mouseY <= y+height) {
return true;
} else {
return false;
}
}
void Happy(){
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 100); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 80); //up and down left wing
}

void Sad (){
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 30); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 120); //up and down left wing
}

void Hello () {
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 80); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 90); //up and down left wing
delay (500);
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 80); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 90); //up and down left wing
delay (500);
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 80); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 90); //up and down left wing
delay (500);
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 80); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 90); //up and down left wing
}

void Hi () {
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 90); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
delay (500);
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 90); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
delay (500);
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 90); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
delay (500);
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 90); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
}

void Chill () {
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 130); //up and down right wing
arduino.analogWrite(13, 180); //tip down left wing
arduino.analogWrite(9, 0); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
}

void Fly () {
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 130); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
delay (600);
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 0); //up and down right wing
arduino.analogWrite(13, 00); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 160); //up and down left wing
delay (600);
arduino.analogWrite(8, 0); //tip down right wing
arduino.analogWrite(11, 180); //tip up right wing
arduino.analogWrite(12, 130); //up and down right wing
arduino.analogWrite(13, 0); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 30); //up and down left wing
delay (600);
arduino.analogWrite(8, 180); //tip down right wing
arduino.analogWrite(11, 0); //tip up right wing
arduino.analogWrite(12, 0); //up and down right wing
arduino.analogWrite(13, 00); //tip down left wing
arduino.analogWrite(9, 180); //tip up left wing
arduino.analogWrite(10, 160); //up and down left wing
}

Assignment 7B and Final Project: “The Dancing A Lang”

Student Name: Xinye Jiang

Background Story: A Lang’s brother Danboard(Danbo) is a very depressed and lonely person; however, A Lang is totally the opposite of Danbo. He is the youngest in the family and loves dancing and making new friends. He loves to show off his dance to people. His personality also shows on his appearance, unlike Danbo, whose body is just the colour of the box, A Lang’s body is colourful.

Inspiration: 

unnamedIMG_9836

Screen Shot 2017-05-18 at 下午10.27.26

 

 

Screen Shot 2017-05-18 at 下午10.26.41

Other than Danbo, I was also inspired by my previous interaction lab project. Professor Rudi also introduced OTTO Robot to me, which is similar to what I wanted to create. OTTO also uses ultrasonic sensor and servos to make it walk or stop.

Emotion to Transmit:The main emotion that A Lang wants to transmit is happiness, cheerful and outgoing. A Lang basically is a happy robot that will make people’s life joyful and happy. It will also dance when there is no obstacles in front of him.

Design Process:

WechatIMG9

74BE362A-6B54-4063-B021-78F2C152B564

537B446E-1271-4DB1-9751-190AB09CA6D8

FDCA527C-9AC1-47C9-824E-378AB4CFF3D1

  • Materials: Cardboard, boxes, servos, ultrasonic sensor, metal wires
  • Skin is painted to make it look more colourful and outgoing0E587C6C-91C4-40E3-9B14-9E18AEA06FD3A8DC4176-A0E7-4B64-98DC-32C59865F2A1BCFC3B26-A28A-4A14-9F92-E96281A7737FFA0A9264-53BF-4A02-8B8A-9556149ECF79

Software: Arduino and Processing

Mechanism

IMG_69886A00B93B-7194-43E1-ACA1-7BD19192C0F7

IMG_5815IMG_7061

Challenges:

  • How to balance it when it dances
  • Where to place the servos
  • It was also quite difficult for me to figure out how to connect the Firmata code with buzzer and ultrasonic sensor.
  • Make sure the stability of servos and metal wires (connecting to legs and arms)

Final Look:

WechatIMG10

Conclusion: A Lang is merely a box before I input all the characteristic and personality to it. In order to input emotions to him, I decided to make him dance with music. During the making process, I was often frustrated by how the codes work before I insert another codes. I had to try so many times before I made everything work at the same time. Therefore, it really takes time and patience to finally have the final result. For future development, I want to make the robot more stable and balance by itself, also I want to put more decorations to it so it will look more interesting to its users.

Assignment 7: Final Project: Angry Mantis Shrimp

Student Name: Jianghao Sam Hu.

Background Story

Angry Mantis Shrimp lives in cyber world. One day he was captured by a group of people who also live there. Those people like riding on him for fun, and he didn’t realize he had become famous in cyber world because of that–as an internet meme. However, he didn’t enjoy being ridden by people every single day. He is pissed off. He wants to stand up and resist against people who want to ride on him!!

Emotion to Transmit

In the scenario I created for Angry Mantis Shrimp, the main emotion to transmit is anger. But this emotion of anger also carries a little bit of cuteness. Because he is a mantis shrimp–a dumb creature living in sea. He’s not a lion, or a tiger, or any monster of that kind. Seeing him being angry is like seeing a 5 or 6-year-old kid getting angry and punching his parents.

Design Process

parasyte-movie-11851a1dc99d20b47772955645535a84e5

Essentially I plan to create something scary, such as creatures in the movie Parasyte, and the slug girl in Junji Ito’s horror comics. I wanted to create this interesting structure that moves like a snake or tentacle. So I did a research in animatronical structure like that, and I found there were tons of examples of that kind of structure. During the process of researching into those structures, I gradually changed my idea of making scary creatures to animate an angry mantis shrimp, which derived from a famous Chinese internet meme “我们走,皮皮虾 !” (Let’s go, mantis shrimp!).

Screen Shot 2017-05-14 at 10.49.00 PMScreen Shot 2017-05-16 at 9.24.37 PMScreen Shot 2017-05-16 at 9.26.19 PM

Inspired by those examples, I started sketching out the structure I’m going to build.

Screen Shot 2017-04-25 at 7.08.55 PM

The idea was to use hard material as the skeleton and flexible material as the central axis and pulling wires. I experimented with various materials, built several prototypes, and failed many times. For the first version I built, I used laser-cut wood as the plates, and flexible metal wires wrapped by rubber as both central axis and pulling wires. This version didn’t work because those wires doesn’t go back to original position after I released them, and that the flexibility of central axis and pulling wires were same.

WechatIMG4

I then changed material which made my second version. I used carbon fiber, which is flexible and able to go back to its original position after I release it, as the central axis, and nylon threads as pulling wires. This version was indeed capable of performing movements, but then I realized that the wooden structure was too heavy for carbon fiber to hold. I literally broke two carbon fibers when I was trying to lift the structure using threads.

WechatIMG6WechatIMG8

After all those failures, I started working on my third version. This time I laser-cut the skeleton–those plates–again out of cardboard with smaller size, as I wanted to reduce the weight but at the same time keep the minimum strength to be able to hold the structure. And I used another type of metal wire wrapped by rubber–the one people usually use to lock their bikes–as the central axis, and still used nylon threads as pulling wires.

WechatIMG12WechatIMG11

This third version is the best combination of material I could find so far. It was able to perform movements closely enough as I wanted it to. After I got this structure that worked pretty much close to what I wanted, I started to try adding the skin of mantis shrimp. Unfortunately the stuff toy I bought couldn’t be used onto the structure since the toy was too heavy even after I took all cotton out, so I had to make a simple appearance with papers. And here’s what it eventually looked like:

IMG_0414

Material:

cardboard, nylon threads, paper, foam plastic, servo motors

Software:

Basically I used Firmata to communicate Processing with Arduino. I made a window with Processing and used the movement of my mouse to control movements of servo motors, and therefore control the shrimp. Also when the mouse moves, an audio will play in which the shrimp said “Go away human! Don’t ride on me! Go away!”.

Here’s a demo video of my project: shrimp

Conclusion:

  • Experiments bring success. At first I thought building this structure could be easy, but it turned out that I had undergo all those experiments and failures to get what I wanted.
  • One problem that I’m still having in my project is the way to stabilize servo motors. As I wanted to make this project out of as cheaper materials as possible, I mostly used recycled materials such as cardboard and foam plastic. I fixed my servo motors onto a piece of foam plastic with hot glues, and whenever I tried to use servo motors to pull the structure, the motors constantly came off from the plastic. For future improvement, I might built another structure that involved screws to stabilize servo motors.
  • Organic instead of mechanical movements. As you probably have noticed, instead of performing movements with servo motors moving mechanically forward and backward, the structure I built performs a more organic movement. Ideally if I have enough motors, threads, and place them at exact right places, I’m able to move the body to any position, angles, etc. The movements performed by my snake-like structure is smoother than the ones performed differently by servo motors.

Assignment 7:Twist-twist crocodile

057aae247cad6df373b42bedbea057f5Background story:

This crocodile is designed by Disney, and well-known by the mobile game “where is my water”. To most of the people, the characteristic of him is only cute but since he is a comic character, he never moved his body to take a real shower.

Emotions to transmit:

My crocodile will continue to play as a cute roll, but I would like to make some movements on his body, the goal is to let him take a real shower in a bathroom: when he hear the music, he would follow the song and then take a shower by twisting his body and head.IMG_7668

Some Challenges:

  1. Limitted space inside the body
  2. Mechanism, servosIMG_7624
  3. Make a “showing” scene

Design process:

1 – I made a blueprint for this project: tools I might need, the structure of the body, how to achieve the functions, the difficulty I might have.IMG_7666IMG_7667

2 – I wrote the codes first and connected all the motors to see if it worked. By several times adjustments, the system is running well so I could put all the things inside the crocodile body.

3 – collect and assemble. This part is very difficult since there is limited space in his body. Sometimes the arm was not running well because of the cottons inside is too heavy.

IMG_7656 IMG_7657

4 – According to the feedback on Monday, I made a bathroom for him, in this way, it looks more like he is dancing.

 

Final Effects:

IMG_7658

IMG_7670

 

Week 12: Final Project: Talking Stitch Documentation – Yizhen(Bond) Luo (Animatronics)

IMG_3489

Concept

In Disney story Lilo & Stitch, Stitch is an alien creature who becomes a close friend of Lilo, a local resident in Hawaii Island. Stitch is a good friend and accompany of Lilo and they have many interesting stories in the show. 

My project is a talking stitch, which aims at bringing accompany to all the lonely kids like Lilo. The main designed feature is to make user speak to the stitch and stitch repeats the 5 second speech, creating the experience of communicating.

 

Designed Features

-Talking Stitch:

Press the button on its left hand and it can repeat what the user is saying (5 seconds). Tools: Minim Audio Recorder

-Dancing Stitch:

After the user talk to Stitch for a random number of times, the dancing stitch will be triggered. Stitch’s hands and ears moves according to the beats of the music. Tools: delay() with while loops

 

Design Process

Design Sketch:

FullSizeRender 2

In the stuffed puppet Stitch, there are five motors, a pair controlling the ears, a pair controlling hands and one controlling the mouth synchronization. All of the five are connected by metal wire.

Metal wire structure:

FullSizeRender 3

Software part I used Servo Firmata on the arduino side and control the puppet from processing IDE.  Every time the user press the button on the left hand of stitch, the arduino will return a value to processing ,triggering the start of the voice recording:

Screen Shot 2017-05-11 at 8.18.29 PM

Then the processing will fetch the audio file recorded just now and replay it. The user can repeat the process unlimitedly.

Every time the program starts, a random number x from 3-5 will be generated. Every x time the dance stitch will be triggered. This is realized by the modulo.

Screen Shot 2017-05-11 at 8.20.13 PM

 

The final result is below:

 

 

 

 

 

 

 

 

Assignment 6: Response to “Seeing Ourselves in the Computer:How We Relate to Technologies”

In the part “Introducing Topffer’s Law”, he states that “the most astonishing fact about this clues of expression is surely that they may transform almost any shape into semblance of a living being”(636). This sentence really interests me because what Topffer was saying is what psychologist called the “minimum clues” of expression to which we respond to whether we meet them in reality or in art. It is certainly not difficult to imbue computers with human personalities, which is why a creature that has similar human emotions and face will attract more attention from human beings.

Based on that article, I can totally relate to my project. If my robot does not have any personalities than it will not attract people’s eyes. Just because my robot will show emotions from dancing and moving his arms and legs, as well as his outgoing personality, he will make the audience want to interact with him more.