Midterm / Haptic Feedback + Visual Feedback User Test For Physical Rehabilitation

CONCEPT

The machines designed for motor rehabilitation are aesthetically unpleasant and often not engaging or stimulating to the patient. I am interested in exploring the areas of healthcare and rehabilitation through art and new technologies in order to five people with motor challenges better health through inclusive design and interactive experiences. Rehabilitation is a slow and boring process, so how can the algorithm behind the interaction I am creating suggest a more engaging process?

I am currently researching the domains of motivation, agency and especially self-efficacy. What would keep my user from loosing interest? How is kinetic movement rewarding? How does externalization affect stress? How can haptic feedback be utilized to enhance muscle memory? My entire concept is grounded in my users experience, practically approaching the problems that people with disabilities face. I am particularly focusing on people that are very physically restrained – to the extent that even jumping on a wheelchair is exhausting.

For my midterm, I needed to prototype the experience with my peers in order to send out a package to different healthcare facilities in order to consult a specialist and ideally work with them for future prototyping. I conducted a short User Test Questionnaire in conjunction with the test, and below are some of my key insights:

  • Vibrational feedback needs to be more clear, not using time but rather number of vibrations to indicate if you have done the exercises too slow/fast.
  • People generally found the feedback to be helpful/rewarding/important, and would like to see this as a developed product.
  • People did not pay so much attention to the visual feedback, and where more focused and grateful for the haptic feedback.

PROTOTYPE

The piece is based on a simple exercise routine: the bicep curl. Often times, it is difficult for people to stay with their routines, especially when highly disabled and check-ins with physical therapists are scarce. In this instance, haptic feedback lets you know if you have done the basic routine of ten bicep curls within the right time frame by giving you one long vibration. Two short tells you that you’ve done them too fast, and two long ones too slow. The origami works as a supplement in lifting all of it’s legs if you have done it right, and only some of them if wrong, simply to test the viability of visual stimuli in a simple way.

HapticFeedback

Screen Shot 2014-10-24 at 12.19.07 PM

Screen Shot 2014-10-24 at 12.19.55 PM

Screen Shot 2014-10-24 at 12.18.46 PM

Screen Shot 2014-10-24 at 12.18.31 PM

 

/*
VIBRATIONAL FEEDBACK BASED ON IF YOU HAVE DONE YOUR BICEP ROUTINES CORRECTLY. MOREOVER, YOU WILL SEE ORIGAMI MOVE AS FEEDBACK.
BY FABIOLA EINHORN FALL 2014 FOR THESIS AND PHYSICAL COMPUTING
*/

int vibration = 6;
int sensorValue = 0;
int flex = A3;
int counter = 0;
int timer;
int startTime;
int endTime;
int trainTime;
int flexinolA = 2;
int flexinolB = 3;
int flexinolC = 4;
int flexinolD = 5;

void setup() {
pinMode(vibration, OUTPUT);
pinMode(flexinolA, OUTPUT);
pinMode(flexinolB, OUTPUT);
pinMode(flexinolC, OUTPUT);
pinMode(flexinolD, OUTPUT);

Serial.begin(9600);
}

void loop() {
//Serial.println(sensorValue);
sensorValue = analogRead(flex);

delay(1); // delay in between reads for stability

if(sensorValue == 300){
if(counter == 0){
startTime = millis();
}

Serial.println(counter);
Serial.println(sensorValue);

counter = counter + 1;

delay(1000);

}

if(counter > 3){
analyze();
counter = 0;
}
}

void analyze(){
endTime = millis();
trainTime = endTime – startTime;
Serial.println(trainTime);

// IF YOU DID THE EXERCISES TOO FAST, GIVE TWO SHORT VIBRATIONS

if(trainTime <= 15000){
motor(500);
delay(1000);
motor(500);
Serial.println(“FLEEEXINOOOL”);

digitalWrite(flexinolA, HIGH);
delay(2000);
digitalWrite(flexinolA, LOW);

digitalWrite(flexinolC, HIGH);
delay(2000);
digitalWrite(flexinolC, LOW);
}

// IF YOU DID THE EXERCISES CORRECTLY, GIVE ONE LONG VIBRATION

if(trainTime > 15000 && trainTime < 25000){
motor(2000);
Serial.println(“FLEEEXINOOOL”);

digitalWrite(flexinolA, HIGH);
delay(2000);
digitalWrite(flexinolA, LOW);

digitalWrite(flexinolB, HIGH);
delay(2000);
digitalWrite(flexinolB, LOW);

digitalWrite(flexinolC, HIGH);
delay(2000);
digitalWrite(flexinolC, LOW);

digitalWrite(flexinolD, HIGH);
delay(2000);
digitalWrite(flexinolD, LOW);
}
// IF YOU DID THE EXERCISES TOO SLOWLY, GIVE TWO LONG VIBRATIONS
if(trainTime > 25000){
motor(2000);
delay(1000);
motor(2000);
Serial.println(“FLEEEXINOOOL”);

digitalWrite(flexinolC, HIGH);
delay(2000);
digitalWrite(flexinolC, LOW);

digitalWrite(flexinolD, HIGH);
delay(2000);
digitalWrite(flexinolD, LOW);
}

}

void motor(int valueLong) {
digitalWrite(vibration, HIGH);
delay(valueLong);
digitalWrite(vibration, LOW);
}

 

 

Leave a Reply

Your email address will not be published.