somrkmv1997
Published © CC BY-NC-ND

Exoskeleton for Paralytic Arm

This exoskeleton was designed to help a patient suffering from paralysis to rehabilitate faster.

IntermediateProtipOver 33 days12,977
Exoskeleton for Paralytic Arm

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Adafruit Phenovo 16 Channel Servo Motor Drive Shield I2C for Arduino Mega UNO R3 Board
×1
high torque servo motor
×3
SparkFun Wireless Joystick Kit
SparkFun Wireless Joystick Kit
×1
3d printed parts
×7
cables
×1
gloves
×1
OpenBuilds Gear Backpack
OpenBuilds Gear Backpack
×1
aluminium plate
×1
velcro straps
×10

Software apps and online services

Arduino IDE
Arduino IDE
circuito.io
circuito.io

Hand tools and fabrication machines

Plier, Cutting
Plier, Cutting
Multitool, Screwdriver
Multitool, Screwdriver
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)
files
needles

Story

Read more

Custom parts and enclosures

3 d parts

arm

actuator casing

pulley

guides

end guide

Schematics

block diagram

Code

servo control

C/C++
#include <Adafruit_PWMServoDriver.h>

#include <Wire.h>


Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
 #define MIN_PULE_WIDTH  650
 #define MAX_PULE_WIDTH  2350
 #define DEFAULT_PULE_WIDTH  1500
 #define FREQUENCY 50
 #define GROUND_JOY_PIN A3            //joystick ground pin will connect to Arduino analog pin A3
 #define VOUT_JOY_PIN A2              //joystick +5 V pin will connect to Arduino analog pin A2
 #define XJOY_PIN A1    
 #define X2JOY_PIN A0
 
void setup() {
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY);
  Serial.begin(9600);
  pinMode(VOUT_JOY_PIN, OUTPUT) ;    //pin A3 shall be used as output
  pinMode(GROUND_JOY_PIN, OUTPUT) ;  //pin A2 shall be used as output
  digitalWrite(VOUT_JOY_PIN, HIGH) ; //set pin A3 to high (+5V)
  digitalWrite(GROUND_JOY_PIN,LOW) ; //set pin A3 to low (ground)
  
}

int pulseWidth (int angle)
{
  int pulse_wide, analog_value;
  pulse_wide = map( angle, 0, 180, MIN_PULE_WIDTH, MAX_PULE_WIDTH);
  
  analog_value = int(float(pulse_wide)/1000000*FREQUENCY*4096);
  return analog_value; 
}

void loop() {
   delay(200);                    
  int joystickXVal = analogRead(XJOY_PIN) ;
  int joystickX2Val = analogRead(X2JOY_PIN);
  Serial.print(joystickXVal);                //print the value from A1
  Serial.println(" = input from joystick");  //print "=input from joystick" next to the value
  Serial.print((joystickXVal+520)/10);       //print a from A1 calculated, scaled value
  Serial.println(" = output to servo");      //print "=output to servo" next to the value
  Serial.println() ;
  
pwm.setPWM(1, 0, pulseWidth((joystickXVal+520)/10));
pwm.setPWM(0, 0, pulseWidth((joystickXVal+520)/10));


pwm.setPWM(4, 0, pulseWidth((joystickX2Val+520)/10));
}

Credits

somrkmv1997

somrkmv1997

1 project • 12 followers

Comments