Fab Lab 3 - Prosthetic Arm 2.0

- Mon.1/22/18 to Wed. 1/24/18 

I received an orientation for the class, made new pages on my website, and made a list of ideas for projects. Here is the list of ideas:

-Robotic Prosthetic arm for Jonah
-Fish tank with pump system and lights
-VTOL drone
-Irrigation system with water pump
-Renewable energy power bank

My independent projects will be: 

-Robotic arm
-VTOL drone

I discussed the arm project with Mike and decided on a simpler prototype to begin with. From there I can take the knowledge learned and build a more complex design. Files and instructions are published here on thingiverse:

https://www.thingiverse.com/thing:1691704 

The VTOL aircraft project will begin while I am waiting for parts to be completed in the arm setup.


- Thursday 1/25/18 Absent from class

- Friday 1/26/18

Today I downloaded files for the Robotic arm and set them up to print on the Makerbot Replicator 3D printer. Settings as follows:


I used support for only one of the forearm pieces. All others will not need it. 


- Monday 1/29/18

Today I retrieved the printed arm parts. I peeled off the rafts and chiseled the dense support material out of the forearm piece that needed it. all of the prints turned out very nice. I began to compile a parts order list that I will need before continuing the project. I managed to find several of the needed parts in the fab lab, such as fishing line and glue. There are also Arduino Nano boards, the computer chip used in the robotic prosthetic.


- Tuesday 1/30/18

Completed the parts list, finding best deals on two sites to order from. Sent email to teacher with list. 

I also watched videos on assembling the arm to familiarize myself with the process. 

https://www.youtube.com/watch?time_continue=9&v=RJNDjnWV8Eo 


- Wednesday 1/31/18

I revised the parts order to include only compatible parts from Amazon. I also looked at the Arduino Nano's available in the Fab Lab and decided that I will not need an expansion board.


Then I did more research on assembly of the arm.

- Thursday 2/15/18

Parts came in for the arm today. I un-packaged and checked each one.

Next I filed down the servo mount inside the 3D printed forearm and slid the two servos in to check their fit. It is spot on. The servos will be held down later with screws and/or hot glue.


- Friday 2/16/18

Today I began to solder the Arduino Nano pins on so that I can press fit it into the expansion board. The orientation is incorrect but I can still see the Nano pin labels.


- Wednesday 2/21/18

I finished soldering the Nano board and began to thread the paracord through fingers of the arm. This was very difficult and we had to use a heat gun to cauterize the end of the cord. I only managed to start the pointer finger.

- Thursday 2/22/18 (half day) to Wednesday 2/28/18

Over the course of these days I continued to tediously thread the paracord through each finger joint and the hand. The cord is a few millimeters too thick even at a cauterized end, so I used fishing line as a tow rope to pull the strands through. 


- Thursday 3/1/18 to Friday 3/9/18

Over this period of time I used Inventor, a CAD program, so design and test print two different styles of phone stand for a friend. On is flat with a slot, the other is a standing version. In between prints I continued the difficult process of attaching fingers to my prosthetic hand.







- 3/12/18 to 3/22/18

During this time I printed out final copies of the flat phone stand. 


I also managed to string the last finger on the hand with paracord. Then, I threaded 100lb test fishing line through each finger and up the hand, with a lot of extra slack sticking out the back.


Next, I found that the fingers did not rebound enough after being pulled in. So I used small screws and rubber bands to make a tension system that brings each back when force is taken off the strings. 


Finally, I drilled a hole through the base of the hand and forearm piece to create space for a bolt that binds the two together during testing. Next up I will be attaching the fishing line to the servos and hooking up an Arduino Nano.



- 4/2/18 to 4/10/18

During this two week time, I began by gluing the hand and forearm pieces together, then clamping them together while it set.



Next, I hot glued the servos in place. Then I tied off the fishing line tendons to the servo horns.

Next, I began to design and construct my wire harness for the prototype version. It will be powered by a 5v power supply with a switch on the positive lead. 



With the servos connected to the arduino and both powered, I began to copy and edit the code for testing the servos.

------

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1500);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(500);              // wait for a second
}


#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degrees to 90 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 90; pos >= 0; pos -= 1) { // goes from 90 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}


#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int pos = 120;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object

}

void loop() {
  for (pos = 120; pos <= 300; pos += 3) { // goes from 0 degrees to 90 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(20);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 300; pos >= 120; pos -= 3) { // goes from 90 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(20);                       // waits 15ms for the servo to reach the position
  }
}




#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int pos = 120;    // variable to store the servo position

Servo myservo1;  // create servo object to control a servo

int pos1 = 90;   // variable to store the servo position

void setup() {
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object
  myservo1.attach(12);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  
  for (pos = 120; pos <= 290; pos += 2) { // goes from 0 degrees to 90 degrees 
    myservo.write(pos1);              // tell servo to go to position in variable 'pos'
    delay(20);                       // waits 15ms for the servo to reach the position
  }
   
  
  for (pos = 290; pos >= 120; pos -= 2) { // goes from 90 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(20);                       // waits 15ms for the servo to reach the position
  }
  
     for (pos1 = 120; pos1 >= 90; pos1 -= 2) { // goes from 90 degrees to 0 degrees
        myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
        delay(20);                       // waits 15ms for the servo to reach the position
  }
  
     for (pos1 = 90; pos1 <= 120; pos1 += 2) { // goes from 0 degrees to 90 degrees
         myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
        delay(20);                       // waits 15ms for the servo to reach the position
  }
}




#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int pos = 120;    // variable to store the servo position

Servo myservo1;  // create servo object to control a servo

int pos1 = 90;   // variable to store the servo position

void setup() {
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object
  myservo1.attach(12);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  
  for (pos = 120; pos <= 200; pos += 2) { // goes from 0 degrees to 90 degrees 
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(20);                       // waits 15ms for the servo to reach the position
  }
   
  
  for (pos = 200; pos >= 120; pos -= 2) { // goes from 90 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(5);
  }
  
     for (pos1 = 100; pos1 >= 10; pos1 -= 2) { // goes from 90 degrees to 0 degrees
        myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
        delay(20);                       // waits 15ms for the servo to reach the position
  }
  
     for (pos1 = 10; pos1 <= 100; pos1 += 2) { // goes from 0 degrees to 90 degrees
         myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
         delay(5);
  }
}



#include <Servo.h>

Servo myservo;  // create servo object to control a servo
int pos = 120;    // variable to store the servo position

Servo myservo1;  // create servo object to control a servo
int pos1 = 90;   // variable to store the servo position

int val;
int analogpin = 3;

void setup() {
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object
  myservo1.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 

{
     val = analogRead(analogpin);
     Serial.println(val);
     if( val < 550){
         myservo.write(200);              
         delay(20);                     
       }

  else{
      myservo.write(120);
      delay(20);
      }
}


#include <Servo.h>

Servo myservo;  // create servo object to control a servo
int pos = 120;    // variable to store the servo position

Servo myservo1;  // create servo object to control a servo
int pos1 = 90;   // variable to store the servo position

int val;
int analogpin = 3;

void setup() {
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object
  myservo1.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 

{
     val = analogRead(analogpin);
     Serial.println(val);
     if( val < 250){
         myservo.write(120);              
         delay(15);                     
       }

  else{
      myservo.write(val/5);
      delay(15);
      }
}


#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 0;   // variable to store the servo position

int val;
int analogpin = 1;
int val2;
int analogpin2 = 2;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() {
  
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 300) { for(pos1 = 0; pos1 <= 50; pos1 += 2);
      servo1.write(pos1);             
      delay(20);                       
  }
  
  else{ for(pos1 = 50; pos1 >= 0; pos1 -= 2)
      servo1.write(pos1);
      delay(20);
  }


}


#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() {
  
  {
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 400) { for(pos1 = 0; pos1 <= 60; pos1 += 2);
      servo1.write(pos1);             
      delay(20);                       
  }
  
  else{ for(pos1 = 60; pos1 >= 0; pos1 -= 2)
      servo1.write(pos1);
      delay(20);
  }
  }

{
  val2 = analogRead(analogpin2);
  Serial.println(val2);
  if(val2 > 300) { for(pos2 = 60; pos2 >= 0; pos2 -= 2) 
      servo2.write(pos2);             
      delay(20);                       
  }
  
  else{  for(pos2 = 0; pos2 <= 60; pos2 += 2)
      servo2.write(pos2);
      delay(20);
  }
}


}


#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  
  val = analogRead(analogpin);
  val2 = analogRead(analogpin2);
  Serial.println(val);
  Serial.println(val2);
  if(val > 400) { for(pos1 = 0; pos1 <= 60; pos1 += 2);
      servo1.write(pos1);
      delay(20);                       
  }
  else{ for(pos1 = 60; pos1 >= 0; pos1 -= 2)
      servo1.write(pos1);
  }
  if(val2 > 300) { for(pos2 = 60; pos2 >= 0; pos2 -= 2)
      servo2.write(pos2);
      delay(20);
  }
  else{ for(pos2 = 0; pos2 <= 60; pos2 += 2)
      servo2.write(pos2);
  }
  
}




#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 300) { for(pos1 = 0; pos1 <= 60; pos1 += 3);
      servo1.write(60);
      delay(5);                       
  }
  else{ for(pos1 = 60; pos1 >= 0; pos1 -= 3)
      servo1.write(0);
      delay(5fgfh);
  }  
  
  val2 = analogRead(analogpin2);
  Serial.println(val2);
  if(val2 > 300) { for(pos2 = 60; pos2 >= 0; pos2 -= 3)
      servo2.write(0);
      delay(5);
  }
  else{ for(pos2 = 0; pos2 <= 60; pos2 += 3)
      servo2.write(60);
      delay(5);
  }
  
}




#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 250) { /*for(pos1 = 0; pos1 <= 60; pos1 += 3)*/;
      servo1.write(60);
      delay(5);              
  }
  else{ /*for(pos1 = 60; pos1 >= 0; pos1 -= 3)*/
      servo1.write(0);
      delay(10);
  }  
  
  val2 = analogRead(analogpin2);
  Serial.println(val2);
  if(val2 > 250) { /*for(pos2 = 60; pos2 >= 0; pos2 -= 3)*/
      servo2.write(0);
      delay(5);
  }
  else{ /*for(pos2 = 0; pos2 <= 60; pos2 += 3)*/
      servo2.write(60);
      delay(10);
  }
  
}




#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(11);  // attaches the servo on pin 9 to the servo object
  servo2.attach(12);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 250) { for(pos1 = 0; pos1 <= 60; pos1 += 4);
      servo1.write(pos1);
      delay(5);              
  }
  else{ //for(pos1 = 60; pos1 >= 0; pos1 -= 4)
      servo1.write(0);
      delay(10);
  }  
  
  val2 = analogRead(analogpin2);
  Serial.println(val2);
  if(val2 > 250) { for(pos2 = 60; pos2 >= 0; pos2 -= 4);
      servo2.write(pos2);
      delay(5);
  }
  else{ //for(pos2 = 0; pos2 <= 60; pos2 += 4)
      servo2.write(0);
      delay(10);
  }
  
}



#include <Servo.h>

Servo servo1;  // create servo object to control a servo

int pos1 = 0;    // variable to store the servo position

Servo servo2;  // create servo object to control a servo

int pos2 = 60;   // variable to store the servo position

int val;
int analogpin = 3;
int val2;
int analogpin2 = 4;

void setup() {
  servo1.attach(2);  // attaches the servo on pin 9 to the servo object
  servo2.attach(3);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() 
{
  
  val = analogRead(analogpin);
  Serial.println(val);
  if(val > 350) { for(pos1 = 0; pos1 <= 60; pos1 += 5);
      servo1.write(pos1);
      delay(10);              
  }
  else{ //for(pos1 = 60; pos1 >= 0; pos1 -= 5)
      servo1.write(0);
      delay(5);
  }  
  
  val2 = analogRead(analogpin2);
  Serial.println(val2);
  if(val2 > 350) { for(pos2 = 60; pos2 >= 0; pos2 -= 5);
      servo2.write(pos2);
      delay(10);
  }
  else{ //for(pos2 = 0; pos2 <= 60; pos2 += 5)
      servo2.write(0);
      delay(5);
  }
  

}



Comments