PROJECT TITLE – A broken heart
YOUR NAME – Eva He
YOUR INSTRUCTOR’S NAME – Rodolfo Cossovich
CONCEPTION AND DESIGN:
According to my research, depression is a common disease worldwide. My original idea was about New Year’s fireworks, but recently I suddenly changed my mind. I recently found out that I have a friend who suffers from depression, and she usually confides in me. I thought she just needed an outlet, but on November 21, I heard from her parents that she was suicidal. I just remembered what she had told me, and I think the hurt after the hurt finally broke her. I think this aspect needs to be popularised and understood by the public. I decided to use Processing to create a game interaction with a heart in the middle.
The audience uses an Arduino vibration sensor to trigger a processing switch. At each command, a sword shoots, piercing the heart. The heart cannot stand and burst when the blade is inserted to a certain extent. But if a spectator lights a sword simultaneously, it will also explode. Here, the audience can not repeatedly poke the same point; everyone’s psychological acceptance differs. The only questions that resonated with viewers were when needles were inserted into the heart and how humans hurt it. In the user test, I just used the vibration Sensor to control the issue of the sword. The audience felt that they didn’t know how to operate it and were afraid to touch it when they experienced it. I decided to give the Vibration Sensor a cover and a rubber band so that the audience could play the rubber band. When the rubber band hits the sensor, it will be fired once.
Final!!!
FABRICATION AND PRODUCTION:
I need to process and control the game through the Vibration sensor of Arduino to complete the game’s production. I will finish the processing test first and design the visual effect of the interface. Such as the reaction in mind and beware of the explosion’s impact, complete the audience’s auditory interaction with the choice of color and sound. I started testing Arduino applications and bought vibration sensors to connect the controls to the original Processing mouse. But it turns out the vibration sensor is too sensitive and vibrates a few times. Finally, I decided to use the original Button as the trigger to do it one at a time. And when I was in the User test, the audience suggested that it would be better if I could make a heart-piercing effect. In the final, I had a broken vibration sensor this morning. I put a button in the box and found a wooden pole instead of a knife. In the end, the result was quite good, and the audience knew that they should touch the Button in the hole with the wooden pole.
This is my first version of it, and I think it’s cold like a game. I gave it my personality.
This led to my own drawing of the knife and heart.
CONCLUSIONS:
When I look back, the results I achieved from the beginning of the project investigation to the end are consistent. Based on my expectation that the audience’s reaction was the same as the reality, they knew exactly how to use it without my instructions. They also gave me a lot of feelings and feelings after the experience; for example, they did not feel hurt and so on. They felt more like a game and didn’t have a deep sense of what I was trying to convey. Because in my poster, I want to highlight that people should stop hurting each other, and their behaviors constitute people hurting each other. If I had more time, I would break my heart bit by bit every time I poke the center. This will give the audience a more intuitive visual effect. I learned from these shortcomings how to rationalize both. Nowadays, people’s tolerance of depression is becoming less and less, and I want to show its importance through this kind of behavior.
During user testing…
Processing Code
import processing.sound.*; PImage dao,xin; import processing.serial.*; int NUM_OF_VALUES_FROM_ARDUINO = 1; /** YOU MUST CHANGE THIS ACCORDING TO YOUR PROJECT **/ int sensorValues[]; /** this array stores values from Arduino **/ int hx, hy; SoundFile shoushang, xinsui; String myString = null; Serial myPort; Zhen [] zhens = new Zhen[100]; int num = 1; float rspeed =1.5; boolean win=false, lose = false, gameOver = false; boolean lock = false; void setup() { setupSerial(); //size(500,800); fullScreen(); shoushang = new SoundFile(this,"shoushang.wav"); xinsui = new SoundFile(this,"xinsui.wav"); zhens= new Zhen[100]; num=1; zhens[0] = new Zhen(num); win = false; lose = false; gameOver=false; dao= loadImage ("dao.png"); xin = loadImage ("xin.png"); } void draw() { getSerialData(); printArray(sensorValues); if (!lose) { if ( sensorValues[0] == 0) { if (!lock) { shoushang.play(); zhens[num-1].speed = 15; num++; zhens [num-1]= new Zhen(num); lock = true; } } else { lock = false; } translate(width/2, height/2.5); background(0); zhens[0].display(); for (int i = 1; i<num-1; i++) { zhens[i].display(); } if (num>1 && zhens[num-2].xuanzhuan()) { zhens[num-1].display(); for (int i = 0; i<num-2; i++) { if (abs(zhens[i].Zhen_angle-zhens[num-2].Zhen_angle)<6) { zhens[i].c=#FF0000; zhens[num-2].c=#FF0000; lose = true; xinsui.play(); } } } noStroke(); fill(#FF0000); image(xin, hx-250, hy - 240); //black //beginShape(); //for (float a=0; a<TWO_PI; a+=0.01) { // float r =10; // float x =r*15*pow(sin(a), 3); // float y=-r*(13*cos(a)-5*cos(2*a)-2*cos(3*a)-cos(4*a)); // vertex(x, y); //} //endShape(); } else { //if(millis()%500 < 50) showLose(); if (keyPressed && key ==' ') { num=1; zhens[0] = new Zhen(num); win = false; lose = false; gameOver=false; } // setup(); //return; } } //ellipse(0,0,160,160);//circle class Zhen { int num; float x, y; int w=2, l=120, r=20; int c=#000000; float speed, Zhen_angle=0; Zhen(int num) { x = 0; y=350; this.num = num; speed = 0; } void display() { if (!xuanzhuan()) { noStroke(); fill(c); rectMode(CENTER); image(dao, x - 62, y); //rect(x, y, w, l); //ellipse(x, y+l/2, r, r);// y-= speed; } else { pushMatrix(); rotate(radians(Zhen_angle)); noStroke(); fill(c); rectMode(CENTER); image(dao, x - 62, y); //rect(x, y, w, l); //ellipse(x, y+l/2, r, r); popMatrix(); Zhen_angle+=rspeed; Zhen_angle=Zhen_angle%360; } } boolean xuanzhuan() { if (y<=70+l/2)return true; else return false; } } void showLose() { //lose = false; fill(194, 55, 55, 75); rect(0, 0, 2*width, 2*height); textAlign(CENTER); fill(255); textSize(35); text("You hurt Me!", 200, 200); } void setupSerial() { printArray(Serial.list()); myPort = new Serial(this, Serial.list()[ 1 ], 9600); // WARNING! // You will definitely get an error here. // Change the PORT_INDEX to 0 and try running it again. // And then, check the list of the ports, // find the port "/dev/cu.usbmodem----" or "/dev/tty.usbmodem----" // and replace PORT_INDEX above with the index number of the port. myPort.clear(); // Throw out the first reading, // in case we started reading in the middle of a string from the sender. myString = myPort.readStringUntil( 10 ); // 10 = '\n' Linefeed in ASCII myString = null; sensorValues = new int[NUM_OF_VALUES_FROM_ARDUINO]; } void getSerialData() { while (myPort.available() > 0) { myString = myPort.readStringUntil( 10 ); // 10 = '\n' Linefeed in ASCII if (myString != null) { String[] serialInArray = split(trim(myString), ","); if (serialInArray.length == NUM_OF_VALUES_FROM_ARDUINO) { for (int i=0; i<serialInArray.length; i++) { sensorValues[i] = int(serialInArray[i]); } } } } // delay(400); } void mouseClicked()// buttom { zhens[num-1].speed = 15; num++; zhens [num-1]= new Zhen(num); //setup();{ shoushang.play(); //} } Arduino Code
int Button0 = 0; void setup() { Serial.begin(9600); pinMode(Button0, INPUT_PULLUP); } void loop() { int sensor0 = digitalRead(Button0); // print out the state of the button: Serial.print(sensor0); Serial.println(); // add linefeed after sending the last sensor value }