By Josh Berman and Ellen de Mello Koch as part of an Electrical Engineering final year project.
An exoskeleton is the external skeletal structure that supports or protects the body, in contrast to the internal skeleton (endoskeleton) of a human. This Instructable deals with the design and construction of an exoskeletal Arm support.
excerpt from my project report "ANFIS CONTROL OF AN UPPER LIMB EXOSKELETON":
"Many people in the world are confined to a wheelchair due to injuries or illnesses which cause muscle weakness. One such illness is a genetic condition known as muscular dystrophy; patients suffering from this have limited muscle movement which can result in muscle waisting, muscle hypertrophy and muscle pain. This device can give such peoples their independence as well as the ability to function as a normal person."
The Exoskeleton is a robotic arm that assists muscle movement. The wearer attaches the muscle sensors (non-invasive) to the upper arm and shoulder using a mild adhesive. The muscle sensors detect electrical activity produced by the skeletal muscles. The potential generated by the muscle cells is amplified and filtered to produce a change in voltage between 0-5 volts. This signal is read by the Arduino , which then evaluates the voltage range and sets the movement variables of the motor controller. The motor controller determines the direction and speed of the actuators. The actuators are DC motors with a linear direction of motion, the motors raise and lower the forearm and shoulder with a similar movement to that of a human arm, thus assisting the user in his/her basic functionality.
As cost is a major limitation, I will only be making a single arm with the minimum required actuators and sensors, ideally * there would be 3 actuators on each arm, each actuator having two muscle sensors each. In addition, a gripping tool can be added to the end of the arm to act as a hand.
*EDIT* third actuator added, providing 3 degrees of freedom
Step 1: Build Materials
The brain of the exoskeleton is made up of an Arduino Uno coupled with a Pololu Dual Motor Driver Shield (Edit**** 3 Pololu md10a motors controllers used instead of dual controller as a result of the addition of the third actuator) which directs the speed and direction of the two high speed, high powered linear actuators. Each actuator has 750N of force at 12V. The control function comes from the two sparkfun muscles sensors.
Structure: Aluminium frame, 2 x 750N Linear actuators, 12V battery pack, 2x 9V Batteries
Microprocessor : Arduino Uno, 2 x EMG Module (Sparkfun muscle sensor V3), Dual Motor Controller (pololu 12A)
- Each actuator is capable of producing 750N of force, this is roughly 75Kg lifting power. As the motors are hinged and leverage is used to raise the arm, this value is slightly lower.
- Each actuator at no load draws just under 1A of current and maximum 5A at full load.
- This allows us to use a 12V battery. The exoskeleton is self contained and does not require ‘mains’ power. Nor does any electrical output come into contact with the user.
- The arm can be demonstrated separated from the wearer by only attaching the EMG sensors (these sensors are one way signal transmitters, no current can travel towards the user).
Step 2: Linear Actuators
The Linear actuator is much like a geared DC motor but with a linear direction of motion. The high gear ratio allows for a high power and thus these motors are used for heavy lifting. The downside is that the speed is inversely proportional to the force, and buying a high powered actuator often results in a slower motor. For this project, a faster actuator is necessary to mimic the movement of a human arm. Beyond 3cm/s would be ideal but given the availability, the 750N-7mm/s actuator was chosen.
Here is a link to the actual motor:
"This 12 V linear actuator can be used in a variety of heavy-duty applications. The actuators are 12V DC gearmotors that use a worm drive to move a shaft back and forth along its length. The worm drive ensures that the shaft will hold its position even when unpowered. Two limits switches safely stop the motor at either end of its range, while integrated diodes allow it to reverse direction after reaching a limit point if the supplied voltage is reversed. The actuators are mostly metal, and the entire case is sealed to protect against dust and water."
The Datasheet is located on the link above.
Operating Voltage: 12V
Stroke Size: 200mm
Current @ no load: 0.9A
Step 3: Arduino & Motor Driver
The Arduino is a relatively easy to use microprocessor fitted to a dev board. The Arduino micro can be coded in 'C' and has many easy to use libraries.
The Arduino Uno R3 can be purchased from this online store:
The Arduino does NOT come with a cable(square printer cable) or a software cd.
You can download the Arduino IDE from the Arduino website:
The library that the motor driver uses is called the 'DualVNH5019MotorShield' and can be downloaded from the following link:
This Motor driver allows us to drive two high-power motors through one compact unit, (2 x VNH2SP30 chips) .
Pololu 12A Dual Motor Driver:
Before using this unit i recommend visiting the following website:
When stacking the Driver shield on top of the Arduino, the pins will line up with the output pins of the Arduino, and hence when coding, one must make sure one has set those pins accordingly.
WARNING: do not power the driver from the Arduino and the usb at the same time. this will blow the Arduino regulator chip.
Setup and testing of Arduino + driver shield:
- Startup the Arduino IDE.
- Install required drivers for Arduino Uno , in windows this will not be done Automatically.
- Add the Motor driver library to the Arduino Library folder.
- Open the Downloaded library folder and open up the demo driver code.
Physically place the driver shield directly on top of the Arduino so that the pins line up as they are labeled.
Make sure that the cap connecting the power of the Arduino to the driver is not connected.
Power the driver with your desired motor voltage in the motor input Vin and GND ports. You should see a blue light come on.
- Plug in the Arduino using the printer cable.
- In the IDE Under 'Tools' Select the correct board -'Arduino Uno'
- In the IDE Under 'Tools' Select the correct com port .
- In the IDE Click the Arrow upload button and the lights on the Arduino should flicker.You should now see green and red lights changing on the motor driver. these lights indicate direction of the motors, left and right.
Step 4: Muscle Sensor EMG
The EMG circuit that I am using currently is the "Sparkfun Muscle Sensor V3 Kit", it can be found at this website:
Follow the connection diagram correctly or the amplifiers can blow, these chips are not cheap and hard to get hold of at the moment.
The EMG requires three electrodes. The reference electrode or ground electrode is necessary for providing a common reference to the differential input of the preamplifier in the electrode. For this purpose, the reference electrode should be placed as far away as possible and on electrically neutral tissue i.e. Bone area. The two signal electrodes are then placed at two different points on the muscle, one in an active area of contraction and the other slightly off center. This gives a point of reference for muscle activity compared to the signal of muscle relaxation.
To test the Muscle sensor out like in the clip above, you can Upload the Arduino code attached to your arduino
Then place the "Processing" code in Processing IDE, an Arduino-like environment which can be used to plot graphs from data acquired by the Arduino.
Download it here (its free):
Some more Information on the EMG can be found in the attached document called "Measurements"
Step 5: Construction of the Arm
View the description of the images. Each image explains what to connect where. The whole process was very touch and go as I had limited scraps of aluminium.
Step 6: Controller
The Forearm originally moved quite slow and the shoulder even slower. The fix for this is to move the actuator connection closer to the hinge point which provides more leverage. The only downfall is that the lifting force is reduced (W = F x d). Do the same with the shoulder.
A seperate controller was designed for biceps,
triceps, anterior and posterior deltoid muscles. The biceps controller used four input membership functions where as the other three muscles only needed three membership functions to achieve reasonable accuracy. The gaussian curve membership function is used .
MATLAB was used to optimise accuracy of the controllers with subtractive clustering. The hybrid training method was used to train the controller using 2500 data samples for each motion.
Step 7: Final Connections and Source Code
- Upload Arduino sketch and disconnect it from the PC
- Place the Motor controller shield over the Arduino so the pins line up
Connect up the EMG outputs to GND and analogue pin 5 and the other one to pin 4
- Connect the actuators wires to output motor 1 and 2 of the controller
- Connect the battery to the input of the motor controller
- Connect the cap that allows you to power the Arduino through the motor controller - make sure the Arduino is disconnected from the PC.
- Place the electrodes on the muscles (Black on the bone area)
Source Code and clips of the arm in action coming soon! As this projects is being built as my final year engineering project, I will need to see when I can supply the code.