Midterm Project Report: The Third Arm

The Third Arm – Justin Lau – Eric Parren 

This project has been quite the challenge to make and have work despite the simplicity of it. To start, after learning from my last project and research, I wanted to make a project that would be simple in both functionality and interactivity, as I feel that the best way to generate interactivity is to make something simple enough for people to figure out to be able to use. I was also inspired by my daily routine of needing to carry multiple bags daily which would quickly tire me, and as such I wanted to make a solution to this issue. Thus, I had the idea of creating a simple prosthetic arm that would attach to one of your actual arms, with the goal that it would be able to assist in carrying around objects for you while freeing up your actual hands for other uses.

Thus, this would lead to my conceptional design.  Since we were limited to the equipment, we were able to borrow from the Equipment Room and cardboard, my conceptional design reflects this as such. Simplicity was key, hence the minimal equipment used, few but key interactive pieces for the arm, and general blocky design of the arm. I drew and wanted a servo to be able to rotate the arm so that it is convenient for the user to move it in a more desirable position, which would be done using a slide potentiometer. I also drew a claw connected to a button to really emphasize the purpose and goal of the design. 

However, actually trying fabricating and producing the design was more challenging than expected. Me and my partner split the work between physically building the design and the coding, in which I was primarily responsible for the building aspect. Shaping and gluing the cardboard together for both the prototype and final design took much longer than I expected, especially considering how the Arduino board, breadbox, and wiring would be able to fit in the arm. Connecting the circuits together was rather straightforward as we took all of our knowledge of the past circuits and made them as such, with a little help from TAs too. Sadly, we couldn’t get the prototype to work with batteries as we were told that they provided too little power for the circuit to work. However, the main issue we ran into for building was trying to support and connect the servo to the two parts of the arm. Our prototype arm used a standard servo for the connection between the two pieces, but it barely held up at the User Testing. We also received feedback in that the button used to open and close the claw was in an inconvenient place to press (which was the forearm). Lastly, we received feedback that the band that is meant for the person to wear on their arm that the Third Arm is attached to wasn’t accommodating to different sizes, and we noticed it would often be cumbersome to wear. After receiving this feedback we would fix most of them in the final design.


Claw Demonstration: https://drive.google.com/file/d/1TnFTx-zXuF9HLrQfc2w7rwOF_7nBqvIB/view?usp=sharing

Hence for the final design, the button was moved next to the slide potentiometer, attached a proper wearable band, and swapped the standard servo for a bipolar stepper motor as we thought it would be strong than the servo in holding up the lower arm. However, while my partner was able to code the stepper motor to be able to function as intended, it wasn’t able to hold up the arm piece as we intended and would stay at a constant place. We didn’t have much time nor ideas at the time to attempt to solve this issue, so we attached a grip to end of the arm for a person’s hand to grip onto for the arm to bend, and they would be able to let up of it to free up their hand once they grabbed onto something with the claw. This is still able to somewhat achieve the goal the project is meant for, that being for the arm to be able to grab and carry things while freeing up the user’s hands. We also discovered that the claw was not able to lift heavy object but that is a limitation of the micro servos we used as they were the only equipment, we were able to use that could fit inside the arm.


Once more, the goal of our project was to be able to create a wearable arm that would be able to carry objects around while free up your actual hands. This aligns with my definition of interaction as I defined interaction as the ability for someone and/or something to use their given capabilities to identify, process, and put into action their ideas (usually on a repeating cycle) within the context or limits of whatever activity they are in or doing at the given moment, in which at least two entities of some kind are required to make interaction possible. In this case, the person themselves and the arm are the two entities interacting with one another, with the person sliding and pressing to control the arm and the arm carrying items for the person. This was to a tea as the final audience were impressed that the arm was able to grab onto objects with decent accuracy and power. However, if we had more time, I definitely would have tried to find a way to make the bipolar stepper motor to be able to support the lower arm and be able to lift and rotate it. I would have also tried to find a way to make the servos for the claws stronger and be able to carry heavier stuff. After seeing some of the other projects that involved a stepper motor as well as feedback from Eric, it was certainly possible. Thus my takeaway from this project is to think more outside the box in order to get things functional. In that way, projects would be more likely to succeed and to really have a mind for creativity and prototyping for the future. 

Final Project Video Demonstration: https://drive.google.com/file/d/1NcSnLXiNKVLOAmxH9f66pFua0tEqmpx3/view?usp=sharing

ANNEX SECTION:
Code: 
 Claw: 

#include <Servo.h>
Servo myservo;
Servo myservo1;  // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0;  // variable to store the servo position
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
int prevButtonState = 1;
void setup() {
  myservo.attach(8);  // attaches the servo on pin 9 to the servo object
  myservo.write(pos);
  myservo1.attach(12);  // attaches the servo on pin 9 to the servo object
  myservo1.write(pos);
  pinMode(pushButton, INPUT);
  Serial.begin(9600);
}
void loop() {
  int buttonState = digitalRead(pushButton);
  if((buttonState == 0 && prevButtonState == 1) && pos == 0) {
    pos = 90;
    myservo.write(pos);
    myservo1.write(pos);
  } else if((buttonState == 0 && prevButtonState == 1) && pos == 90) {
    pos = 0;
    myservo.write(pos);
    myservo1.write(180);
  }
  prevButtonState = buttonState;
 
  delay(10);

* This was adapted from a the tutorial found here:
* https://www.instructables.com/How-to-Control-3-Servo-Motors-using-Push-Button-Sw/

 Rotating Motor:
//

#include <AccelStepper.h>
const int potPin = A0;
int DIR_PIN = 2;
int STEP_PIN = 3;
int EN_PIN = 4;
// Define a stepper and the pins it will use
// AccelStepper::DRIVER means a stepper driver (with step and direction pins)
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
int pos = 0;  // variable to store the servo position
void setup() {
  pinMode(potPin, INPUT);
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);
  // The run() function will accelerate up to
  // the speed set here
  stepper.setMaxSpeed(2000);
  stepper.setAcceleration(2000);
  // Set the desired constant speed for use with
  // runSpeed()
  stepper.setSpeed(2000);
  stepper.setCurrentPosition(0);
  stepper.runToNewPosition(0);
  Serial.begin(9600);
}
void loop() {
  int sensorVal = analogRead(potPin);
  int motorAngle = map(sensorVal, 0, 1023, 0, 100);
  // Serial.println(motorAngle);
  stepper.moveTo(motorAngle);
  stepper.run();
  delay(1);
}

* TA primarily helped in writing this code

Leave a Reply

Your email address will not be published. Required fields are marked *