Reflection on 3D-print Workshop by Sharon Xu

    On March 13, I attended the 3D-print workshop held by Nick in 823. In this workshop, I learned how to use Tinkercad to design a 3D toy model. We aimed to create a little red elf toy using Tinkercad.

    First, we used the shape called New Banana. We adjusted the curvature of it to make it as the head of an elf. Then we used many shapes that I didn’t use in the lecture, such as pineapple, paraboloid, cone and so on. Also, I learn how to use Group, Align, Flip and other functions when designing the toy. During the practice, I found it was hard for me to keep up the pace with the instructor because I was not familiar with Tinkercad’s operating system. Especially when it came to the hands and feet part, I had trouble connecting multiple cones which served as fingers) to the toy’s arms. So it took me a long time to adjust the position of fingers and toes according to the standard image. Through hard work, I overcame the most challenging part and successfully installed its fingers and toes. By practicing, my skills of 3D modeling in Tinkercad got improved. To put in LEDs, I made the hole using the shape of the Cylinder in the middle of the toy so that the LED would be into it. From this workshop, I learned the meanings of many specific parameters in different shape models and the basic operation in Tinkercad. My 3D modeling ability has been improved. After finishing designing the model, I entered the printing stage.


    On March 18, we printed the model. Nick taught us how to use the 3D printer to print it. After an hour of waiting, our work was finally finished. This experience improved my physical fabrication and enabled me to design and make 3D models independently.

Recitation 7: Processing Animation by Sharon Xu

Recitation Exercise:

For the recitation exercise, we are required to integrate the coding elements from this week’s classes to create an interactive animation in Processing. I want to use mouse interaction and variable function to design a simple game: Players use the mouse to control a small ball and try to avoid another moving ball,  and the player who persists for a longer time wins. I first defined the function of the position of the balls using x, y, speedX, speedY. By coding ellipse(mouseX, mouseY, 20, 20), I make the small ball be able to move according to the player’s mouse movement. Then I defined ballColor() using “if” function to make two balls randomly change colors once the big one hit the wall. To increase the difficulty of the game, I used keyPressed() to make the speed of the big ball variable so that another person could adjust the speed to add difficulty to the player. The interesting part I learned is the function called boolean(). This function is about TRUE or FALSE. By using it, I make all balls and the timer stop once the player fails to avoid the big ball. I first made “boolean ballStop = false.” When “ballStop == false,” ballMove() runs; when two balls touch each other, ballStop becomes TRUE, and all changing things stop. By designing this small game, I learned how boolean function is applied. The boolean function is convenient for programmers to control the condition under which a variable occurs.

Video:

Code:

int x = 300;

int y = 300;

int size=60;

int speedX =1;

int speedY =1;

int bgColor;

int m;

boolean ballStop = false;

void setup() {

  size(600, 600);

  bgColor = 125;

  fill(0, 125, 125);

  speedX=int(random(2, 10));

  speedY=int(random(2, 10));

  frameRate(60);

}

void draw() {

  background(bgColor);

  ellipse(x, y, size, size);

  if (ballStop == false) {

    ballMove();

  }

  ballBounce();

  ballColor();

  ellipse(mouseX, mouseY, 20, 20);

  if (ballStop) {

    text(m/1000.0, 60, 60);

  } else {

    text(millis()/1000.0, 60, 60);

  }

  //text(m/1000.0, 60, 60);

  float d = dist(mouseX, mouseY, x, y);

  if (d <= 50 && ballStop == false) {

    //if ((mouseX> x-10) && (mouseX<x+10) && ((mouseY>y-10) && (mouseY<y+10) )) {

    //background (0);

    //bgColor = 0;

    ballStop = true;

    speedX = 0;

    speedY = 0;

    m = millis();

    println(“hit”);

  }

  print(mouseX);

  print(” “);

  print(mouseY);

  print(” “);

  print(x);

  print(” “);

  print(y);

  print(” “);

  print(d);

  print(” “);

  print(ballStop);

  println();

}

void ballBounce() {

  x=x+speedX;

  if (x>width || (x<0)) {

    speedX *=-1;

  }

  y=y+speedY;

  if (y>height || (y<0)) {

    speedY *=-1;

  }

}

void ballMove() {

  y=y+speedY;

  x=x+speedX;

}

void ballColor() {

  if ((x>width || (x<0))||(y>height || (y<0))) {

    int r =int(random(0, 255));

    int g =int(random(0, 255));

    int b =int(random(0, 255));

    fill(r, g, b);

    noStroke();

  }

}

void keyPressed() {

  if (key == CODED) {

    if (keyCode==UP) {

      speedY –;

    } else if (keyCode ==DOWN) {

      speedY++;

    } else if (keyCode ==LEFT) {

      speedX–;

    } else if (keyCode ==RIGHT) {

      speedX++;

    }

  }

  if (key == ‘r’) {

    ballStop = false;

    speedX = int(random(2, 10));;

    speedY = int(random(2, 10));;

  }

}

Recitation Homework:

STEP1

STEP2

STEP3

STEP4&BONUS

CODE

int r=150;

int speed=3;

int c=0;

int xspeed = 0;

int yspeed = 0;

int x = 150;

int y = 150;

void setup(){

  size(600,600);

  background(255);

}

void draw(){

  x = x+xspeed;

  y = y+yspeed;

  drawCircle(x,y);

  if(x>=250|x<=50){

   xspeed = 0;

  }

  if(y>=250|y<=50){

    yspeed = 0;

  }

}

  

void drawCircle(int x,int y){

  pushMatrix();

  translate(x,y);

//draw a circle

    background(255);

    strokeWeight(20);

    ellipse(x,y,r,r);

    r = r + speed;

    if (r>300){

      speed =-3;

    }

    if (r<80){

      speed =3;

    }

    colorMode(HSB);

    stroke(c,255,255);

    if(c<255){

      c=c+1;

    }

    if(c==255){

     c=c-255;

   

    popMatrix();

}

void keyPressed() {

  if (key == CODED) {

    if (keyCode == RIGHT) {

      xspeed = 2;

    } else if (keyCode == LEFT) {

      xspeed = -2;

    } else if (keyCode == UP) {

      yspeed = -2;

    } else if (keyCode == DOWN) {

      yspeed = 2;

    } else if (keyCode == SHIFT) {

      xspeed = 0;

      yspeed = 0;

  }

  }

}

Briend – Wenyu (Sharon) Xu – Rudi

CONTEXT AND SIGNIFICANCE

    In the previous research, we defined interaction as a cyclic process where two actors alternately receive and respond to the message, which in computer terms are called: input, processing, and output. For the midterm project, I want to make something either entertaining or useful, which includes the process of interaction. The inspiration for my project comes from a video I watched a long time ago about a blooming mechanical tulip: https://youtu.be/NvRck1Xt7Oc. The blooming flower is beautiful (entertaining) as well as interactive, which includes the process of input (touch sensor), processing (code running) and output (flowers bursting). Inspired by this mechanical tulip, my partner and I decided to make a similar robotic flower and I found a manufacturing instructions:https://www.hackster.io/jiripraus/ever-blooming-mechanical-tulip-1b0323. However, during the manufacturing process, we found that the operating mechanism of the robotic flower was too complicated, which would take a long time to complete. Moreover, because the petals have a certain radian, we couldn’t use a 3D printer to print them. At the same time, the brass we have was not strong enough to make flower stems to support the petals. At the suggestion of professor Rudi, my partner and I decided to give up making the robotic flower as the midterm project after a fierce ideological struggle. This failure inspired me that I should have made a complete and feasible plan before doing the project rather than design and make it at the same time, which could easily cause problems.

Our Design Model of Petals’ Motion Mechanism
Failed 3D printed petal 2

    Fortunately, we have gained new inspiration from the mechanism of petal movement. In our process of trying to use servo to make petals move, Professor Rudi taught us to use straws to transform servo’s rotational motion into petal’s upward and downward motion. Inspired by this movement mechanism, my partner Jessica came up with the idea that we can make a robotic bird, which is entertaining, interactive and more practical to achieve. So the direction of our project changed to making a robotic bird. In addition to realizing the ornamental function, the robotic bird can also make lonely people have emotional resonance because it looks like a pet. It could be a good listener when users feel lonely or stressful. This project reminds me of my favorite toy when I was a child, which is called Unazukin. Unazukins are voice activated and react to voice, nodding and shaking their head. When people talk to the Unazukin, it can give “yes”(nodding) or “no”(shaking head) reaction. Similar to Unazukin, our project Brined is a healing commodity that helps relieve stress. But instead of nodding and shaking head, we tried to give the bird personality to enable people to achieve emotional resonance with it. When stroked by people, the cute bird would flap its wings up and down, and when hugged, it would chirp like a real bird. Briend is like your real friend. The project aims at kids from 5-10 years old because at that certain age they need a good listener for their thoughts which may be neglected by adults. Some lonely or stressful adults may also need Briend to hear their secrets which cannot be told to other people.

The prototype for the bird’s motion mechanism
The Unazukin

  CONCEPTION AND DESIGN

    As I mentioned above, we hope that Briend could have as many emotional resonances as possible with users. To achieve this, we try to make Briend cute and realistic. We designed pictures of clouds, the sun, notes on the left and right sides of Briend to create an atmosphere in which birds fly in the sky. We decided to use paper of the same color as its body part to make the bird’s head, including the beak, and chose the blue feathers attached to the bird’s wings to make it more realistic. To give the wings weight sense, we decided to make the wing bracket out of strong brass, and then added feathers. Moreover, we use LEDs with different colors to make Briend more beautiful. In terms of function, we use the straw to fix the copper wires which are attached to the wings, so that the copper wires can be moved while its moving range is fixed. We originally wrote the code to make the buzzer play music (“City in the Sky”) after the user gives input message. But because we wanted to make the Briend more realistic, we finally gave up the song and tried to debug the buzzer to imitate the real bird sounds.

Our Project’s Poster

FABRICATION AND PRODUCTION

    In the beginning, we worked on the basic function. Combined with the knowledge learned in class, we achieved the function of controlling LEDs and servo by the touch sensor.

 Then we designed the appearance, measured the size we wanted and used laser cutting to manufacture the entity.

Next step was to use straws and copper wires to build the moving system. This step took us a lot of time. At first, we don’t know where to put the straws and how we can make them fixed to the box. After many attempts, we finally succeeded in achieving our goal: we folded the straw at right angles to move the wings up and down, and used both hot melt adhesive and transparent tape to enhance the stability of the straw.

 After finishing the mechanism, we modified the code to make the wings move in proper speed. Then we did some paper cutting and made the head.

The production process has entered the next stage. In the process of User Testing, we got some helpful feedback and suggestions: 1. The LEDs inside the box is not obvious; 2. It doesn’t have much function; 3. The touch sensor is exposed on the box and needs to be beautified; 4. The body part of Brind doesn’t look like a bird. In order to solve these problems, we further optimized our project. Firstly, we drilled a few holes in the top of Briend to place the LED so that users could see the light change more clearly and they can receive obvious output besides the swinging wings. Secondly, we added an infrared distance sensor, which is attached to the back of the bird to control the buzzer, and we chose to use it to simulate bird sounds instead of playing music. When a user hugs a bird, it makes a chirp, of which meaning can be understood individually by the user, such as a sad or happy chirp. In this way, while increasing project interaction, we made Briend more like a real bird. Besides, we cover Briend’s body with some blue feathers, including covering the touch sensor. This step made Briend more realistic while beautifying the sensor. At the same time, the texture of feathers increases the comfort of users when they touch the sensor. In case some users don’t know how to do the input at all, we wrote “scratch me here” next to the touch sensor in tiny words to prompt users and add interest at the same time. In general, I think User Testing is beneficial to our project. It effectively improves our project’s interactivity, feasibility, learnability, comfortability and so on.

CONCLUSIONS

    The goal of our project is to entertain people, especially kids or stressful people, as well as embody interaction. The two actors of this interaction process are the user and Briend. Touching the touch sensor and being closer to the bird are users’ input messages. Once receiving the message, Briend begins to process and quickly gives a specific reaction. Seeing the entertaining output, users may feel the emotional resonance and start a new round of interaction. As an entertainment project, Briend achieves interactive function and could catch people’s eyes at first. But sooner, because of the predictable responses, users may feel a little bit bored. If we have more time, we will make input produce a variety of outputs. These unpredictable outputs could surprise users and stimulate their input again. What’s more, we could make it more beautiful and easier to carry by changing the size of Briend to add the board at its back. From the failure of designing the robotic flower, I learned that it’s necessary to make practical and clear plans for each step. Therefore, before making Briend, we divided the project into multiple easy-to-achieve small goals and set tasks for each day. By doing this, I felt clear about each step I was doing and gained confidence as each step was completed. Through the project, I began to really understand the design process. Moreover, when faced problems, as a designer and creator, we should be patient as well as confident about our project. If we don’t believe what we do, how do users trust us? By doing the project, I became a designer from an ordinary user of interactive devices in my life. I began to realize the charm and significance of Interactive Media Art – a sense of achievement in creating new things as well as constantly improving, constantly learning, for better user experience. Even with small designs, designers have the power to change the world.

CODE

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {

  pinMode(A0, INPUT);

  pinMode(13, OUTPUT);

  pinMode(12, OUTPUT);

  pinMode(11, OUTPUT);

  pinMode(10, OUTPUT);

  pinMode(7, OUTPUT);

  pinMode(8, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(2, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(1, OUTPUT);

  myservo.attach(9);

  Serial.begin(9600);

  

}

void loop() {

  Serial.println(analogRead(A0));

  Serial.println(analogRead(A2));

  if (analogRead(A0) > 100) {

    digitalWrite(13, HIGH);

    digitalWrite(12, HIGH);

    digitalWrite(11, HIGH);

    digitalWrite(10, HIGH);

    digitalWrite(8, HIGH);

    digitalWrite(6, HIGH);

    digitalWrite(2, HIGH);

    digitalWrite(5, HIGH);

    digitalWrite(4, HIGH);

    digitalWrite(1, HIGH);

    for (pos = 0; pos <= 130; pos += 3) { // goes from 0 degrees to 180 degrees

      // in steps of 1 degree

      myservo.write(pos);              // tell servo to go to position in variable ‘pos’

      delay(10);                       // waits 15ms for the servo to reach the position

    }

    for (pos = 130; pos >= 0; pos -= 3) { // goes from 180 degrees to 0 degrees

      myservo.write(pos);              // tell servo to go to position in variable ‘pos’

      delay(10);

    }

    

  } else {

  digitalWrite(13, LOW);

  digitalWrite(12, LOW);

  digitalWrite(11, LOW);

  digitalWrite(10, LOW);

  digitalWrite(8, LOW);

  digitalWrite(6, LOW);

  digitalWrite(2, LOW);

  digitalWrite(5, LOW);

  digitalWrite(4, LOW);

  digitalWrite(1, LOW);

  //}

  delay(100);

  }

  if(analogRead(A2) > 500){

      digitalWrite(7, HIGH);

   }else{

    digitalWrite(7, LOW);

   }

}

Recitation 6 Processing Basics by Sharon Xu

 

The Cony Rabbit

I chose an image of Cony to be the motif. Cony is my favorite cartoon character because this lovely rabbit is always happy and full of positive energy, so I chose it as my motif. First, I analyzed the basic graphics in the picture: ear, face, blush, the nose is made of ellipses, eyes are made of circles, and mouth is made of straight line and curve. And the colors are white, pink and black. After knowing what to draw, I used functions like arc(), ellipse(), rect(), stroke(), fill() and so on to achieve my ideal shape.

CODE:

size(600,600);

stroke(255);

fill (255);

ellipse(200,160,60,250);

ellipse(300,160,60,250);

stroke(#F08080);

fill(#F08080);

ellipse(200,160,40,220);

ellipse(300,160,40,220);

stroke(255);

fill (255);

ellipse(250,225,300,225);

fill (0);

ellipse(220,200,25,25);

ellipse(280,200,25,25);

ellipse(250,225,40,30);

stroke(255);

fill (255);

ellipse(200,160,60,250);

ellipse(300,160,60,250);

stroke(#F08080);

fill(#F08080);

ellipse(200,160,40,220);

ellipse(300,160,40,220);

stroke(255);

fill (255);

ellipse(250,225,300,225);

fill(0);

ellipse(220,200,25,25);

ellipse(280,200,25,25);

ellipse(250,225,40,30);

stroke(255);

fill (255);

ellipse(250,225,22.5,17.5);

fill(0);

stroke(0);

rect(246,235,7.5,35);

noFill();

strokeWeight(6);

arc(250, 230, 80, 80, QUARTER_PI, PI-QUARTER_PI, OPEN);

fill(#FFC0CB);

stroke(#FFC0CB);

ellipse(175,225,80,50);

ellipse(325,225,80,50);

My creation

My creation is roughly the same as my chosen motif, drawing the basic plane figure of Cony Rabbit. I enlarged the blush part to make Cony look cuter. My creation can be used as a 2D logo, which is applicable. I think if the pattern is made up of basic patterns, drawing in Processing was a good means of realizing your design. But if the design is very complex, I think Processing may not be your first choice, because you need to set a lot of parameters to adjust the position of the graphics, which increases the workload compared to the drawing software. What’s more, the number of functions of graphics in processing is also limited, so it is not suitable for those designs which are not made up of basic patterns.

Recitation4: Drawing Machines by Sharon Xu

Drawing Machines

Components:

1 * 42STH33-0404AC stepper motor
1 * SN754410NE ic chip
1 * power jack
1 * 12 VDC power supply
1 * Arduino kit and its contents

2 * Laser-cut short arms
2 * Laser-cut long arms
1* Laser-cut motor holder
2 * 3D printed motor coupling
5 * Paper Fasteners
1 * Pen that fits the laser-cut mechanisms
Paper

Step 1: Build the circuit

 

In the first step, I connected a stepper motor to our Arduino through an H-Bridge. An H bridge is an electronic circuit that switches the polarity of a voltage applied to a load and allows DC motors to run forwards or backwards.

First of all, I successfully and quickly linked the circuit according to the circuit diagram. I connected Arduino to my computer and uploaded the stepper_one Revolution code. Then I plugged the USB into the protective socket. I was surprised that my stepper motor didn’t rotate. I suspected my circuit connection was wrong. So I checked my circuit over and over again, but there seemed to be no problem. Later, I found out that I didn’t connect to the power supply. The USB interface powered Arduino and we needed an extra power supply to power the stepper motor, which I overlooked, leading to my failure. After connecting the stepper motor to the power supply, I finally succeeded in my first step.

Step 2: Control rotation with a potentiometer

Because I wasted too much time in the first step, I was a little flustered in the second step. After I connected the three feet of potentiometer to the positive and negative poles of the circuit and Arduino’s A0, I began to deal with the code. First I change STEPS 100 into 200 because the 42STH33-0404AC Stepper Motor is a 200 step motor based on the instruction. Then I wrote val= map (val, 0, 1023, 0, 200); below void loop() to match the movement of the knob with the rotation of the motor. It worked but I can’t control the drawing machines using the potentiometer. So I added a parameter pot to measured variables. Therefore, it worked successfully.

CODE

#include <Stepper.h>

// change this to the number of steps on your motor

#define STEPS 200

// create an instance of the stepper class, specifying

// the number of steps of the motor and the pins it’s

// attached to

Stepper stepper(STEPS, 8, 9, 10, 11);

// the previous reading from the analog input

int previous = 0;

int pot = A0;

void setup() {

  // set the speed of the motor to 30 RPMs

Serial.begin(9600);

  pinMode(pot,INPUT);

  stepper.setSpeed(30);

}

void loop() {

  // get the sensor value

  int val = analogRead(pot);

  val= map(val,0,1023,0,200);

  // move a number of steps equal to the change in the

  // sensor reading

  stepper.step(val – previous);

  // remember the previous value of the sensor

  previous = val;

}

Step 3: Build a Drawing Machine!

In the third step, I paired up with a partner and created a drawing machine, using laser-cut arms, a laser-cut motor holder, a 3D printed motor coupling and paper fasteners. The assembly process is relatively smooth, although the brush cannot be fixed firmly. Hard as the drawing machine is to use, we have a great sense of achievement.

Question 1:

What kind of machines would you be interested in building?Add a reflection about the use of actuators, the digital manipulation of art, and the creative process to your blog post.

I want to build a machine that can automatically classify garbage. In my life, I find that the reason why people don’t classify garbage is not that they don’t have this awareness, but that they don’t know the specific rules of garbage classification. If there is such a machine that can help to classify, human production will be more environmentally friendly.

An actuator, as a “mover”, requires a control signal and a source of energy. For environmental reasons, I hope my machine can be powered by solar energy. In this way, the solar energy is converted into electricity, and then into mechanical energy, and then the machine can run. People put garbage in and press a startup button to enable the machine to perform tasks and classify garbage by scanning.

I think the digital manipulation of art has brought infinite possibilities to both art and technology. Combined with art, electronic technology is more aesthetic; combined with technology, the forms of art are more diverse, and what is conveyed can also have the characteristics of the times. The garbage sorting machine I want to make is not only an advanced technology, but also an art of how human and nature live in harmony. Through science and technology, we try to learn and practice the art of coexistence.

I think the creative process is difficult but exciting. A good idea is like the child of the creator. From its germination to formation, the creator pours his heart and soul into it. And when the creator sees his product being applied, his heart will be filled with happiness. I think that creativity comes from daily life, just like what causes me to create garbage sorting is that I find people in life don’t classify garbage. And then I think about the reasons and germinate ideas. So I think we should observe carefully in our life, find out the problems, and use our creativity to find solutions.

Question 2:

Choose an art installation mentioned in the reading ART + Science NOW, Stephen Wilson (Kinetics chapter). Post your thoughts about it and make a comparison with the work you did during this recitation. How do you think that the artist selected those specific actuators for his project?

I like the work called Mechanical Mirrors: Wooden Mirror designed by Daniel Rozin. It is a computer-controlled installation recreates digitized video images of viewers, according to ART + Science NOW, Stephen Wilson (Kinetics chapter). I think it perfectly shows what the digital manipulation of art is. While using the technology, this machine has created a picture full of artistic beauty for us.

Similar to the drawing machine I created during recitation, the project called Mechanical Mirrors outputs in the form of visual images. Both of them embody the combination of art and technology. The difference is that our drawing machine inputs information physically (manually adjusting the potentiometer), and this machine monitors the input information through the camera. The actuator used by the designer Daniel Rozin is not limited to physical input. It embodies the automation, flexibility and artistry of the machine.