Introduction: Building an Exoskeleton for the Google Science Fair

About: My whole life I have thought of ways to make things that you can only go out and buy, follow me and I will teach you how to make all sorts of things. Praise carbon!

I would like to share a project that I've been working on for the last few months. Its an Exoskeleton that uses artificial muscle to move instead of hydraulics or servos. In this Instructable I aim to explain my build process and talk about my project.

The Google Science fair is a global science competition aimed at getting kids excited about science. Its is obviously sponsored by google as well as other sponsors like National Geographic, Scientific American, Lego Education, and a few others. Its free to enter and all entrants have a chance at winning some great prizes like a $50,000 grant to pay for furthering the winners education or developing his/her project. Some other prizes include various trips to exotic places and smaller cash prizes. if you would like to see my full project you can click here.

For my project I built an Exoskeleton that uses nylon Artificial muscle which can be made from Fishing line. I made an Instructable about how to make these which can be found here. The frame is made from wood and has one muscle on top of the arm and one on bottom. I used a 3d printer make some bars that would be screwed to the wood and would be used to attach the muscles to the arm. I created a heater which would heat the muscle to the ideal temperature which I found to be approximately 150 degrees(f), I was able to calculate this using an equation I made. I then used an Arduino to control the muscle contractions with some code that I wrote which I will go over later in this Instructable.

Thank you for all your support, and tips to help me improve my instructables. Without you guys I wouldn't be doing this right now, you can expect many more Instructables in the future so don't forget to follow me and/or favorite this instructable. If you have any question or concern then be sure to comment, or if you just want tell me how awesome this is, that's fine too. Here it is, hope you enjoy it. Don't forget to vote for me, thank you.

Step 1: Main Frame

In this step I will talk about the frame that holds the whole thing together. Like I said earlier it is made out of wood, specifically oak wood because it is a very strong wood. I hand carved the 3D model you see in the picture above because I don't own a 3D printer and I don't have enough money to pay someone else to print something of this size for me. Its design has some slits in the ends with rounded edges to form a hinge that will be able to move freely with the user. A bolt slips through a washer, then the holes of the two parts, then another washer, and is secured by a nut.

Step 2: 3d Printed Parts

In this step I will talk about the parts that I had 3D printed. The are small rectangular pieces that have a rough side with three screw holes evenly placed to allow the muscles to easily be attached to the wood frame. The rough side pushes the muscle up against the wood to prevent the muscle from slipping out when it is stretched. The muscles are also covered in wood glue before being compressed by the 3D printed part.

Step 3: Attach the Muscles to the Frame

Like I talked about In the previous section, the muscles are placed and glued between the 3D printed part and the wood. I have 16 muscles on the top and the bottom allowing the arm to have an even amount of force on each side. This is done so that the muscles are all stretched to allow them to contract once heated.

Step 4: The Electronics

The electronics are fairly simple. All it is, is an N-channel mosfet per muscle and a push button with a 10k resistor for every two muscles. Its all soldered to a bread small strip board and it has enough mosfets for four muscles(2 arms). it also has room for two push buttons to be attached. The whole system is controlled by an Arduino Micro, but a separate battery is needed to supply more power to contract the muscles. This battery is attached to the mosfets which is triggered to send pulses from the Arduino.

Step 5: Code

Code:

/*
Google Science Fair entry: Exoskeletal Arms Using Artifitial Muscle
This code will contract an artifitial muscle when a button is pressed. it creates a one second
pulses to keep the wire from over heating, if it were supply a constant current the wire would overheat
and would either melt itself, melt the muscle, or destroy the battery. this would not be very good
for the user.
There are four muscles and two buttons.
The circuit:
* mosfetA gate pin(muscleA) on pin 12
* mosfetB gate pin(MuscleB) on pin 13
* mosfetC gate pin(MuscleC) on pin 2
* mosfetD gate pin(MuscleD) on pin 7
* buttonA attached to pin 9 and +5v
* buttonB attavhed to pin 4 and +5v
* 10k ohm resistor attached to pin 9 and ground
* 10k ohm resistor attached to pin 4 and ground
* notes:
-muscles ues heat to contract
-mosfets run on 6 to 12 depending on the outcome of the equation
-steel wire is used to heat the muscles

created 2015
by Anders B-L for the Google Science Fair 2015
last edited 3/17/2015
*/
// constant integers
const int buttonA = 9;//pin 9 is now called buttonA
const int buttonB = 4;//pin 4 is now called buttonB
const int muscleA = 12;//pin 12 is now called muscleA
const int muscleB = 13;//pin 13 is now called muscleB
const int muscleC = 2;//pin 2 is now called muscleC
const int muscleD = 7;//pin 7 is now called muscleD
// integers
int buttonStateA = 0;//buttonStateA is now equal to zero
int buttonStateB = 0;//buttonStateB is now equal to zero
//where you declare all your vriables
void setup() {
//outputs
pinMode(muscleA, OUTPUT);//declares muscleA an output
pinMode(muscleB, OUTPUT);//declares muscleB an output
pinMode(muscleC, OUTPUT);//declares muscleC an output
pinMode(muscleD, OUTPUT);//declares muscleD an output
//inputs
pinMode(buttonA, INPUT); //declares buttonA as an input
pinMode(buttonB, INPUT);//declares buttonB as an input
}
//creates a repeating loop
void loop(){
//read the state of the button
{buttonStateA = digitalRead(buttonA);
//it checks the state of the button
//if button is pressed, muscleA will compress and muscleB will loosen
if (buttonStateA == HIGH) {
//muscleA is on, muscleB is off
digitalWrite(muscleA, HIGH);
digitalWrite(muscleB, LOW);
delay(1000);//pause for 1 second
digitalWrite(muscleA, LOW);
digitalWrite(muscleB, LOW);
delay(100);// pause for 100 milliseconds
}
//if button is not pushed, muscleB will compress and muscleA will loosen
else {

//muscleA is off, muscleB is on
digitalWrite(muscleA, LOW);
digitalWrite(muscleB, HIGH);
delay(1000);//pause for 1 second
digitalWrite(muscleA, LOW);
digitalWrite(muscleB, LOW);
delay(100);// pause for 100 milliseconds
}
}

//does the same thing as the first part, just with the other arm
{buttonStateB = digitalRead(buttonB);

if (buttonStateB == HIGH){
digitalWrite(muscleC, HIGH);
digitalWrite(muscleD, LOW);
delay(1000);//pause for 1 second
digitalWrite(muscleC, LOW);
digitalWrite(muscleD, LOW);
delay(100);// pause for 100 milliseconds
}
else{
digitalWrite(muscleC, LOW);
digitalWrite(muscleD, HIGH);
delay(1000);//pause for 1 second
digitalWrite(muscleC, LOW);
digitalWrite(muscleD, LOW);
delay(100); // pause for 100 milliseconds
}
}
}//closes script

The following code is written in Arduino C/C++, it is used to control the muscles. To explain what is happening to the Arduino illiterate people, the muscle in the bottom of the arm is sent 1 second pulses to keep the steel wire at 150 degrees(f). if the users arm lifts then a button is pressed causing the bottom muscle to stop contracting and top muscle to start receiving those 1 second pulses thus contracting, and moving with the arm helping the user lift objects. This code is written to work with two arms(four muscles) and Two buttons.

Step 6: My Equation

The picture above shows my equation that I created using the Joule heating equation, here is a link to the document explaining how I derived the equation:

https://docs.google.com/document/d/1at-TwoJmr2MmRWZ4RoVaoSnYaP0fOHhoFC-KtDp-8N0/edit?usp=sharing

Step 7: Muscle Heater

This device that I designed is made from mylar, steel wire, and foil. I bent the wire into a squiggle shape then folded a piece of mylar over it that reflects the heat and directs it towards the muscle. The heater is attached to the muscle using foil which further helps prevents heat loss. This system I found works very well.

Step 8: My Experiment/Conclusion

For my project I had to figure out which Temperature would work best for my project. I ran three trial of three different temperatures, these temperatures are 125(f), 150(f), and 175(f). I heated three muscles at these temperatures and found that 125(f) was too cool, 175(f) almost broke the line, but 150(f) contracted it and was ideal.

Thank you for all your support, and tips to help me improve my instructables. Without you guys I wouldn't be doing this right now, you can expect many more Instructables in the future so don't forget to follow me and/or favorite this instructable. If you have any question or concern then be sure to comment, or if you just want tell me how awesome this is, that's fine too. Here it is, hope you enjoy it. Don't forget to vote for me.

I had a lot of fun doing this project and I hope to have to opportunity to take it further, Thank you for checking out my project. ;-)