“Unlock Nostalgia“ – Tina Yuting Song – Rudi
CONCEPTION AND DESIGN:
The concept of the project is to build a little game that can interact with the users which brings them back to childhood and give them happy memories. I did research in midterm so that because final is the same topic I just need to add on to the research I did before. I researched a lot about projects that can interact with people so that I can know how to make the interaction more smoothly because that part is also the main problem I found in the midterm project. I think the research and all my former learning and experiences gave me many thoughts about my project and helped me build the whole idea of the project. My users engage in the whole game we create, they see the wooden ice cream truck, they touch it and move the flying bear up and down by themselves, they hear the music of the game, they control the game and plays with it and they get feedback from the game which are drawings from the childhood. I think the interaction part goes through the whole experience and users are deeply interacting with the project. During the user testing session, our sensor was not fully connected to the game so we showed the testers our first draft of the idea of the interaction which was lifting their hand up and down to control the bear in the game to move up and down. Then the users told us that it was confusing because they did not find the connection between the hand and the game. Some of them suggested moving a stuffed animal bear up and down so that it’s ore related, others told us that it’s important to relate the movement and interaction to the ice cream truck so that the whole project can be put together and have the same setting. So then we decided to use the same style, design and material to make a controller of the bear which has a laser cutter bear which is the same one as the one in the game, and users can move the laser cutter bear to control the bear in the game flying up and down. The adaption was quite effective. All users that tested the project after we made the adaption said that they really like it and think that it was fun to play with and connected with each other, they think they can totally see it as a game people play in their house and play with when they are bored.
This is the note Vicky took during user testing:
FABRICATION AND PRODUCTION:
For this project, we first found an original code of another game that was about a little plane flying up and down. Then our first step was to make changes to the processing code and connect it with Arduino. My partner Vicky did most part of changing the processing code. She created the whole scene of flying teddy bear and cute little childhood memories popping out when the bear eats enough ice cream and she drew all these cute patterns. We worked together to connect the processing to Arduino, but after we tried it, we found that the processing and the Arduino code both worked but the problem was that the the distance sensor we chose could not actually move the bear up and down, it could only make the bear tremble. We made a lot of attempts and we almost wanted to gave up on distance sensor and try something else, however, I accidentally found out that the problem was the math equation that calculates the number the distance sensor collected. So I tested the distance sensor and found that it only can output number 0 to number 9 (in the case I tried it), so I made it 10 different angles of the bear. After that we tested it and it actually works! The number change according to the distance, and the angle of the bear change according to the number and then change the up and down of the bear.
Other than the coding part, we used laser cutting as the fabrication part. Because I think that kids played with a lot of wooden pieces such as the building blocks and they like to build pieces together. So I choose wooden laser cutting. This is my first time designing a whole laser cutting thing myself. I watched several tutorial videos on cuttle to learn how to make everything the exact size I want and how to put holes and patterns and words on the wood pieces. It took me a whole day to do the design but I enjoyed it a lot. The second day, I went to the laser cutting machine to cut the ice cream truck out, it turned out that there was some little mistakes but it was not a big, the whole ice cream truck was really pretty and I loved it. And then after discussion with Vicky, I designed the controller of the flying bear, the second time I design it was much efficient and I did the design in 826 and printed it out soon after I designed it. The whole laser cutting part was perfect for the project and i designed space to hide all the wires so that everything looks clean and organized.
My design in cuttle:
Laser cutting the parts:
Building the truck:
CONCLUSIONS:
The goal of my project was to design a game that can bring people back to their childhood and pick up those happy childhood memory to relax themselves from all the stress. I think my project achieved its stated goals because most testers find the project entertaining and they are eager to play with it when they are free. My users engage in the whole game we create, they see the wooden ice cream truck, they touch it and move the flying bear up and down by themselves, they hear the music of the game, they control the game and plays with it and they get feedback from the game which are drawings from the childhood. I think the interaction part goes through the whole experience and users are deeply interacting with the project. From the failure of coding, I learned that as long as we give it another try and think it in different ways we can always have new inspiration. From the accomplishments of designing the laser cutting parts, I learn that we can always try something new if we are open to learning it and have interest in it. Overall, I think childhood is really an important part of our memory and finding it back can relax us from the stress we get from adult lives.
ANNEX
Processing code:
//Ultrasound bear, a game with a bear and an ultrsound sensor (but //by Yoruk for Instructables //send commments or questions to Yoruk16_72 AT yahoo DOT fr //19 07 14 : initial code //20 07 14 : it works with arduino !! //07 07 15 : picture for the bear and for the rainbow //06 12 15 : score system with the iceCream int i, j; boolean keyPressed = false; int Score ; float DistancebeariceCream; float Hauteur; //en Y float Angle; int DistanceUltra; int IncomingDistance; //float Pas; //pour deplacements X float iceCreamX; float iceCreamY; float rainbowX ; //for X position String DataIn; //incoming data on the serial port //5 a 32 cm float [] CloudX = new float[6]; float [] CloudY = new float[6]; //vitesse constante hein PImage Cloud; PImage iceCream; PImage bear; PImage rainbow; // serial port config import processing.serial.*; Serial myPort; import processing.sound.*; SoundFile sample; //preparation void setup() { myPort = new Serial(this, "/dev/cu.usbmodem1101", 9600); //myPort = new Serial(this, Serial.list()[2], 9600); //myPort.bufferUntil(10); //end the reception as it detects a carriage return frameRate(30); fullScreen(); rectMode(CORNERS) ; //we give the corners coordinates noCursor(); //why not ? textSize(16); Hauteur = 300; //initial bear value Cloud = loadImage("cloud.png"); //load a picture iceCream = loadImage("mint ice cream.png"); bear = loadImage("flying bear.png"); //the new bear picture rainbow = loadImage("rainbow.png"); //some rainbow sample = new SoundFile(this, "ice cream truck trap remix.mp3"); sample.play(); //int clouds position for (int i = 1; i <= 5; i = i+1) { CloudX[i]=random(1000); CloudY[i]=random(400); } Score = 0; } //incoming data event on the serial port void keyPressed(){ if(key == ' '){ keyPressed = true; } } void serialEvent(Serial p) { DataIn = p.readString(); // println(DataIn); IncomingDistance = int(trim(DataIn)); //conversion from string to integer println(IncomingDistance); //checks.... if (IncomingDistance>1 && IncomingDistance<100 ) { DistanceUltra = IncomingDistance; //save the value only if its in the range 1 to 100 } } } PFont font; //main drawing loop void draw() { if(keyPressed == false){ background(255,255,255); text("PRESS SPACE TO BEGIN", 330, 300); PImage img; img = loadImage("intro.png"); image(img, 0,0,2700,1650); } if(keyPressed == true){ background(232, 227, 255); fill(112, 96, 185 ); //rect(0, 580, 800, 600); //some rainbow //new rainbow : for (int i = -2; i <= 4; i = i+1) { //a loop to display the rainbow picture 6 times image(rainbow, 448*i + rainbowX, 840, 448, 116); // 224 58 : picture size } //calculates the X rainbow translation. Same formulae than the iceCream rainbowX = rainbowX - cos(radians(Angle))*10; if (rainbowX < -448) { //why 224 ? to have a perfect loop rainbowX=448; } textSize(16); text(Angle, 10, 30); //debug things... text(Hauteur, 10, 60); //new part : check the distance between the bear and iceCream and increase the score DistancebeariceCream = sqrt(pow((400-iceCreamX), 2) + pow((Hauteur-iceCreamY), 2)) ; if (DistancebeariceCream < 40) { //we hit the iceCream Score = Score+ 1; //reset the iceCream position iceCreamX = 1500; iceCreamY = random(600); } //here we draw the score text("Score :", 200, 30); text( Score, 260, 30); if(Score >= 2){ PImage img; img = loadImage("ice cream truck png.png"); image(img, 50,0); } if(Score >= 3){ PImage img; img = loadImage("candy.png"); image(img, 660, 350, 250, 250); } if(Score >= 4){ PImage img; img = loadImage("slide.png"); image(img, 1000,150, 400, 350); } Angle =50-DistanceUltra*10; //uncomment this line and comment the next one if you want to play with the mouse //Angle = DistanceUltra*5; // you can increase the 4 value... Hauteur = Hauteur + sin(radians(Angle))*10; //calculates the vertical position of the bear //check the height range to keep the bear on the screen if (Hauteur < 0) { Hauteur=0; } if (Hauteur > 600) { Hauteur=600; } TraceAvion(Hauteur, Angle); iceCreamX = iceCreamX - cos(radians(Angle))*10; if (iceCreamX < -100) { iceCreamX=900; iceCreamY = random(300); } //draw and move the clouds for (int i = 1; i <= 5; i = i+1) { CloudX[i] = CloudX[i] - cos(radians(Angle))*(10+2*i); image(Cloud, CloudX[i], CloudY[i], 300, 200); if (CloudX[i] < -1500) { CloudX[i]=1500; CloudY[i] = random(600); } } image(iceCream, iceCreamX, iceCreamY, 100, 120); //displays the useless iceCream. 59 and 38 are the size in pixels of the picture } if(Score >= 5){ background(255,255,255); textSize(30); text("YAY! You've unlocked all the memories!", 300, 300); PImage img; img = loadImage("outro.png"); image(img, 0,0, 1800,1500); } } void TraceAvion(float Y, float AngleInclinaison) { //draw the bear at given position and angle noStroke(); pushMatrix(); translate(400, Y); rotate(radians(AngleInclinaison)); //in degres ! scale(0.5); //0.2 pas mal image(bear, -111, -55, 400, 600); // 223 110 : picture size popMatrix(); //end of the rotation matrix }
Arduino code:
int echoPin= 2; int triggerPin= 3; unsigned long pulsetime = 0; unsigned distance =0; unsigned OldDistance =0; void setup (){ pinMode (echoPin, INPUT); pinMode (triggerPin, OUTPUT); Serial.begin(9600); } void loop(){ digitalWrite(triggerPin, LOW); delayMicroseconds(100); digitalWrite(triggerPin, HIGH); delayMicroseconds(100); digitalWrite(triggerPin, LOW); pulsetime = pulseIn(echoPin, HIGH); distance = pulsetime / 58; delay(10); if (OldDistance != distance) { Serial.println(distance); OldDistance = distance; } delay(50); }
Citation of the code:
Yoruk, and Instructables. “How to Control a Simple Processing Game with Arduino.” Instructables, Instructables, 18 Apr. 2018, https://www.instructables.com/How-to-control-a-simple-Processing-game-with-Ardui/.
Video of the whole project:
Video of user testing the project:
Leave a Reply