Home

Contact Me





LinkedIn

1.0 Background


The RehabiliBall is a patent-pending medical device I built in undergrad & continue to work on now. Through the i4 Engineering competition, I secured a total of $13,000 which I used to hire a patent attorney. This is a rehabilitative device to help hand spasticity. The patient straps on the brace. There is a ball in the palm of the brace; when the device is powered on, a 5V air pump pushes air into the rubber ball for 5 seconds, pauses for 5 seconds, detaches, then a solenoid valve is engaged which draws out the air. Thie process effectively inflates & deflates the rubber ball, which allows the patient to passively exercise their clenched fingers.

The circuit consists of an Arduino Uno with a motor drive shield stacked on top. A motor shield is highly recommended when driving motors/pumps with an Arduino, as they can supply higher current (1.2A vs. an Arduino's 500mA output), higher voltage, and provide better control. The motor shield is connected to a 5V aquarium pump, as well as a 12V solenoid valve (normally closed = does not vacuum out air when voltage is applied/vacuums out air when ground is applied).

2.0 Final Product


Manual System

Inflatable Brace

3.0 Videos

Biological Models

Inflation/Deflation Explanation

4.0 Product Images

Biological Models

External User Interface

Biological Models

Internal Wiring


5.0 Circuit Diagram

Biological Models

Circuit Diagram

6.0 Assembly



Materials

REAL Arduino Uno
HiLetgo L293D Motor Drive Shield
6V DC Air Pump
12V NC Solenoid Valve
Soldering Iron
Dremel for Panel Mount Cutouts
16x2 i2C LCD Screen + Connector Wires
12V DC Power Supply
Plastic Chassis
On-Off Rocker
22 AWG Wire*

*Any type of wire between 20-22AWG work for Arduino.
I prefer solid to stranded wire for ease of
soldering, but that is personal preference.

Total Cost: $100.16

7.0 Code

  


#include  //needed to drive motor
#include  //needed for circuits
#include  //needed w LCD i2C Library 


AF_DCMotor pump(2, MOTOR12_64KHZ); // create motor #1, 64KHz pwm for greater inflation power

AF_DCMotor vacuum(1, MOTOR12_8KHZ); // create motor #2, 8KHz pwm

 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 //LCDvariablename(address [use find_lcd_screen_address program to locate], 16x2 characters)




void setup() {
  Serial.begin(9600); //begin serial communication (9600 for LCD)
  lcd.begin();//Initializing display
  lcd.backlight();//To Power ON the back light NOTE: if backlight doesn't turn on,
//  ensure power jumper is attached
  lcd.setCursor(0,0); //use first row
  lcd.print("    WELCOME     ");  //print mode
  pump.setSpeed(255);  // Set motor 1 to maximum speed
  vacuum.setSpeed(200);  // Set solenoid valve to maximum speed
  delay(100); //delay
  }

//The following loop runs forever
void loop() {
  lcd.clear();
  vacuum.run(FORWARD); //release the solenoid valve
  lcd.setCursor(0,0); //use first row
  lcd.print("    INFLATING     ");  ////print state of device (inflating)
  pump.run(FORWARD);      // turn on pump
  delay(8000); //run for 5000ms
  pump.run(RELEASE); //detach the motor to conserve power
  lcd.clear(); //clear the screen
  lcd.setCursor(0,0); //use first row
  lcd.print("     HOLDING     ");  //print state of device (pausing on inflation)
  delay(2000); //delay 5000ms
  lcd.clear(); //clear the screen
  lcd.setCursor(0,0); //use first row
  lcd.print("    DEFLATING     ");  //print state of device (deflating)
  vacuum.run(BACKWARD);      //reverse polarity on solenoid valve (since it is normally closed, 
  //ground will keep it closed)
  delay(1000); //allow 1s to release pressure
  vacuum.run(FORWARD); //release the solenoid valve
  delay(500); //delay .5 second

}