Tuesday, November 26, 2013

Flex Sensor Controlling a Servo Motor

Below is a simplified process of how flex sensors will control a servo motor. The flex sensor has to be calibrated by finding the range of values it will output through the serial monitor. These values can then be used to ensure a full range of motion for the servo motor.


Parts Ordered and Arduino Code


   Over the past week the group has met and decided on what type of servo motors and flex sensors that were to be used. The parts have been purchased and have either arrived or are currently en route. We will use 2.2" flex sensors manufactured by Spectra Symbol. The servo motors to be used are MG946R servo motors manufactured by TowardPro. We also ordered some male to female jumper wires so there was enough length between the robotic hand and the glove to be comfortable to wear, and some 22k resistors to save space from chaining 10k resistors together on the bread board. Overall the cost of the extra pieces came to about $100.

Below is the code that will be used in the arduino to control the servo motors to create movements in the hand, some values might be calibrated after testing to work better with the final product:
 
//Define sensors and servos
#include <Servo.h> //Includes servo library
Servo finger1, finger2, finger3, finger4, finger5;

 
int servoPin1 = 5;
int servoPin2 = 6;
int servoPin3 = 9;
int servoPin4 = 10;
int servoPin5 = 3;

int flexPin1 = A0;
int flexPin2 = A1;
int flexPin3 = A2;
int flexPin4 = A3;
int flexPin5 = A4;

 void setup()

{
 //Attach the servo objects to their respective pins

  finger1.attach(servoPin1);
  finger2.attach(servoPin2);
  finger3.attach(servoPin3);
  finger4.attach(servoPin4);
  finger5.attach(servoPin5);

 
  // set each servo pin to output;
pinMode(servoPin1, OUTPUT);
pinMode(servoPin2, OUTPUT);
pinMode(servoPin3, OUTPUT);
pinMode(servoPin4, OUTPUT);
pinMode(servoPin5, OUTPUT);

  //Set each flex sensor pin to input: this is necessary
 pinMode(flexPin1, INPUT);
 pinMode(flexPin2, INPUT);
 pinMode(flexPin3, INPUT);
 pinMode(flexPin4, INPUT);
 pinMode(flexPin5, INPUT);

}

 
void loop()

{

  //Defines analog input variables
  int flex1 = analogRead(flexPin1);
  int flex2 = analogRead(flexPin2);
  int flex3 = analogRead(flexPin3);
  int flex4 = analogRead(flexPin4);
  int flex5 = analogRead(flexPin5);


  //Defines "pos" variables as being proportional to the flex inputs.

 int pos1 = map(flex1, 400, 700, 0, 180);
 pos1 = constrain(pos1, 0, 180);
 int pos2 = map(flex2, 400, 700, 0, 180);
 pos2 = constrain(pos2, 0, 180);
 int pos3 = map(flex3, 400, 700, 0, 180);
 pos3 = constrain(pos3, 0, 180);
int pos4 = map(flex4, 480, 640, 0, 180);
pos4 = constrain(pos4, 0, 180);
int pos5 = map(flex5, 400, 700, 0, 180);
pos5 = constrain(pos5, 0, 180);

 
  //Tells servos to move by the amount specified in the "pos" variables
 finger1.write(pos1);
 finger2.write(pos2);
finger3.write(pos3);
 finger4.write(pos4);
 finger5.write(pos5);

}




Tuesday, November 12, 2013

Motion Study of a finger

                For the past couple days the group has been messing around a little bit in SolidWorks, trying to see if we can match the shape and movement of a hand. To start off we did a basic design of a pinky. It took 6 separate parts to create the assembly, with each link in the finger being 2 parts. Even though physically constructing it may be more of a hassle with more parts, we believe stringing fingers to the servo motors will be easier with shorter pieces. At the end of the day this video is what the group came up with and it looks on par for how a finger actually moves when a hand is closing.


                   We also came up for some basic dimensions of the hand. As of now the whole pinky assembly is .47 cubic inches in volume. This may have to be adjusted in time as it is the smallest piece. Other options may be printing it out less dense, or put some holes through the design to free up some space. For now we'll continue on as planned and if it becomes evident we're going to be grossly over volume we can adjust the dimensions then without too much hassle.

Thursday, November 7, 2013

Choosing A Project

As we all know there are hundred upon hundreds of things can be created using an Arduino board, so just choosing one in itself is a challenge. After scouring the internet and many "top Arduino projects" Google searches we were able to dwindle it down to a few. We came across a pretty cool website called DIY Drones (http://www.diydrones.com) that had all types of R/C drones by land, sea, or air. It seems like a pretty active community with everybody trying to share their ideas with one another.


After looking at the logistics of cost, designing, and programming one of these machines we decided it might be outside the scope of difficulty and time we are aiming for.

After doing some more research into possible projects we came across a 3D printed human hand that was controlled via strings attached to servo motors which were in turn controlled by flex sensors sewn onto a glove.

Something to the effect of the video shown below, although this one is controlled by linear potentiometers instead of flex sensors.




As of now the group is analyzing what it will take to create this device to see if this is an endeavor that is worth following.