View on GitHub

oddgui

The Helper

The helper is an assistive technology for a person with muscular dystrophy who can not pinch. It is composed of an arm and a controller. The controller is composed of 2 round objects the control the arm sided to side and around itself. The controller has 2 buttons one to open and close the grabber and a preset button that will bring the arm to bring object to the user.

design2

The grabber mechanism motion is very similar to a fun childhood game hungry hungry hippos.

</param></param></param></param></embed>
![For the controller we used bowls because they would be easier to rotate with the palm of your hand.](http://zevenwolf.com/blog/uploads/bowl1.jpg "bowl1")
For the controller we used bowls because they would be easier to rotate with the palm of your hand.
![The controller was designed to be anbidextrous.](http://zevenwolf.com/blog/uploads/internaldesign.jpg "internaldesign")The controller was designed to be anbidextrous.
![We installed buttons to allow for preset commands such as "Bring it to me" and "Grab item"](http://zevenwolf.com/blog/uploads/internalswithbuttons.jpg "internalswithbuttons")We installed buttons to allow for preset commands such as “Bring it to me” and “Grab item”
![This is before the controller was wired in to the breadboard and arduino.](http://zevenwolf.com/blog/uploads/controllerfinal.jpg "controllerfinal")This is before the controller was wired in to the breadboard and arduino. We used big buttons to make it easier for the user who lack dexterity to push them.
![The helper is controlled by two 360 potentiometer and two lighted big buttons.](http://zevenwolf.com/blog/uploads/internalwiring.jpg "internalwiring")The helper is controlled by two 360 potentiometer and two lighted big buttons.
![Russ started with a cardboard mock up of how the grabber will operate.](http://zevenwolf.com/blog/uploads/cardboard-mock-up.jpg "cardboard-mock-up")Russ started with a cardboard mock up of how the grabber will operate.
![Parts are in for the Grabber and Servo for the Arm.](http://zevenwolf.com/blog/uploads/grabberparts.jpg "grabberparts")Parts are in for the Grabber and Servo for the Arm.
![The original design for the grabber the gears went on the outside, then mount for gear, then the axel. This did not let the axel spin 360 degrees.](http://zevenwolf.com/blog/uploads/grabberside1.jpg "grabberside1")The original design for the grabber the gears went on the outside, then mount for gear, then the axel. This did not let the axel spin 360 degrees.
![This is the top design of 1st interation of the grabber.](http://zevenwolf.com/blog/uploads/grabbertop1.jpg "grabbertop1")We kept the main box clear any obstructions down to the rivets in order to have smooth movement for the Grabber.
![This is the interim design that the grabber had. We mounted the axel on the inside which let the axel rotate 360 degrees.](http://zevenwolf.com/blog/uploads/grabbernew1.jpg "grabbernew1")This is the interim design that the grabber had. We mounted the axel on the inside which let the axel rotate 360 degrees.
![This is the side view of the interim design for the grabber.](http://zevenwolf.com/blog/uploads/grabbernewside.jpg "grabbernewside")This is the side view of the interim design for the grabber.
</param></param></param></param></embed>

We initially tested the arm to see how the servo would react to the weight of the servo.

![This was the first install of the grabber. We made the mistake of mounting it on the rear of the grabber. This put all of the weight at the end of the grabber making it too heavy for the servo.](http://zevenwolf.com/blog/uploads/grabberfirst-install.jpg "grabberfirst-install")The required torque power for mounting to the rear of the Grabber was to great for our servo. We cut down the lifting force by mounting the arm closer to the center of the Grabber box.
![In order for us to mount the arm in the center, we had to redesign the Grabber box to include a roof.](http://zevenwolf.com/blog/uploads/grabberfirst-install.jpg "grabberfirst-install")In order for us to mount the arm in the center, we had to redesign the Grabber box to include a roof.
![One stumbling block that we found was the Grabber was binding if drove it from only one side. We had to run a drive shaft to the other side so that they wheels rotated equally.](http://zevenwolf.com/blog/uploads/redesigning-internals.jpg "redesigning-internals")One stumbling block that we found was the Grabber was binding if drove it from only one side. We had to run a drive shaft to the other side so that they wheels rotated equally.
![Quick test to see if the servo can lift the Grabber from it's new mounting point.](http://zevenwolf.com/blog/uploads/grabberweightdistro.jpg "grabberweightdistro")Quick test to see if the servo can lift the Grabber from it’s new mounting point.
![Originally we mounted the arm directly to servo. This put to much stress on center screw on the servo and flexed to much.](http://zevenwolf.com/blog/uploads/smallservobefore.jpg "smallservobefore")Originally we mounted the arm directly to servo. This put to much stress on center screw on the servo and flexed to much.
![The new servo turret takes the stress off the servo but allows the servo to rotate the grabber.](http://zevenwolf.com/blog/uploads/motorbracket.jpg "motorbracket")The new servo turret takes the stress off the servo but allows the servo to rotate the grabber.
![This is the final version of the grabber.](http://zevenwolf.com/blog/uploads/grabberfinal.jpg "grabberfinal")This is the final version of the grabber. We are using a motor to drive the Grabber motion.
![We are using springs to lift the Grabber above the items it intends to grab.](http://zevenwolf.com/blog/uploads/grabberwithsprings.jpg "grabberwithsprings")We are using springs to lift the Grabber above the items it intends to grab.
![Russ testing everything out.](http://zevenwolf.com/blog/uploads/russtest.jpg "russtest")Russ making sure everything works.
</param></param></param></embed>

Pcomp Final – The Helper from Zeven Rodriguez on Vimeo.

CODE

#include

int analogPin0 = 0; // blue up and down
int analogPin1 = 1; // green left right pot
int analogPin2 = 2; // blue pot to control hbridge speed

// pins for buttons
int redButton = 2; // red wire to pin 2
int greenButton = 5; // green wire to pin 5

// pins for lights
int redLight = 10; // yellow wire to pin 10
int greenLight = 11; // white wire to pin 11

// pins for motors
int servo1 = 6; // no color yet left right
int servo2 = 7; // no color yet up down
int motor1 = 9; // pulse pin for the hbridge

int red = 0;
int green = 0;

int analogSensorPin = 0; // select the input pin for the potentiometer
int analogSensorPin1 = 1; // select the input pin for the potentiometer

int formerValue = 0;
int nowValue = 0;
float difference = 0;
float deg = 83;

int formerValue1 = 0;
int nowValue1 = 0;
float difference1 = 0;
float deg1 = 0;

Servo updown;
Servo leftright;
void setup() {
Serial.begin(9600);
updown.attach(8);
leftright.attach(7);
pinMode(redButton, INPUT);
pinMode(greenButton,INPUT);
}

void loop()
{
// read the value from the sensor:

// this reads pot 1
nowValue = analogRead(analogSensorPin);
//Serial.print(“this is pot”);
//Serial.println(nowValue);
difference = nowValue – formerValue;

if(abs(difference) > 500)
{
if(difference > 0)
{
difference = formerValue + (1023 – nowValue);
}
else
{
difference = (1023 – formerValue) + nowValue;
}
}

deg += difference / 30;

if(deg < 0) { deg = 0; } else if(deg > 180)
{
deg = 180;
}

// Serial.println(deg);

formerValue = nowValue;

// this reads pot 2
nowValue1 = analogRead(analogSensorPin1);
//Serial.print(“this is pot1”);
//Serial.println(nowValue1);
difference1 = nowValue1 – formerValue1;

if(abs(difference1) > 500)
{
if(difference1 > 0)
{
difference1 = formerValue1 + (1023 – nowValue1);
}
else
{
difference1 = (1023 – formerValue1) + nowValue1;
}
}

deg1 += difference1 / 30;

if(deg1 < 0) { deg1 = 0; } else if(deg1 > 180)
{
deg1 = 180;
}

// Serial.println(deg1);

formerValue = nowValue;

updown.write(deg);
Serial.println(deg);
leftright.write(deg1);

red = digitalRead(redButton);
//Serial.print(“this is the red button”);
//Serial.println(red);
green = digitalRead(greenButton);
//Serial.print(“this is the red button”);
//Serial.println(red);
}