Blueprint of Our Final Product
- On the right half of the photo, we have the motors stored in a box with the electronics stacked on top.
- On the left half of the photo, we have the exoskeleton being worn by the hand.
- Overview of how our product works:
- Pressing buttons on our apps will give commands to our motors. Pressing the buttons labelled with “Open” will make the motor turn such that the wire pulls on the finger, enabling extension. Pressing the buttons labelled with “Close” will reverse the motor direction, allowing the fingers of the spastic hand to return to a flexion position. Pressing the buttons labelled “Stop” will cause the motors to cease movement.
- Our device will aid in rehabilitation of patients with spastic hands by assisting them to open their clenched fists.
Finger Component
Sketch of one finger component
Video Illustrating Motion of Components
Motor Components
Box Containing the Motors
Interior of the Box
Inside of the box, we have used tubings that will guide the wires all the way from the fingers to the motor spool. There is also a screw eye to guide the tubing into the motor that is placed behind to increase the compactness of our box. This prevents the wires from tangling inside the box, especially with the close proximity of the motors.
Soft Robotics Components
Clip-on Rings
The main unique feature of our product is the clip-on rings design for easy access to the fingers in a tightly clenched fist. We went through many rounds of prototyping for the rings, and eventually stuck to the elegant solution of making rings out of brass metal rings which balances the malleability required for the device to adapt to different finger sizes and rigidity so that the device does not slide off the user’s fingers easily.
Attachment of the Exoskeleton to the Wrist and Palm areas
We made use of metal D-rings and elastic bands to create the straps for securing the device. The straps would be adjustable, and at the same time allows for comfort as it is able to adapt to the stretching of the skin during movement.
Wire Routing
For wire routing, we emulate how our tendons work by running the wires above and along our arm. The device will not be able to extend the fingers efficiently if the wires are pulled through any other routes. To ensure that the path of the wires are fixed in the desired manner, we used techniques from soft robotics. The wires were fed through plastic tubings, which were then attached to felt cloth that had specific-sized channels sewn on them. This allows the tubings to fit snugly and stay in place. The tubings ran along the whole lower arm, so that the wires will not tangle.
Electronic Components
The main components used in our project are:
- Arduino Mega 2560 R3
- Annikken Andee Shield
- 5 Continuous Rotation Servo Motors
- Power Bank with Dual Output (5V, 2A)
Organisation of our Electronic Components
Application/User Interface
Screenshot of our Application
Code Used
#include <SPI.h> #include <Andee.h> #include <Servo.h> AndeeHelper btnTurnLeft1; AndeeHelper btnTurnRight1; AndeeHelper btnStop1; AndeeHelper btnTurnLeft2; AndeeHelper btnTurnRight2; AndeeHelper btnStop2; AndeeHelper btnTurnLeft3; AndeeHelper btnTurnRight3; AndeeHelper btnStop3; AndeeHelper btnTurnLeft4; AndeeHelper btnTurnRight4; AndeeHelper btnStop4; AndeeHelper btnTurnLeft5; AndeeHelper btnTurnRight5; AndeeHelper btnStop5; AndeeHelper btnStop6; Servo servot1; Servo servot2; Servo servot3; Servo servot4; Servo servot5; void setup() { Andee.begin(); Andee.setName("Rehabilitation Exoskeleton"); Andee.clear(); //? servot1.attach(3); servot1.write(90); servot2.attach(4); servot2.write(90); servot3.attach(5); servot3.write(90); servot4.attach(6); servot4.write(90); servot5.attach(7); servot5.write(90); setInitialData(); //Do i need a serial.begin(9600) here? NO } void setInitialData() { // Initialize buttons // Set 1: Pinky btnTurnLeft1.setId(0); btnTurnLeft1.setType(BUTTON_IN); btnTurnLeft1.setLocation(0,0,ONE_QUART); btnTurnLeft1.setTitle("Open Pinky"); btnTurnLeft1.requireAck(false); btnTurnLeft1.setColor("FFECD078"); btnTurnRight1.setId(1); btnTurnRight1.setType(BUTTON_IN); btnTurnRight1.setLocation(1,0,ONE_QUART); btnTurnRight1.setTitle("Close Pinky"); btnTurnRight1.requireAck(false); btnTurnRight1.setColor ("FFECD078"); btnStop1.setId(2); btnStop1.setType(BUTTON_IN); btnStop1.setLocation(2,0,ONE_QUART); btnStop1.setTitle("Stop Pinky"); btnStop1.requireAck(false); btnStop1.setColor ("FFECD078"); // Set 2: Ring btnTurnLeft2.setId(3); btnTurnLeft2.setType(BUTTON_IN); btnTurnLeft2.setLocation(0,1,ONE_QUART); btnTurnLeft2.setTitle("Open Ring"); btnTurnLeft2.requireAck(false); btnTurnLeft2.setColor ("FFD95B43"); btnTurnRight2.setId(4); btnTurnRight2.setType(BUTTON_IN); btnTurnRight2.setLocation(1,1,ONE_QUART); btnTurnRight2.setTitle("Close Ring"); btnTurnRight2.requireAck(false); btnTurnRight2.setColor("FFD95B43"); btnStop2.setId(5); btnStop2.setType(BUTTON_IN); btnStop2.setLocation(2,1,ONE_QUART); btnStop2.setTitle("Stop Ring"); btnStop2.requireAck(false); btnStop2.setColor("FFD95B43"); // Set 3: Middle btnTurnLeft3.setId(6); btnTurnLeft3.setType(BUTTON_IN); btnTurnLeft3.setLocation(0,2,ONE_QUART); btnTurnLeft3.setTitle("Open Middle"); btnTurnLeft3.requireAck(false); btnTurnLeft3.setColor("FFC02942"); btnTurnRight3.setId(7); btnTurnRight3.setType(BUTTON_IN); btnTurnRight3.setLocation(1,2,ONE_QUART); btnTurnRight3.setTitle("Close Middle"); btnTurnRight3.requireAck(false); btnTurnRight3.setColor("FFC02942"); btnStop3.setId(8); btnStop3.setType(BUTTON_IN); btnStop3.setLocation(2,2,ONE_QUART); btnStop3.setTitle("Stop Middle"); btnStop3.requireAck(false); btnStop3.setColor ("FFC02942"); // Set 4: Index btnTurnLeft4.setId(9); btnTurnLeft4.setType(BUTTON_IN); btnTurnLeft4.setLocation(0,3,ONE_QUART); btnTurnLeft4.setTitle("Open Index"); btnTurnLeft4.requireAck(false); btnTurnLeft4.setColor("FF542437"); btnTurnRight4.setId(10); btnTurnRight4.setType(BUTTON_IN); btnTurnRight4.setLocation(1,3,ONE_QUART); btnTurnRight4.setTitle("Close Index"); btnTurnRight4.requireAck(false); btnTurnRight4.setColor("FF542437"); btnStop4.setId(11); btnStop4.setType(BUTTON_IN); btnStop4.setLocation(2,3,ONE_QUART); btnStop4.setTitle("Stop Index"); btnStop4.requireAck(false); btnStop4.setColor("FF542437"); // Set 5: Thumb btnTurnLeft5.setId(12); btnTurnLeft5.setType(BUTTON_IN); btnTurnLeft5.setLocation(3,0,ONE_QUART); btnTurnLeft5.setTitle("Open Thumb"); btnTurnLeft5.requireAck(false); btnTurnLeft5.setColor("FF53777A"); btnTurnRight5.setId(13); btnTurnRight5.setType(BUTTON_IN); btnTurnRight5.setLocation(3,1,ONE_QUART); btnTurnRight5.setTitle("Close Thumb"); btnTurnRight5.requireAck(false); btnTurnRight5.setColor("FF53777A"); btnStop5.setId(14); btnStop5.setType(BUTTON_IN); btnStop5.setLocation(3,2,ONE_QUART); btnStop5.setTitle("Stop Thumb"); btnStop5.requireAck(false); btnStop5.setColor("FF53777A"); //Emergency Stop btnStop6.setId(15); btnStop6.setType(BUTTON_IN); btnStop6.setLocation(3,3,ONE_QUART); btnStop6.setTitle("Stop All"); btnStop6.requireAck(false); btnStop6.setColor (RED); } void loop() { // Set 1: Pin 5 - Control if( btnTurnLeft1.isPressed() > 0 ) { btnTurnLeft1.ack(); btnTurnLeft1.setColor (BLACK); btnTurnRight1.setColor ("FFECD078"); btnStop1.setColor ("FFECD078"); servot1.write(75); delay(2); } if( btnTurnRight1.isPressed() > 0 ) { btnTurnRight1.ack(); btnTurnLeft1.setColor("FFECD078"); btnStop1.setColor("FFECD078"); btnTurnRight1.setColor(BLACK); servot1.write(100); delay(2); } if( btnStop1.isPressed() > 0 ) { btnStop1.ack(); btnTurnLeft1.setColor("FFECD078"); btnStop1.setColor(BLACK); btnTurnRight1.setColor("FFECD078"); servot1.write(90); delay(2); } // Set 2: Pin 6 - Control if( btnTurnLeft2.isPressed() > 0 ) { btnTurnLeft2.ack(); btnTurnLeft2.setColor(BLACK); btnTurnRight2.setColor("FFD95B43"); btnStop2.setColor("FFD95B43"); servot2.write(70); delay(2); } if( btnTurnRight2.isPressed() > 0 ) { btnTurnRight2.ack(); btnTurnRight2.setColor(BLACK); btnTurnLeft2.setColor("FFD95B43"); btnStop2.setColor("FFD95B43"); servot2.write(100); delay(2); } if( btnStop2.isPressed() > 0 ) { btnStop2.ack(); btnStop2.setColor(BLACK); btnTurnLeft2.setColor("FFD95B43"); btnTurnRight2.setColor("FFD95B43"); servot2.write(90); delay(2); } // Set 3: Pin 7 - Control if( btnTurnLeft3.isPressed() > 0 ) { btnTurnLeft3.ack(); btnTurnLeft3.setColor(BLACK); btnTurnRight3.setColor("FFC02942"); btnStop3.setColor("FFC02942"); servot3.write(80); delay(2); } if( btnTurnRight3.isPressed() > 0 ) { btnTurnRight3.ack(); btnTurnRight3.setColor(BLACK); btnTurnLeft3.setColor("FFC02942"); btnStop3.setColor("FFC02942"); servot3.write(100); delay(2); } if( btnStop3.isPressed() > 0 ) { btnStop3.ack(); btnStop3.setColor(BLACK); btnTurnRight3.setColor("FFC02942"); btnTurnLeft3.setColor("FFC02942"); servot3.write(90); delay(2); } // Set 4: Pin 8 - Control if( btnTurnLeft4.isPressed() > 0 ) { btnTurnLeft4.ack(); btnTurnLeft4.setColor(BLACK); btnTurnRight4.setColor("FF542437"); btnStop4.setColor("FF542437"); servot4.write(80); delay(2); } if( btnTurnRight4.isPressed() > 0 ) { btnTurnRight4.ack(); btnTurnRight4.setColor(BLACK); btnTurnLeft4.setColor("FF542437"); btnStop4.setColor("FF542437"); servot4.write(100); delay(2); } if( btnStop4.isPressed() > 0 ) { btnStop4.ack(); btnStop4.setColor(BLACK); btnTurnRight4.setColor("FF542437"); btnTurnLeft4.setColor("FF542437"); servot4.write(90); delay(2); } // Set 5: Pin 9 - Control if( btnTurnLeft5.isPressed() > 0 ) { btnTurnLeft5.ack(); btnTurnLeft5.setColor(BLACK); btnTurnRight5.setColor("FF53777A"); btnStop5.setColor("FF53777A"); servot5.write(83); delay(2); } if( btnTurnRight5.isPressed() > 0 ) { btnTurnRight5.ack(); btnTurnRight5.setColor(BLACK); btnTurnLeft5.setColor("FF53777A"); btnStop5.setColor("FF53777A"); servot5.write(100); delay(2); } if( btnStop5.isPressed()) { btnStop5.ack(); btnStop5.setColor(BLACK); btnTurnRight5.setColor("FF53777A"); btnTurnLeft5.setColor("FF53777A"); servot5.write(90); delay(2); } if( btnStop6.isPressed() > 0 ) { btnStop6.ack(); servot1.write(90); servot2.write(90); servot3.write(90); servot4.write(90); servot5.write(90); btnStop6.setColor(BLACK); btnTurnLeft1.setColor ("FFECD078"); btnTurnRight1.setColor ("FFECD078"); btnStop1.setColor ("FFECD078"); btnTurnRight2.setColor("FFD95B43"); btnTurnLeft2.setColor("FFD95B43"); btnStop2.setColor("FFD95B43"); btnTurnRight3.setColor("FFC02942"); btnTurnLeft3.setColor("FFC02942"); btnStop3.setColor("FFC02942"); btnStop4.setColor("FF542437"); btnTurnRight4.setColor("FF542437"); btnTurnLeft4.setColor("FF542437"); btnStop5.setColor("FF53777A"); btnTurnRight5.setColor("FF53777A"); btnTurnLeft5.setColor("FF53777A"); delay(2); } // Button Updates btnTurnLeft1.update(); btnTurnRight1.update(); btnStop1.update(); btnTurnLeft2.update(); btnTurnRight2.update(); btnStop2.update(); btnTurnLeft3.update(); btnTurnRight3.update(); btnStop3.update(); btnTurnLeft4.update(); btnTurnRight4.update(); btnStop4.update(); btnTurnLeft5.update(); btnTurnRight5.update(); btnStop5.update(); btnStop6.update(); delay(100); }