In the past few months I have built a robot that is controlled by an Arduino. I recently stumbled upon the OWI-535 robotic arm arm which seems to be controlled by a simple remote control. I think it would be trivial to hack this, but has anyone ever tried this before? I've seen various videos, but nothing more than that.
this message is to appease the board bots.
Hey,
Yes, I too was enamored by the prospect of a $50 robotic arm.
After a couple of hours of putting the arm together and a couple of hours of soldering, I have achieved my goal.
The arm is extremely convenient to hack, the controller gives you huge solder points to work with:
Here's what it took:
- 10 relays (I used OMRON G5LE-14)
- 10 diodes
- 34 long-ish wires (~10cm)
- 6 short-ish wires (~2cm)
- solder
Total price for that stuff was probably about $3-4.
It would probably be easier to use transistors, but I decided to use relays so that I could reuse the circuitry for any motor/power supply regardless of AC/DC/voltage.
Here's how I wired these things up:
I used the diodes to protect from high-voltage surges resulting from switching the relay coil off. Relays
I don't know if they're necessary with these relays, but I figure they can't hurt (especially since they cost 1.9 cents).
And here's some control code for it (using digital pins 2-11)
//inputs
int current = 0;
void setup()
{
Serial.begin(9600);
for (int i = 0; i < 13; i++){
pinMode (i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop()
{
if (Serial.available() > 0)
{
int command = Serial.read() - '0' + 2;
if (current != command){
digitalWrite(current, LOW);
current = command;
digitalWrite(current, HIGH);
}
delay(15);
} else {
digitalWrite(current, LOW);
current = 0;
}
}
that takes characters '0'-'9' over serial as input.
here's a sample processing program to control it using numbers 0-9 on the keyboard:
//import Serial communication library
import processing.serial.*;
//init variables
Serial commPort;
void setup()
{
//init serial communication port
commPort = new Serial(this, "/dev/ttyUSB0", 9600);
}
void draw()
{
//get command
if(keyPressed){
commPort.write(key);
}
}
If there's enough interest i'll make an instructable for this.
It's hard to recommend this arm for anything but its cheapness. the plastic components seem like they'll hold up, but the motors are pretty weak and I've already had one (the gripper motor) die on me.
However, for the $75 (incl. arduino), I'm certainly happy.
Wow, thanks! So now that I can see that it can be controlled with an Arduino, is it worth it in your opinion? You say the motors are a bit weak, but I only want to be able to lift a little bit, maybe 100-200g max. Do you know how much you can reliably lift with it?
Yeah, 100-200g should be no problem for this guy.
The reason one of my motors died (I think) is because I was lifting a 3/4 full coke can and it spilled
Since I'm using it as part of a bar monkey I think I'm going to cover it in a trashbag and tape/rubberband it snug.
Good luck! Let me know if you have any ?'s or want some better pictures/diagrams.
Okay, great! Also, are the motors servos, or would I need to measure the speeds of the motors to find how long to power them for?
They're just dc gearmotors.
The motors move at slightly different speeds because the weight of the arm that each joint has to support is different, so forward kinematic modelling using timing could be difficult depending on the application.
I'm planning to use potentiometers (because they're cheap) as encoders to do inverse kinematic modelling.
Interesting... Do you mean that you are going to mount potentiometers at the joints, so that the resistance can be converted into positions? I think that's pretty ingenious, but too complicated for me. I'm thinking of using an accelerometer, but I'm not really sure yet.
Yah, but attaching round pots should be pretty straightforward:
- attach analog in, pwr & ground
- superglue pencil to both sides of pot
- rubber band pencils to arm so that it has some give
Accelerometers will work great, but they will require cpu time and cost about 100 times as much
Accelerometers will work great
Will they? I would have thought that they would be quite poor for determining absolute position due to noise and drift. Plus the resolution would not be too good either.
An other option would be to use a rotary encoder, you could get two from an old mouse.
You could hack some servos in rather than the dc motors, no need for pot's or accelerometers then...
Problem with that is the gearing, the servos would have to directly control the arm through no gears. That would then limit the amount of torque you could get.
That depends on how creative you got, it wouldn't be too difficult to adapt a pinion gear to a servo output shaft, attaching directly to the servo arm wouldn't be such an issue either, you can get servo's with huge amounts of torque...
Hitec HS-985MG is rated at 9.6kg @ 4.8 volts, that's allot of torque! you'd be close to or over 10kg at 5v
http://www.hitecrcd.com/servos/show?name=HS-985MG
I know they can be expensive, but 10kg of torque on the hand/claw could easily break/squash things.
I have a 965MG in one of my cars and you cannot stop it from turning by holding it, it's incredible, and that's only 7.9kg @ 4.8volts.
Replacing motors with servos:
This will be tricky because the motors are embedded in the gearboxes, which are themselves a structural member of the arm. it's been a while since I had this arm open but I think you might need an elbow joint or some crazy dremel skills to interface with the gears. I haven't seen a servo small enough to fit inside the gearbox, but you might be able to go that route too.
The claw motor (the one that I broke) is slightly more accessible than the others, so I was planning to replace it with a servo. Originally I was going to bypass the gearing but this discussion has convinced me to use the gears and go for epic torque I'll let you know how it goes.
On accelerometers:
I've had great success putting an accelerometer on a wheeled platform, but never used one for an arm. My hunch is that it would work pretty well but I really don't know.
Hows this for small:
http://www.hitecrcd.com/servos/show?name=HS-85MG
You can get smaller as well, I have a servo sitting on my desk that is 20x10x20mm out of a small rc helicopter, in fact I have a micro heli that has even smaller servo's, 18x6x18mm however the torque from servos this small would be pretty pathetic.
As a reference an Australian 10 cent coin is 23.5mm in diameter.
Elif, is it any chance for tutorial for that? I have already purchased a Robot Arm but not sure what set of Arduino buy too.
I'd be interested in some pics of the pots attached to the arm's joins...
I got one of these arms in the hopes to experiment with inverse kinematics. But I wasn't aware that it has only gearboxes and no clue of position.
I too bought one of these arms, but mine was the USB version and not the remote control one, i didnt have an Arduino then, so i used a PIC chip and ditched the USB board.
This is what i did and found whilst playing with mine, most of the joints have qute a bit of backlash or slack, so matter what you do, unless you replace the motors with servos and work overtime with a dremel, the arm will never be very accurate.
So the first thing i did, was to ditch the batteries and used the space to fit a small switch mode power supply, it was a 2.5 amp wall socket unit removed from its case, there is plent of space to hide other goodies as well. I also increased the voltage from 6 volts to 9 volts!!! this gave quicker operation, and better torque of the joints. I strongly suspect the motors are rated at a voltage, higher then 6 volts looking at their speed when removed, they certainly dont complain, and dont even get warm after constant use.
Next was feedback from the various joints, this turned out to be quite easy. I used small 4K7 enclosed preset pots. on the end of each motor, where the joints fit, there is a small crosspoint screw that remains stationary in relation to the joints. Take the preset and glue it to the black plastic joint, then take a thin sliver of tin or metal shaped like a screwdriver blade, poke it through the slot in the pot, and engage it in the slots in the screw, then put a blob of hot melt glue on the slot in the pot to hold the metal strip in place. Now as the 2nd, 3rd and 4th joints move, so will the pots, feeding a variable voltage back to the Arduino, depending on the postion of that joint. The 4th joint, the wrist holding the jaws is a bit fiddly, becase of the lack of space, but it can be done. Motor 1, the base, needs a little engineering to get a pot inside, but it can be done.
Now the $64,000 question, the jaws, i didnt run this motor on 9 volts, i stepped this down to 5 volts as there is enough torque there, i also changed the rubber to give a better grip. Next i stripped down the gripper, and removed the white plastic parts that acted as a slipping clutch, these bits were then cleaned with alcohol to remove any grease and glued the parts together so the slipping clutch was now solid and transferred the full torque to the gripper jaws..at this point you are probably thinking ive lost the plot, as these parts are very delicate..
I then used a very simple sensor made by Pololu, part number ACS714, its a Current Sensor -5 to +5A
This current sensor shunt is a carrier board or breakout board for Allegro's ACS714LLCTR-05B-T Hall effect-based linear current sensor, with a range of -5 amps to +5 amps. 2 connections go in one wire to the motor, any one and either way round. The output with no current flowing is a constant 2.5 volts. This device will increase (or decrease) this centre voltage by 185 millivolts for each amp passed through this shunt board. If the motor draws 1 amp, then the output will be + or minus 185 mv from the centre 2.5 volts, ie 2.685v or 2.315mv, depending which way the current is flowing or which way the board is connected. From this, the Arduino will know how much grip has been applied, and shuts the motor down, you can even vary the amount of pressure applied.
The same sensor can be used on the other joints to limit the amount of lift, preventing damage, or even to weigh things!
If there is enough interest... ;D i could be persuaded to dig the arm out, and go through the mods step by step with pictures, my arm had a small video camera, in place of the silly light, i had plans to mount mine on a small tracked ROV
John
If there is enough interest... Grin i could be persuaded to dig the arm out, and go through the mods step by step with pictures, my arm had a small video camera, in place of the silly light, i had plans to mount mine on a small tracked ROV
I for one would certainly be interested in seeing these mods; I bought one of these arms, and have yet to assemble it. I was planning on trying a feedback mechanism as well of some sort, and I would be interested in seeing pics of your descriptions (though they are pretty clear as-is).
Hi cr0sh,
There isnt really much space inside the arm to do very much,so i would go ahead and build the arm,if you use POTS on the joints,they can be mounted externally,the final 'wrist' motor being the most difficult joint to mount the POT on because of the 2 parallel bars,however with a bit of care,it can be done,alternatively mount the adjustable part of the pot onto one screw, and secure the body of the pot onto the other screw.
For interest,there are some really tiny boxes available, which are used for potting electronic components, some are small enough to mount the pots inside,and then mount the boxes to the arm, protecting the wires and delicate parts.
I managed to find my robotic arm in the attic last night, its nearly survived 2 house moves over the past, so i have decided to do a strip down and rebuild, again if there is enough interest, it may be worth the effort to go into detail.
At the end of the day, it wouldnt be hard to use an Aduino to totally control the robotic arm and achieve some meaningful tactile feedback. However, i am not a very proficient Arduino programmer...yet! as i have only just bought one, however i have extensive experience of PIC's, its only a matter of time and learning. Is there anyone out there with more experience in programming then me, that would be interested in joining forces on this idea?
John