Brandon Darreff and Evan Hill

For the tech demo 3, we created a gripping arm based on the motion of a finger curling. We aimed to find a simple solution that recreates the complex curling movement.

Mechanical Features:

We laser cut acrylic to make the arm and the base. The base was cut so that it fits together without glue and includes holes to easily mount the servos.  The arm is held together by hollow metal pins. These pins serve as the joints about which the arm moves as well as the structure for the tendons to be threaded through. Because acrylic does not glue well, we opted to drill smaller pins through the hollow pins. While this was more complicated, it led to a much sturdier and cleaner final result. Not using glue also ensured that our joints would rotate more freely as there was no spillover from other parts. To make the arm curl, we attached monofilament tendons which are threaded through the pins in the arm in an opposing fashion. When one tendon is pulled, the arm curls right and pulling the opposite tendon causes it to curl to the left. Each tendon runs from the servo arm to the tip of the arm. Using this setup, we were able to curl three links in both directions simply using two servos.

 

Sensors:

We included two photocells to make the arm more responsive to its environment. The photocells are positioned on opposing sides of the gripping arm. When one photocell senses less light than the other, the servos respond by curling the arm in the direction of the photocell with less light. This enables the arm to sense the presence of an object and move to grip it. As shown in the video, the photocells also react by curling in the opposite direction of a flashlight beam.

 

 

Code:

The code tells the arm to read the two photocells and curl in the direction with less light.

 

//import servo library
#include <Servo.h>;

//assign names to servos
Servo servo1;
Servo servo2;

//set photoresistor input pins as constants
const int sensorPin1 = A0;
const int sensorPin2 = A1;

//define photoresistor input and servo output variables
int photoIn1;
int photoIn2;
int servoOut1;
int servoOut2;

void setup(){

Serial.begin(9600);

//assign servos to digital pins
servo1.attach(9);

servo2.attach(10);

}

void loop(){

//define servo inputs based on photoresistor states
photoIn1 = analogRead(sensorPin1);

photoIn2 = analogRead(sensorPin2);

// if there is more light on sensorPin1 then curl servo2
if (photoIn1 > photoIn2) {
servo1.write(180);
servo2.write(180);
}
// if there is more light on sensorPin2 then curl toward servo1
else if (photoIn2 > photoIn1) {
servo2.write(0);
servo1.write(0);
}
}

 

Prototyping:

We made prototypes out of cardboard as a proof of concept for the curling motion using tendons. Our prototypes also allowed us to determine how far the tendon must be pulled to fully curl the arm.

 

Future Iterations:

If we were to make future iterations, the length of the links as well as the tendon path could be optimized for better movement. The current links are slightly too long and the tendon path is too complex which causes the arm to bind when the servos reach their max torque. One way to solve this is by turning the arm on its side so that the servos do not have to lift the full weight of the mechanism. Using two links instead of three would also lead to less binding and more predictable movements.