Assignment 2: Physical Therapy Metric Assist
Problem: As someone who has dealt with a series of joint issues throughout college, I have often found it difficult to track my progress in terms of strength and flexibility. It is pretty much impossible to measure your own flexibility, especially in terms of joints like the wrist, and can be difficult to tell when you are at the right level of stretch(especially since overstretching can result in reinjury).
Solution: A wearable system that uses a series of flex sensors to see how far a joint is able to be bent in different positions. Ideally, the Arduino This would allow the user to be able to use both hands to perform stretches and exercises, and warn against any overextensions through haptic feedback through a series of dime motors, letting the user know when they are in the optimal position, and when they are overstretching.
Mockup
Device Requirements: Arduino Uno, 3.3v dime motor, flex resistor
Fritzing Sketch
Arduino Pseudocode
const int FLEX_PIN = A0; // Pin connected to voltage divider output
const int DIME_PIN = 7; // Pin connected to dime motor
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float INPUT_VOLTAGE = 5;
const float RESISTANCE = 47500.0;
// Upload the code, then try to adjust these values to more
// accurately calculate bend degree.
const float STRAIGHT_RESISTANCE = 37300.0; // resistance when straight
const float BEND_RESISTANCE = 90000.0; // resistance at 90 deg
const float GOAL_ANGLE = 40.0; // ideal angle for bending
const float MAX_ANGLE = 55.0; // max angle for bending
void setup()
{
Serial.begin(9600);
pinMode(FLEX_PIN, INPUT);
}
void loop()
{
// Read the ADC, and calculate voltage and resistance from it
int flexCURRENT = analogRead(FLEX_PIN);
float flexVOLTAGE = flexCURRENT * INPUT_VOLTAGE / 1023.0;
float flexRESISTANCE = RESISTANCE * (INPUT_VOLTAGE / flexVOLTAGE – 1.0);
// Use the calculated resistance to estimate the sensor’s
// bend angle:
float angle = map(flexRESISTANCE, STRAIGHT_RESISTANCE, BEND_RESISTANCE,
0, 90.0);
if(angle>MAX_ANGLE) {
digitalWrite(DIME_PIN, HIGH);
delay(500);
}
else if(angle>GOAL_ANGLE) {
digitalWrite(DIME_PIN, LOW);
}
Else {
}
delay(500);
}