Let's Make Robots!

Robotic Arm Control

I have built a robotic arm. You can see it in the robot section. It is called IPTUPED.

Now that it is built i can only prgram it to pick up something that is in the same time. I need a new control method.

Due to the fact that i am pretty new to this i need some ideas. Basically i am asking you guys if you can help me find a good method. I have seen wii and arduino, nd rc. I need a good tutorial online somewhere that can help me control it. So far i have only been able to find a method that can control 2 servos. I am using 4 and maybe 5 in the future. Thanks for any help.


By the way. Can you view the videos, i cant on this browser???

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Say you have 3 servos: Rotate, Sholder and Elbow --Pretty much what you have not including the gripper. You are in position A and you want to goto position B... Smoothly...

You will have (2) sets of (3) variables. One set will be used for the (3) servo's current position. We will call these variables Current1 current2 and current3. Current1 is the current servo position for rotate, current2 is the current position of the sholder and current3 is the current postion of the elbow-joint servo. We have another set of (3) variables that we will use to tell where we are going. Say you want the arm in a new position, you want to "request" a new position. Actually, you want to request a new position for all 3 servos. Thus we will call these 3 variables Requested1, Requested2 and Requested3. Again, these are just different names for b3,b4 and b5.

We start everything by centering all the servos at the beginning of the program. All the servos need to start at say, position 125. Now, "seed" all the "currents" and "requested" with 125. Current1=125, Current2=125, Requested1=125... etc. etc.

Now when we go into the main program loop, the servos are all at position 125, all the "current" variables are at 125 and "where we want to go" (requested) are all at 125 as well. We know where we are, and we want to go where we allready are.

To Make a "Move" you need a simple subroutine. Lets say we just started (so we are centered) and we want to raise the arm. Lets also say that the "raised arm" numbers are: Rotate 125, sholder 250 and elbow 250. First, we make the Requested variables reflect what we want. Requested1=125, Requested2=250 and Requested3=250. Next, you call on your "move servos" subroutine.



If requested1>current1 then current1=current1+1

if requested1<current1 then current1=current1-1

if requested2>current2 then current2=current2+1

if requested2<current2 then current2=current2-1

if requested3>current3 then current3=current3+1

if requested3<current3 then current3=current3-1

servo pin,current1

servo pin,current2

servo pin,current3

pause a little to control overall speed

loop until current1=requested1 and current2=requested2 and current3=requested3 '<--when everything matches, we are where we want to go


That's it --If what you want is different than what you have, step a little until you are there. You may need to add some min/max's to stay on the safe side. It is a chunky way to do it, but it will work fine.

@Chris the Carpenter.

I understand what you are saying. But i dont exactly know how i could program that.

Ok thankyou, do you know of any guides or how-to instructions where i could begin though?

I remembered running across this node:


It shows a little about a teaching 'arm' that was used for simultaneous control of an arm.

It might give you some ideas.

WOW! Man, you gotta slow those guys down! First off, I would add a routine that would allow you to A) know the current servo positions and B) allow you to input some "requested" positions. The routine would then (at any speed you choose) slowly "step" the servos from position 1 to position 2.


If currentA>RequestedA then curentA=CurrentA - 1

if CurentA<RequestedA then currentA=CurrentA +1

If currentB>RequestedB...

Pause a little

If currentA==RequestedA and currentB == requestedB then exit this loop


After that, you could build another identical arm, but with pots at the pivots instead of servos. You could "puppet" the "teaching arm" and the real arm would follow. Nunchuck is good too, as is a couple joysticks, some pots on a control panel, etc. etc.  --Oh, using this "teaching arm", and a EEPROM chip, you can "record" moves as well, and "play them back" later as well.