Introduction: 3D Printed Robot Arm

Picture of 3D Printed Robot Arm

This robot arm is made almost entirely of 3D printed parts that snap together. It has three servo-controlled joints, plus a rotating base and gripper. The arm is controlled by a series of buttons that connect to an Arduino Uno hidden in the base. A simple circuit makes connecting the servos and buttons to the Arduino easy and makes set-up and assembly very quick.


Step 1: Print the Parts

Picture of Print the Parts

The arm is about 20 inches long, so it takes a lot of time and material to print. The parts are sized to fit on the bed of the Afinia H479 printer, and some can be printed together on the same platform to save time. I used a resolution of 0.25mm and hollow fill for all the parts (other settings were set to the defaults). In addition, I found that I needed to use a raft to both help the part adhere to the print platform and help the printer compensate for my table, which was not perfectly level.

The total estimated print time for the arm is about 32.5 hours, although as mentioned earlier some parts can be printed together (the estimate was done using the print preview function of Afinia's software - my actual print time was difficult to calculate because I was still iterating through designs). Including the raft material, it uses 842.8g of filament, which means it can be printed from one 1kg roll.

Most of the parts have "flat" sides that should face the platform (see images). Many of them also have fairly delicate tabs for holding the cables, so take care when you remove the raft and support material. Study the stl file first to get an idea of where the most delicate areas are.

EDIT: I forgot to include one of the parts in the zipfolder, so I added it separately.

EDIT #2: Since people have been asking, the original Inventor files are now uploaded as well.

Step 2: Arduino Code

Picture of Arduino Code

While you wait for parts to print, work on uploading the code and soldering the electronics.

The Arduino code for controlling the servos is very straightforward. The joints and gripper servos are controlled by a pair of buttons that increase or decrease the servos' positions by one step. The base is connected to a potentiometer that is mapped to its rotation. Depending on the order in which you wire your buttons, you may need to adjust the pin numbers in the code

I recommend testing the code with your servos to make sure that their limits are consistent with those defined in the code. Testing them after the arm is assembled could damage or break it.

The same physical setup can be used with different code if you wish to have your arm do simple automated tasks. (note that there is no positioning feedback, so the accuracy of the arm is limited by the accuracy of the servos)

Step 3: Extend the Servo Cables

Picture of Extend the Servo Cables

Since the servos will be positioned at various points along the arm, the cables need to be extended. Simply cut the cable and solder in an extension between the servo and the connector.

Servo position, Extension length, Number of servos

Base, none, 1 standard servo

Lower joint, 5 inches, 2 standard servos

Middle joint, 10 inches, 1 standard servo

Upper joint, 15 inches, 1 micro servo

Gripper, 18 inches, 1 micro servo

Step 4: Make More Cables

Picture of Make More Cables

Next, make two sets of cables for connecting the circuit board to the Arduino. The servo signal cable has male headers at both ends, each with 6 pins (one per servo). The button signal cable also has male headers at both ends, but they have 8 pins each (one per button). In addition, at one end separate two of the pins from the other six, as they will be plugged in on the opposite side of the Arduino.

Step 5: Build Circuit Board

Picture of Build Circuit Board

The circuit board for the arm is mostly a method for efficiently routing the various wires and signals, rather than a way of adding more components. Start with the resistors, then the various connectors (note that some of them are female and some male). Finally, solder in the connections.

Step 6: Build the Gripper

Picture of Build the Gripper

Once you have your parts, you can start assembly. Begin by pushing the microservo (with the longest extension cable) into the gripper base and route the cable through the channel. Attach the 4-prong horn to the microservo and rotate it to where you want the most "open" position for the gripper to be. Push on the claws, making sure the gears mesh. Push the other microservo into the side of the gripper and assemble the rest of the gripper. The top of the gripper has pins that help hold the claws in place, and may require a small amount of sanding to fit easily (try not to force them, as they may break off).

Set aside the assembled gripper.

Step 7: Build the Lower Segment

Picture of Build the Lower Segment

Now build the lower segment of the arm.

Match the long parts of the arm segment together by their cable channels and push them together. Snap in the 4-prong servo horns, making sure they are pushed all the way to the back. Bolt the servo to its mount, checking that the bulk of the servo is on the interior of the arm segment (see photos). Connect the two halves of the lower segment together using the small braces. The thicker braces go on the side of the segments with the servo horns.

Step 8: Build the Middle Segment

Picture of Build the Middle Segment

Assemble the long sides of the middle segment in the same way as the lower segment, including the servo horns. On the gripper, rotate the upper joint's microservo to one of its limits and push it into the microservo horn, keeping the parts at approximately 90 degree angles. Do the same with the middle joint servo. This will align the servos so that their limits are symmetrical and the joints have a good range of motion. Attach the braces to one side of the middle segment for stability.

Step 9: Route the Cables

Picture of Route the Cables

Starting on the still-open side of the middle segment, gently push the cables into their channels and under the tabs. To make sure that there is enough slack for the moving joints, rotate the part so the cable is as far from the channel as it can be and loosely clip in the cable. Continue to route the cables, carefully removing (and then replacing) braces if necessary to reach the clips. If you use a tool to help clip in the cables be careful not to pinch or accidentally cut the wires.

Step 10: Attach the Arm to the Base

Picture of Attach the Arm to the Base

Attach one standard servo to a servo mount and place both mounts in the rotating base. Place the top two bolts for the second servo in the mount, but do not add the servo. Rotate the mounted servo so it is at one of its limits and gently slide in the arm and press on the servo horn. Push the second servo (rotate it to its limit first) into the other horn and secure it using the remaining bolts. Thread the servo cables through the holes in the rotating base.

Step 11: Build the Base

Picture of Build the Base

Push the final servo horn into the bottom of the rotating base (in my case, the black circular part). Sandwich the top of the base (the part with the circular hole) between the two halves of the rotating base and snap the two halves together. The arm should now be able to rotate while being constrained by the base.

Mount the last servo (this one should have no extension cables) to the bottom of the base. Make sure it is facing the correct direction. Rotate it to one of its limits and rotate the arm to match, keeping an eye on the cables. Push the top of the base into the bottom, meshing the teeth and the servo/horn. If you rotate the arm, you should hear the base servo rotating with it.

Step 12: Make the Control Panel

Picture of Make the Control Panel

The control panel has 8 buttons, a potentiometer, an LED, and an on/off switch. It's easiest to solder leads to all the parts before attaching them to the base (color code the wires: red = power, black = GND, anything else = signal). In addition, add a 220 Ohm resistor to the end of the LED's positive lead.

The buttons and potentiometer I used were threaded and I was able to bolt them around the base. The LED and on/off switch both press-fit into the base. Feed one of the switch's wires out the hole in the side and twist a black wire around it (this black wire will supply ground for the circuit). Once the parts are inserted, attach the knob to the potentiometer.

Next, bundle some of the wires together. The 5V power lines from the buttons will all be powered from one pin on the circuit board. The 8 signal lines should be soldered to a male connector - use a logical order to keep track of which button is which (see the photo for the order I used).

Step 13: Add the Circuit

Picture of Add the Circuit

At this point simply plug the cables from the control panel into the circuit. The header goes to the row of female connectors just under the resistors (the one below that will go to the Arduino). The 5V from the potentiometer and the buttons go to the 5V headers. Ground from the potentiometer, the LED, and the black wire go to the GND headers.

Step 14: Plug in the Arduino and Servos

Picture of Plug in the Arduino and Servos

Using the cables you made earlier, plug in the Arduino. The buttons go to pins 2-7 and A3, A4. The servos signals go to pins 8-13. The power for the LED goes to the 3.3V pin, and the wiper of the potentiometer goes to pin A0.

The plugs from the servos go to the male headers at the top of the circuit board. (see photo)

Test the code at this point - be careful, the arm will "jump" awake and might hit something (aka you). Check that the servos move in the right directions when you push the buttons. If necessary, update the code to reflect how you assembled the arm (some button/servo relationships may need to be reversed - just swap the button numbers in the if statements).

Step 15: Close Up the Base

Picture of Close Up the Base

Flatten the electronics as best you can, and push the control panel onto its matching bottom part. Then close up the two halves.

Step 16: Play!

Picture of Play!

Grab your power supply, and you're ready to go! Since there are six servos, the arm pulls a lot of current (2A on start up and about 1.5A during operation).

Once you have the arm working, you can customize it by adding a different gripper or changing the code to do autonomous tasks.


alans183 (author)2017-05-10

can someone please help me with the cables and where to plug Them in. Plz

VincentD93 (author)2017-03-21

What is the weight of the arm? And how much weight can it raise ?

Thank you.

dr_aws (author)2017-03-08

this is an amazing project, you deserve all the respect for that *claps*

I just have one question, can I use another servo motors ? not the ones you mentioned? or is it I'm going to face a problem with the fitting ?

Ferdinando Donnarumma (author)2017-02-20

Servomotors are not available on the website indicated by the author, where I can buy similar servant? What model is it?

MarcoS108 (author)2016-03-23

what software did you use looks like solidworks

jindo12345 (author)2015-11-09

How far can this arm reach from the base? I need one that can reach 90CM

CristianD1 (author)jindo123452016-03-10

Around 32 cm xD

3DP1 (author)2015-08-24

Hi, I must say very nice project and a very well made robot arm. I am trying to make a similar project but I'm kinda stuck on some issues, and I hope someone in the forum can help me out. My problem is that, I have two exactly the same servos to drive a single joint, but one servo has an offset angle of about 5 degrees from the so they are practically misaligned. How do i align them? Another problem is that, I can't seem to drive them simultaneously. Lastly, how do I stop the arduino from making my servo jump to it's default angle at a high rate of speed. Is there a way to initialize the servo speed before it goes to its default angle, coz everytime I attached the servo to a pin, it jumps to the default angle at very high speed and destroys my arm.

Thanks in advance for anyone who wants to help me.

TimSwift (author)3DP12015-08-25

hello 3DP1:

What servo's are you using?

You might mount the misaligned servo at a slite angle to the other servo to compensate for the misalignment.


xNerdiusMaximusx (author)2015-06-27

Hey Beaconsfield:

Fantastic well-documented build! I have begun making the parts.

What technique did you employ to separate the larger pieces into smaller ones? I know solidworks has a plugin that can break larger parts into smaller bits with connecting features. Did you utilize a similar approach or did you design from the start with a given size print bed in mind?

I am going to be attempting to make a few parts smaller to print off my Printrbot Simple Maker's Kit (100mm x 100mm x 100mm) and will post if and when successful.

Thanks for a great instructable!

jairogj (author)2015-06-14

Hey Tankyou Beaconsfield I'm learning a lot from you, very encouraging. I'm studying the inventor. Listen, you have .ipt missing files, so I can not simulate. You can share or indicate how resolved without them. Example try downloading the instructables Inventor file and open an assembly, will ask some .ipt files, you have them?

Anyway it was brilliant
Thank you
Jairo Jr.

reddadsteve made it! (author)2015-06-07

I made it! As I've said in my previous comments, this instructable was written extremely well. Having no background with electronics I wanted to start implementing motors to my 3D printed projects and found this instructable quite helpful.

As part of my learning exercise I started digging in to the power situation. I was not thrilled when I saw the specs for the Aurduino board to be 7-12V (for non USB power) and the motors to be 5-6V. This instructable uses a single power 5V supply for both (unless I misread something). Instead, I used a stepdown converter (buck). The original 12V from my power supply went to the VIN of the Arduino as well as the buck. I then used the 6V output from the buck as input to the motors. Using the program supplied in this instructable everything ran very smoothly. Great button response, even when all buttons were pressed at the same time.

I learned even more than I anticipated from this project.

Beaconsfield has a great future ahead of her.

Thank you,


P.S-Don't forget to update the bill of materials. The switch should be swapped out with a much smaller one.

344185151 (author)2014-07-21

Can you provide source files? I want to make a bigger o'ne

Beaconsfield (author)3441851512014-07-23

There is a zip folder containing all the .stl files (meshes) for the parts at step 1. However, note that if you simply scale up the parts the servos and buttons won't fit. You also may run into issues where the servos aren't strong enough to move the arm anymore.

CristianD1 (author)Beaconsfield2015-04-05

I also want the source files... I would like to make a bigger one too (from 35 cm of radius to 45cm). Actually, I bought some stronger servos already. I will extend the "curvehorns", but not only the curvehorns, but also the stepper holes must be different, because the new stronger servos are a different size.
So... what do you say?.. please? If I succeed I promise to share here the new files.

Beaconsfield (author)CristianD12015-04-05

The .stl files are in the Instructable. Are you asking for the Inventor files? I have to check that I still have them, but I'll upload them if I do.

Apologies for the delay. The original Inventor files are now in step 2 along with the .stl files.

reddadsteve (author)2015-05-15

Possible issue with the Bill of materials.

I ordered all the items listed using the links provided in this instructable (except for the printer and power supply). The On/Off rocker switch arrived today from Radio Shack and it is a six prong switch, whereas the one in the diagram is a two prong switch. That didn't concern me as much as the fact that the switch is much bigger than the hole provided in the STL file for the base.

Please review. I can change the STL file, but would like confirmation that there is an issue with the switch and that to ensure the integrity of this instructable that you will either update the STL file or change the part required. I've also seen that the base that you printed for your diagrams seems to have a slot for the Arduino board but the STL file supplied does not. Did you post your latest file or decide to leave out the holder for the Arduino?

Overall, I still think this instructable is great and I'm just waiting for the parts to arrive in the mail before I get my printer churning out pieces.

Thank you,


AshK2 (author)2015-05-08

How much weight can it carry?

Early90sClothing (author)2015-05-03


How many degrees of freedom (DOF) are on this arm? Thanks!

langy1949 (author)2015-04-20

zhenhuashao (author)2015-04-20

reddadsteve (author)2015-04-04

Great instructable. Just one sanity question before I jump in and build this. Can I use a 12V 3A power input on the VIN of the Arduino board? It seems that most of the parts should be able to handle the 3A, but I'd appreciate if you can confirm it.

3D printing and CAD designs are my strong areas and I'm looking forward to start adding electronics to my projects.

Thank you,


Beaconsfield (author)reddadsteve2015-04-05

Truth be told the Arduino documentation doesn't list a current limit on the input power, so I can't promise it will work. And it is technically above the current rating for the input pins. However, it ran fine for my system and didn't seem to damage anything (sorry for the poor design). If you're concerned, I would separate the Arduino and servo circuits and run them off separate power supplies.

Good look on branching out into electronics! I found Arduino to be very straightforward when I was first learning and it's great for integration into physical systems.

reddadsteve (author)Beaconsfield2015-04-06

Thank you very much for your prompt reply. I've been scouring the internet and forums to help on this topic as well. Bottom line 'seems' to be that the VIN can handle 12V and as long as the servos do not draw more than 2A at any time, the on board regulator should be able to handle the load.

As this is my first robot arm, I plan on purchasing all the recommended electronics. I'll start playing with the STL's once I get my feet wet and hopefully can start branching out.

As a retired software engineer I'm finding the marriage of 3D printing, CAD, Arduino and Raspberry PI to be a great hobby.

Thanks again,


simlc0523 (author)reddadsteve2015-04-14

Very cool arm. I modified your base to remove the buttons as this will be driven by a Raspberry Pi or Arduino on a mobile platform. As long as the current rating of your power supply meets or exceeds (preferably exceeds) your circuit's requirement, and the voltage rating does NOT exceed the specs, you are okay.

kushal22 (author)2015-03-08

Instead of the power supply, Can I use a LiPo battery?

AkikoTech (author)2015-03-06

Total newbie here. Can you please define the following?

  • Various wires and connectors

This is all that i am stuck on. I just don't know exactly what to get so if someone could help point me in the right direction I would be very gratefull

bakhosrahme (author)2014-12-25

Can you use stepper motors instead?

CristianD1 (author)bakhosrahme2015-03-05

Yes you could, but its unnecesarily complicated. With servos you can use direct control, for steppers you would need buttoms or some other way to get the possition, besides, you would need to modify the model for them to fit.

AtrusM (author)2015-01-26

This is amazing! I am curious, what software did you use do actually design the arm that you printed? I viewed the video in full-screen with the best resolution, but I could not actually read the application name at the top of the window.

After I follow your tutorial I want to try designing some things of my own!

Beaconsfield (author)AtrusM2015-02-11

Thanks! I designed the arm using Inventor. If you are just getting started with 3D design/CAD I would recommend Autodesk Fusion 360 - I think it's free for students and there are a ton of tutorials available.

BrookeH (author)2015-01-25


Great job on this. I am working on printing it out now. If the arm works well, I am planning on using it for another project.

Any chance you would be willing to provide your original design files?

I am using a MakerGear Mendel Prusa to print. I would agree with the other person here that created one of these, there is a lot of filing, sanding, and trimming to do. The issue is that it looks like the fit is real tight on the different tabs and slots. I run into this with my own designs.

With all of the variability in 3D printers out there, even with a fairly well tuned one, I end up designing "slop" into most joints. The tabs and slots work to align the parts for fasteners and/or glue. If possible I use screws/nuts/bolts instead of tabs and slots as well. While the tabs/slots are more convenient in terms of needed hardware on hand, It adds hours of sand-fit-sand-fit-trim-....

I am very impressed with the amount of design effort that must have gone into this.


Beaconsfield (author)BrookeH2015-02-11

Thank you! My goal for this project to use minimal/no fasteners to make a "truly" 3D printed arm. I agree that in general I would use nuts/bolts to make dealing with tolerances easier.

JohnR26 made it! (author)2015-01-20

Thanks for the awesome design. I built one using my Printrbot (and it actually works)! I will be using this as part of a 3D printing demo.

A few lessons learned: 1) make sure you calibrate your printer really well before printing any parts. I spent a lot of time sanding and filing to get the parts to fit. I don't think this was the fault of the design. 2) Most of the parts can be press-fit together, but I found super glue (cyanoacrylate) works great to make sure things stay put. 3) At first I thought I had built my parts too heavy, because the stepper motors could not hold up the weight of the arm. The problem was that my power supply didn't put out enough current to drive the steppers. Once I used the 5v output from an old computer power supply, things started working well.

Beaconsfield (author)JohnR262015-02-11

That's awesome! I'm glad you were able to make it work (even with the same colors!). I spent a long time getting the tolerances just right for my printer, but unfortunately every printer is a little different. And the steppers do take a ton of current. Great job!

bakhosrahme (author)2014-12-25

Can you use stepper motors instead?

mohammed Tarek (author)2014-10-10

iozenc (author)2014-09-30

Excellent work.

-Nate125- (author)2014-09-20

How much was the 3d printer? I love making stuff like this! Can the robot arm screw in a light bulb? Keep up the great work!

Beaconsfield (author)-Nate125-2014-09-24

The printer is about $1400 from Radioshack (

The arm can't turn a full 360 degrees, although if you were really good at operating it you could probably get it to re-grip and finish in a few turns. Maybe that will be the goal if I make a version 2...

pixel5 (author)2014-07-27

What software did you use that was shown on the video?

Beaconsfield (author)pixel52014-07-28

I used the software that is included in step 2 - just direct control of the servos using the buttons along the base.

KyleTheCreator (author)2014-07-18

Wow! If I had a 3D printer that would be the first thing that I would make. Would it work to install Sugru on the tips of the claws to enhance grip on objects?

It definitely would! I spent a while picking up stuff (with varying degrees of success) and Sugru would have helped enormously.

dka13 (author)2014-07-18

I so need to make this

treyes4 (author)2014-07-18

Just when can I win a 3D printer here in instructables I have created so many models waiting to be printed just like this

kenyer (author)2014-07-18

I love your design and color-sceme. Nice job!

It's so cool to see it in action!

About This Instructable




Bio: After a fun time making projects for the Instructables design team, I'm now helping to start the robot uprising.
More by Beaconsfield:Raspberry Chocolate "Blood" SauceQuick-and-dirty Phone HolderSimple Chair Pocket
Add instructable to: