PROBLEM: People experiencing finger -specific motor disabilities are often asked to participate in rehabilitation sessions, either within clinical settings or at home. Unfortunately, a lot of them (including me) do not execute the instructed exercises for finger strengthening and as a result their traumatised fingers may not fully recover back to their original potential.
SOLUTION: RehabActuators constitute a portable, soft robotic wearable that exploits tangible interaction to motivate patients to execute finger exercises like bending/unbending. RehabActuators turns rehabilitation into a playful activity, where the participant can manipulate its own finger by using interacting with the interface.
Computational Logic:
Told Design & Fabrication:
Mechanism Overview:
Control Manipulation:
Interaction Demonstration: https://drive.google.com/drive/folders/1ldiV7o1EZ_QfcC9cEiDaGpcplat2HtpA?usp=sharing
Arduino + Motor Shield REV3
Arduino Wiring:
-Copper tape for the two capacitive sensors
-Peristaltic liquid pump
Arduino Code:
# include <CapacitiveSensor.h> // Capacitive Sensors CapacitiveSensor csLeft = CapacitiveSensor(6, 7); bool csLeftTouched = true; long csLeftVal; CapacitiveSensor csRight = CapacitiveSensor(6, 5); bool csRightTouched = true; long csRightVal; // water pump const int pumpPin = 13; const int speedPin = 11; const int brakePin = 8; const int cw = HIGH; const int ccw = LOW; void setup() { //Serial.begin(9600); pinMode(pumpPin, OUTPUT); pinMode(speedPin, OUTPUT); pinMode(brakePin, OUTPUT); } void loop() { capacitiveSensorLeft(); capacitiveSensorRight(); activatePump(); } void capacitiveSensorLeft() { csLeftVal = csLeft.capacitiveSensor(80); // 80: resolution if (csLeftVal > 1000) { csLeftTouched = true; //Serial.println("left on"); } else if (csLeftVal < 100) { csLeftTouched = false; //Serial.println("left off"); } } void capacitiveSensorRight() { csRightVal = csRight.capacitiveSensor(80); // resolution if (csRightVal > 1000) { csRightTouched = true; //Serial.println("right on"); } else if (csRightVal < 100) { csRightTouched = false; //Serial.println("right off"); } } void activatePump() { while (csRightTouched == false && csLeftTouched == false) { digitalWrite(brakePin, HIGH); } while (csRightTouched == true && csLeftTouched == false) { digitalWrite(brakePin, LOW); digitalWrite(pumpPin, cw); analogWrite(speedPin, 200); // 200 is the rotation speed } while (csRightTouched == false && csLeftTouched == true) { digitalWrite(brakePin, LOW); digitalWrite(pumpPin, ccw); analogWrite(speedPin, 200); // 200 is the rotation speed } }