midterm
Date:28 October 2024 | Course: Interaction Lab
documentation
midterm
Date:28 October 2024 | Course: Interaction Lab
documentation
|A. SURPRISE CHAIR|
Created by Xianxian (Tina) Yang & Wanyan (Yanny) Yu
Instructed by Andy Garcia
B.CONTEXT AND SIGNIFICANCE
In my previous “Reading&Analysis” response, I defined interaction as “a conversation where two or more subjects go through the process of presenting, understanding and responding to one another.” Throughout the midterm project, I kept this basic interpretation in mind and believed that it is more important to create something the audience can engage with as if the creation is “alive” so that they can have a conversation than the artifact “gives a lecture” itself. Thanks to the previous recitations, I’ve learned to utilize multiple sensors and motors to bridge human senses with the artifact to create a “conversation”. The sensors serve as the “ears” and the output effects serve as the “mouths”. Other than the ideas, my previous research has influenced me largely in terms of “how to transfer ideas into reality”, which includes teamwork and effective communication. Additionally, we have learned in class that creating never follows a straight-line model but is a back-and-forth process that supports us in continuously improving and revising our project.
My definition of "interaction"
The uniqueness of our project lies in giving ordinary everyday objects a new life. In this project, we aim for our works to have no sense of distance for the audience. The audience should not need to explore how to interact with the works but instead, engage in a fascinating conversation through the most instinctive reactions and everyday actions. Our project provides the audience with an immersive experience by allowing the audience to actually sit on it and spin it. By setting such availability, we are targeting adults who are tired of the mundane reality and nostalgic about their childhood memories. In this project, we seek to create a transformative experience that encourages adults to reconnect with the magic of childhood, fostering a sense of playfulness and imagination within the confines of everyday life.
C. CONCEPTION AND DESIGN
Overall conception and design:
The main idea that I had in mind during the process was to generate the most fascinating effects with the most simple actions and have fun. This project aims to create an exclusive “neverland” for grown-ups, calling forth our lost sense of wonder and rediscovering the joy of being “Peter Pan”. To serve the goal, we designed a chair that can play music when the user sits on it and can generate bubbles when the user spins it. The “simpleness” and “playfulness” actually took a lot of effort. Below are the tough considerations we went through to “make the dream come true”:
The original sketches
The choice of the main body
In our original design, we thought of having different “objects” to serve different goals: when people sit on the chair, there will be bubbles; when people squeeze the pillow, there will be balloons. However, we later found this design lacked coherence as it seemed to be several separate projects and the actions of the audience were not layered, which might not create an interactive experience. Therefore, we changed the main body and made all the effects happen on the chair: If you sit down, there will be music and as you spin the chair, bubbles will come out. In this way, the audience's interactive experience is more hierarchical and will not be overwhelmed by too many objects, building a deeper “conversation”.
The choice of music
As the first thing the audience will trigger is the music, the selection of music is important as it serves as the “first impression” of the “conversation”. Previously, I thought about selecting Disney music of Peter Pan to align with the theme, but later, my partner Yanny suggested that we should use “Dynamite” by BTS as the Disney music was gentle, but the first line of “Dynamite” was straightforward and energetic, which could be a big “hi” to the audience, making them more surprised.
The choice of the way to produce bubbles
One major effect of our project was the bubbles, and we searched for multiple ways to achieve the effect. We chose to use servos to trigger bubble guns to generate bubbles as we wanted our audience to be immersed in the dreamlike effect. Many examples online suggested producing bubbles by using mechanisms to generate winds, but we thought in this way, there would be just a few bubbles and could not create the immersive effect.
D. FABRICATION AND PRODUCTION
The two major parts of our project were the music and the bubbles, so I and my partner Yanny divided the work and I was responsible for the bubbles part and she was responsible for the music part. We realized the effects separately and later combined them on one chair jointly. In terms of the music part, she used a pressure sensor and MP3 player to achieve the effect; in terms of the bubbles part, I used a DC motor as the sensor and the servos to trigger the bubble guns. Concerning the codes, I used the “conditionals” code: when the value of the motor is greater than 2, the servo will move. One of the main difficulties I encountered during the process was the angle of the servo. It required multiple practices to find the way that the servo could trigger the bubble gun. At first, I used strings wrapped with servo to pull the trigger, but the strength was far from sufficient. Therefore, I placed the servo directly next to the trigger and used the fans of the servo to press the trigger.
// the setup routine runs once when you press reset:
#include <Servo.h>
Servo myservo;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
myservo.attach(9);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
if (analogRead(A0) > 2) {
myservo.write(180);
delay(50);
} else {
myservo.write(0);
delay(50);
}
}
After we succeeded in achieving the effects separately, we combined our sketches together. Yanny was mainly in charge of programming and I was mainly in charge of the hardware. During the combing process, the music part worked but the servo was very unstable. Yanny changed the code by adding “millis” and “bool” and I changed the fans and the angles of the servo, but the problem remained unsolved. We found the DC sensor might be too sensitive and input too many signals to the servo so that it could not function properly.
During the user testing, there were two main problems: First, the bubbles could not come out as the user spun and the chair was too high for the user to spin; Second, users were a little confused about what to do with the chair and the chair required visualization. Therefore, Yanny and I divided the work again and I was responsible for the second problem. Yanny changed the DC motor into a rotary encoder so that the servo could move stably. I used a cardboard to serve as the back of the chair, which wrote: Welcome to the Neverland! For those who don’t want to grow up, the spell is sit and spin. The “sit and spin” was hidden behind a pink card with a warning: Adults should be accompanied by children (as in real life, it is always the children that need to be accompanied). I design the chair back this way to connect our inner concept with our project and to add childlike playfulness and a sense of humor by adding visualiztaion. Another change I made was I used a coloured paper to serve as the chair pad in order to hide the pressure sensor.
E. CONCLUSIONS
The goal of this project is to provide emotional value for adults who are nostalgic about their childhood by using simple actions to engage with an immersive experience. My definition of interaction is “a conversation where two or more subjects go through the process of presenting, understanding and responding to one another” and our project succeeds in creating a fun conversation by responding in a surprising way. Ultimately, the audience interacted with the project in the way we expected: Without our instructions, the audience sat on the chair and spun the chair at a pretty fast speed just like what they did when they were kids. However, there’s room for improvement. The “conversation” may be a little short, as the audience quickly finds what they need to do is to sit and spin. If we have more time, we can add one more step that may be a little harder to trigger to make the surprises more “surprising”. Additionally, we can make the two effects into a linear process: the user cannot trigger the bubbles if they don’t sit down. In this way, the interaction may be more layered.
We spent a lot of time in the studio and the failures were really annoying, but thanks to them, I learned the importance of “trying”. Our final work was very different from our original design, but the effects were what we wanted from the very beginning. This lesson taught me that there were many ways to achieve goals and do not limit yourself to the “ways”, as the only limitation is that you can only find the way through trying.
F. DISASSEMBLY
the recycling/return of components
G. APPENDIX
1.The full code
#include "DFRobotDFPlayerMini.h"
#include <SoftwareSerial.h>
#include <Servo.h>
// DFPlayer setup
SoftwareSerial softSerial(10, 11); // RX, TX for DFPlayer
DFRobotDFPlayerMini myDFPlayer;
int sensorVal1; // Sensor for music trigger
int volume = 0;
//Rotary Encoder
int clkPin = 7;
int dtPin = 6;
int swPin = 8;
long startTime = -1; // stopped by default
int pollRate = 25000; //in uS
// Servo setup
Servo myservo1; // Servo motor on the right
Servo myservo2; // Servo motor on the left
void setup() {
Serial.begin(9600);
//RE intialization
pinMode(clkPin, INPUT);
pinMode(dtPin, INPUT);
pinMode(swPin, INPUT);
// DFPlayer initialization
softSerial.begin(9600);
pinMode(9, INPUT); // Attach DFPlayer to pin9 to check whether it is busy
if (!myDFPlayer.begin(softSerial, /*isACK = */ false, /*doReset = */ false)) {
Serial.println("Error starting DFplayer");
while (true)
; // Stop the program if DFPlayer is not detected
}
myDFPlayer.volume(5); // Set volume value (0 to 30)
// Servo initialization
myservo1.attach(3); // servo1
myservo2.attach(5); //servo2
myservo1.write(30);
myservo2.write(30);
}
void loop() {
//pressure sensor & DFPlayer
sensorVal1 = analogRead(A0); //the value of pressure sensor
//Serial.print("pressure:");
//Serial.println(sensorVal1);
if (sensorVal1 > 20 && digitalRead(9) == HIGH) { // Only play if music is not busy (HIGH = not playing)
myDFPlayer.start(); // Resume music
} else if (sensorVal1 <= 20 && digitalRead(9) == LOW) { // Only stop if music is busy (LOW = playing)
myDFPlayer.pause(); // Pause music
}
//RE & servo
unsigned long timeStarted = micros();
int clkStateOld = digitalRead(clkPin);
//give window of time(default 25ms) to register pulse
while (micros() <= timeStarted + pollRate) {
int clkState = digitalRead(clkPin);
int dtState = digitalRead(dtPin);
if (clkState == HIGH && clkState != clkStateOld) { //rising
Serial.println("spinning");
startTime = millis();
}
clkStateOld = clkState; //update the state
}
if (startTime != -1 && millis() - startTime < 2000) {
// servo action
Serial.print("spin detected");
myservo1.write(60);
myservo2.write(60);
}
if (startTime != -1 && millis() - startTime > 2000) {
//servo return original position
myservo1.write(30);
myservo2.write(30);
startTime = -1; // when we’re done, set this back to stopped
}
delay(50); //a slight delay to Stabilize sensor readings for both sensors
}
2. Material list
Two servos
Two bubble guns
MP3 player shield
Rotary encoder
Pressure sensor
Cardboards
Colored paper
Multiple wires
A breadboard
An Arduino
Clothing materials
Tapes
A wheel
A chair (from the studio)