As computing becomes more ubiquitous in our objects, designers need to be more aware of how to design meaningful interactions into electronically enhanced objects. At the University of Washington, a class of junior Interaction Design majors is exploring this question. These pages chronicle their efforts.

Wednesday, June 6, 2012

Aaron and Kelly Final Project: The Hiatus Chair


We propose a chair that gets tired, just like you do. Too much sitting at one time makes the Hiatus Chair weary, and it begins to lean forward, encouraging you to stand up. If you persist in sitting, the chair will tilt further, forcing out its occupant so it can take a well-deserved five minute break. After this five minute pause, the chair will reset to its regular, comfortable position. As its occupant returns, the timer starts over and will once again encourage a break in two hours.

The Hiatus Chair is intended to prevent common office injuries as well as form habits that increase long-term health and reduce the risk of sitting-induced health problems. In addition, it has long been known by many productive individuals that a quick break in the midst of hard work can spur creativity, insight, and help combat writer’s block. The Hiatus Chair provides a regulated schedule for these mental breaks as well. With the knowledge that no work can be done in that five minute window, you are free to take a walk, eat a snack, or just relax and get a new perspective on your work.

CONCEPT BOARDS:




PROCESS:

We began our process by assessing a variety of existing social problems, and considering the elements of situation and response we discussed in class. After generating three situations of interest, we soon became more intrigued by the idea of deterring people from unhealthy behavior, and through discussion narrowed down on the idea of preventing office injuries and overly sedentary lifestyles. Our next step was to determine the best method of deterring people from being sedentary. We came upon the idea of modifying a chair itself to make it grow weary of a person sitting in it for too long. This was both a direct way of combatting the biggest source of sedentary time (sitting) and an interesting social interaction between a chair and its user, with a chair responding back for the first time.


We generated a concept diagram of how we envisioned our responsive chair. This diagram allowed us to plan out our next steps, and assess what electrical components and Arduino programming we might need. For the next several weeks, we worked hard to develop a working code that let the Arduino run a timer, and based on that timer, activate a motor which would shut off and reverse when tapping microswitches we placed when it reached the tilted position and the regular seated position.


At the same time, we planned out our hardware solution, rigging an Arduino Uno up with a four-way relay, car window motor, and a motorcycle battery to run the system. We cut (using a band saw, table saw, and laser cutter) an arm for the motor to move that would tilt the chair when necessary, and pull it back. Finally, we assembled the entire operation into what we now call the Hiatus Chair.


PROCESS VIDEOS:







Despite adversity (and our chair totally breaking right before the final), we persevered. Meet the Hiatus Concept Chair.






CODE:

/*
PROJECT TITLE: Anti-Office Injury Chair
CODE NAME: [Frank]enstein (Tentative)
DESIGNERS: Aaron Calzado, Kelly Graham
CLASS: ART 387 Physical Interaction Design Sping 2012
ADVISOR: Dominic Muren


*/


//Define the sensors
const int seat = 12;
const int fwdStop = 2;
const int revStop = 4;

//Define the motors
const int fwd = 7;
const int rev = 8;


//Define the stages in the process
int seatButton = 0;
int stopButton = 0;
int finishButton = 0;


//This activates the moter and keeps it on
boolean movingBackwards = false;
boolean movingForwards = false;

//seatButton "holding" stuff
int seatFirstTime = 1;
unsigned long seatStartTime;
unsigned long seatPressTime;


//stopButton "holding" stuff
int stopFirstTime = 1;
unsigned long stopStartTime;
unsigned long stopPressTime;

//===============================================

void setup() {

//Set pin modes

pinMode(seat, INPUT);
pinMode(fwdStop, INPUT);
pinMode(revStop, INPUT);
pinMode(fwd, OUTPUT);
pinMode(rev, OUTPUT);
Serial.begin(9600);


}


//===============================================


void loop(){

seatButton = digitalRead(seat);
stopButton = digitalRead(fwdStop);
finishButton = digitalRead(revStop);


/*
stopButton and finishButton: LOW == IN and HIGH == OUT
seatButton: HIGH == IN and LOW == OUT
*/


//Start and waiting process
if (movingForwards){
motorOnFwd();
} else {
motorOff();
}
//seatButton IN, finishButton IN
if (seatButton == HIGH && finishButton == LOW) {
if (seatFirstTime == 1) {
seatStartTime = millis();
seatFirstTime = 0;
}
seatPressTime = millis() - seatStartTime;
if (seatPressTime >= 1) {
}
seatPressTime = millis() - seatStartTime;
if(seatPressTime >= 1){
Serial.print("Time: ");
Serial.print(seatPressTime);
Serial.print(" milliseconds ");
Serial.print(int(seatPressTime/1000));
Serial.println(" seconds");
}
if (seatPressTime > 10000) {
movingForwards = true;
}
} else if (seatFirstTime == 0) {
seatFirstTime = 1;
movingForwards = true;
}

//Forward and stop process
//Wait and reverse process
if (movingBackwards){
motorOnRev();
} else {
motorOff();
}
//stopButton IN
if (seatButton == LOW && stopButton == LOW && finishButton == HIGH || stopButton == LOW) {
if (stopFirstTime == 1) {
stopStartTime = millis();
stopFirstTime = 0;
}
stopPressTime = millis() - stopStartTime;
if (stopPressTime >= 1) {
}
stopPressTime = millis() - stopStartTime;
if(stopPressTime >= 1){
Serial.print("Time: ");
Serial.print(stopPressTime);
Serial.print(" milliseconds ");
Serial.print(int(stopPressTime/1000));
Serial.println(" seconds");
}
if (stopPressTime > 10000) {
movingBackwards = true;
}
} else if (stopFirstTime == 0) {
stopFirstTime = 1;
movingBackwards = true;
}
/* IMPORTANT! DO NOT DELETE THIS SECTION
seatButton and finishButton act as killswitches so
the motor and battery does not commit suicide */
if (seatButton == HIGH && movingBackwards == true || finishButton == LOW) {
movingBackwards = false;
}
if (stopButton == LOW) {
movingForwards = false;
}
/* End of important section */
}

//===============================================

void motorOff() {
digitalWrite(fwd, HIGH);
digitalWrite(rev, HIGH);
}
void motorOnFwd() {
digitalWrite(fwd, LOW);
digitalWrite(rev, HIGH);
}
void motorOnRev() {
digitalWrite(fwd, HIGH);
digitalWrite(rev, LOW);
}
/*
Much mahalos: Dae, John, Sara Jo, Tom C.
Holding code taken from: Jeremy1998 via
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1280511595/all
*/




No comments:

Post a Comment