Build Grippy

The Nano-Driven Robotic Arm

Johann Wyss

Issue 21, April 2019

This article includes additional downloadable resources.
Please log in to access.

Log in

Let us introduce you to Grippy, an easy to build programmable or manually controllable fully articulated robot arm.

BUILD TIME: 8 hours (plus 3D print time)
Fun level: Extreme

Robotic arms are a staple of all modern engineering and fabrication processes. They allow companies to manufacture items many times faster than traditional manpower ever could, and significantly reduces the potential for employees to get hurt or injured in the workplace.

Robot arms can be very fascinating to watch, but can be much more fun to build, program and control yourself.

You will find many DIY robotic arm projects online, which range from very basic arms made from icy-pole sticks and motors to sophisticated and expensive arms with full articulation. Trying to find one that is easy to build, programmable, fully articulating and designed with a reliable gripper is much harder to find though.

This has lead us to design Grippy, a robotic arm project for our readers to build, which uses 3D printed parts you can print at home, and an Arduino at its heart to provide a platform to expand upon.

So here it is, our fully articulated robot arm that you can program or control manually. Most parts are printed using a 3D printer, and commonly available electronic parts and hardware from electronics retailers.

We have broken the build into three parts. The first stage is preparing and printing the 3D printed parts, followed by building and programming the electronics, and finally the full assembly.


It can be quite daunting to design your own robotic arm. The mechanical design of such an articulated device can be very complex. It is something that mechanical engineers obviously study at great lengths, factoring in all the moving parts, force, weight, etc.

We set the challenge to our staff writer, Johann, to come up with an easy to build robot arm using commonly available parts, and using his 3D printing knowledge to provide a design for our readers to print and assemble easily themselves.

After some thorough research online, Johann came across an open source mechanical design for building a robot arm from laser cut 3mm acryilc, called the MeArm.

The design was as simple as it was elegant, and perfectly suited to being modified to make it 3D printable.

It was also important to base the controls on an Arduino to make it easy to build and program. An Arduino would also provide a platform to possibly provide future upgrades. The Arduino Nano with a DFRobot I/O shield was chosen based on it being affordable, versatile, readily available, and proven to work in our Lolly Sorter project from Issue #020.

We thought it was also important to have a gripper on the end of the arm to make it more practical and useful.



The arms movement is achieved via four MG90 servos and a very clever arrangement of levers. This arrangement gives the arm a very impressive range of motion and allows the arm to be controlled with quite significant precision. One servo controls the slew or rotation of the arm. 2 servos control the two booms giving the arm the ability to reach out or in with the final servo being used to control the jaws of the gripper.

To reduce the jitter that servos can make, we recommend using Ferrite toroids on the wires close to each servo. These help reduce a lot of electrical noise, which in turn, reduces the amount of jitter the servo makes.


Despite it’s simple looking design, the talented people at Mime industries did a fantastic job designing the mechanical articulation of this little robot. All of the moving parts work well together to provide a smooth and balanced operation.

We've taken their open source design for 3mm acrylic, and adapted the design so it can be 3D printed.


We need a way to control each of the servos so they can respond to the on-the-fly instructions provided by a human operator.

Servos are controlled by a variable pulse width modulated signal. The signal should have a period of 20ms/50Hz frequency, with a duty cycle between 5 and 10%. This means an ON pulse with a 1.5ms duration tells the servo to go to its 0 degrees position, an ON pulse of 2ms tells it to go to its right extreme. In our case, -90°. An ON pulse of 1ms will tell the servo to go all the way to its extreme left or 90 degrees.

This could easily be done with 555 timers however; the device would be limited to only being controlled by a human. What if however, you wanted a robot arm that can be programmed to repeat actions without the need for a human operator?

With microcontrollers being so inexpensive and versatile, it just makes sense to use them over the older tech. Therefore, we opted to use the Arduino Nano microcontroller development board, it’s small size and low cost makes it ideal for this project.


The microcontroller is only one part of the required control side. We still need a way for the microcontroller to interpret the human operator's instructions. The simplest way to do this is to use potentiometers.

Potentiometers are little more than a voltage divider with variable resistance. As you turn the knob a wiper moves along a resistive element changing the ratio of the voltage divider and, therefore, the voltage at the wiper. We are using 10kΩ potentiometers, so our max resistance is 10kΩ.

We use four potentiometers for this project to control Boom 1, Boom 2, Slew and the Claw.

3D Printing:

We've made all of the 3D print files available on the Resources section of our website for you to download and print.

We thought it was still important, however, to explain how we went from the open source MeArm two dimensional files to the 3D printable files we created.


The first step was to convert the two dimensional .dxf files for the laser cut pieces into a three dimensional .stl file used in 3D printing.To do this, we saved the .dxf file into a PDF using Adobe Illustrator, making sure we retained the 1:1 aspect ratio. Next, we printed that PDF onto 2 sheets of A4 paper to keep it all to scale.

To create the 3D files we used Creo Parametric 3D Modeling Software. Unfortunately, there isn't a magic tool to convert the PDF into 3D objects, so we needed to model each component using a mixture of tracing the original design (using a spline tool), and in some cases, completely re-drawing it.

For simpler parts, like the levers and mounts, it was quicker to just use the dimensions from the PDF using a vernier caliper and re-draw them from scratch into Creo.

For the complex gears, etc., it was time efficient to trace the outline of the object to get the dimensions using a spline tool. To give it the third dimension we simply extruded each piece to 3mm to match the thickness of the acrylic frame it’s designed to be used with. This resulted in the mass of components, and the final result is shown below.


Many of the parts needed significant cleanup. The bottom of each part had a quite a bit of “elephant footing”. Elephant footing is the phenomenon in 3D printing which results in the base of an object being wider than expected. It’s generally caused by having your nozzle too close to the bed and the plastic is pushed outward as demonstrated in the pictured below of the calibration cube from Thingiverse.

To counter this, we would usually just design the parts with a slight chamfer on the edges of half a mm or so. Considering the number of printed parts, this was not practical for this project. We could increase the distance slightly between the nozzle and bed, however, due to the large flat bases we were concerned the parts would lift off the bed and warp. Given it was much easier and quicker to deal with the elephant footing, which is just a matter of carefully removing all the excess material with a hobby knife, we decided just to keep going as is.


After trimming all the pieces, we began to assemble the robot arm using hot glue and M3 nuts and bolts to see how all the pieces fit together.

There were several parts which instantly stood out as needing modification to make them more 3D printable. These being the slew base and the main boom.

The slew base consists of eight parts, which needed to be assembled in a precise order, all interlocking together. To make this easier, we redesigned the part to print as one piece. This required the width of the base to be extended slightly. This was done to allow the second boom servo to be inserted with the servo horn and boom attached which was impossible with the limited room of the original design.

The main boom consisted of three parts arranged in an I beam formation. We simply re-modeled it, keeping the original dimensions, and making a few slight modifications to allow for 3D printing so that it could be printed in one piece, aided by the use of support material.

From there, we re-modeled the base to print as one part. Originally, we designed the part to have internal chamfers to reduce the need for support material, however, the added dimensions meant it took significantly more plastic and longer to print. We reverted to the simple design, which meant the structure must be printed using supports. Given all of the support is internal, it isn’t likely to be seen, so it won’t require significant cleanup.

In the end, out of the 35 original arm pieces, about 6 remain identical to the original design. Consolidating to just 16 arm and 17 controller components also makes the project much easier to print and assemble.

With all that being said, we've saved you from going through all that trouble and provided you with the final print files. Let's no guide you through the process of printing all of the necessary printed parts for the modified arm.


Once you have downloaded the print files from our website you can go ahead and print all sixteen components. If you're wanting to control the arm manually you will also need to download and print the controller portion.

We printed the pieces on a FlashForge Creator Pro at various micron heights to adjust for speed or quality. We used FlashForge black PLA and 3DFillies orange PLA to have two contrasting colours. You can choose whatever colours you prefer.

All of the parts were sliced using FlashPrint. Where possible, we grouped parts on the bed to print several at once. Most of the components did not need to be printed at such a fine layer height, and were only printed at this resolution purely for aesthetics. Feel free to print at a lower resolution for faster speeds.

Controller Notes: We have a one piece controller body as shown here. This is still included, but you'll also find a two-piece version which requires no supports in order to print, using less material.



Due to the size and shape, the controller needs plenty of support material.

  • 300 micron layer height
  • 7 hour print using tree-like supports

NOTE: A_vB modification changes this to 2-pieces, drastically cutting down on print time and support material.


  • 200 micron layer height
  • 30 minute print

C. KNOBS x 4

These four round knobs suit spline type potentiometer shafts. You can use store-bought knobs too if you like.

  • 200 micron layer height
  • 45 minute print


  • 100 micron layer height
  • 2.5 hour print using the tree-like supports


  • 100 micron layer height
  • 3.5 hour print using the tree-like supports

Note: If you are printing the Main and Second Boom on a dual extruder you need to rotate the booms 45 degrees to avoid the second nozzle contacting the support material.


Secures and aligns the jaws of the claw to the claw servo mount.

  • 200 micron layer height
  • 5 minute print


  • 200 micron layer height
  • 7 minute print


  • 200 micron layer height
  • 7 minute print

I. Second boom lever action

Forms part of the 2nd boom lever action.

  • 200 micron layer height
  • 7 minute print

J. claw lever connection

Connects the levers which keep the claw level.

  • 200 micron layer height
  • 11 minute print


Connects to the claw servo and forms one part of the jaw operation.

  • 200 micron layer height
  • 9 minute print


Reinforced claw mount. All claw components are assemble onto this part.

  • 200 micron layer height
  • 35 minute print


Requires printing sitting flat on the build surface and does well with linear support structures supporting the overhang.

  • 80 micron layer height
  • 7 hour print using linear support structures


Attaches to the boom 2 servo and then attaches to boom 2 via a lever.

  • 200 micron layer height
  • 7 minute print


Two required.

  • 200 micron layer height
  • 20 minute print


Transfers the servo movement into the jaws allowing them to operate.

  • 200 micron layer height
  • 8 minute print


  • 200 micron layer height
  • 10 minute print


Print it flat on the build platform using supports to gap the centre overhang.

  • 80 micron layer height
  • 9 hour print using the tree-like supports
1 × Arduino Compatible NanoJaycarAltronicsCore Electronics
1 × Nano I/O ShieldXC4414Z6372CE05101
4 × Metal Geared Micro Servos--DFR0012
4 × (Optional) Plastic Micro Servos^--ADA1143
4 × B10K Linear 16mm PotentiometersYM2758Z6392CE05882
4 × 18x6mm Toroid Ferrite RingsRP7510R2225003-POT10K
4 × M3 × 10mm Metal Standoff Kit*LO1230--
11 × No.4 × 6mm Self-tapping Screws*--FIT0063
8 × M3 × 8mm Bolts*HP0550H1149FIT0224
2 × M3 × 10mm Bolts*--FIT0224
4 × M3 × 12mm Bolts*HP0403-FIT0224
3 × 4-Way Header Socket (or trimmed 40-way strip)--FIT0224
1.5m Rainbow CableHM3230P5390POLOLU-1014
1 × Mixed Jumper WiresWM4516W2510-
1 × 5VDC 1A Mains Power AdaptorWC6027P1017PRT-14284
10 × 100mm Cable TiesMP3144M8903-
Parts Required:HP1196H3980AFIT0343

1 × Arduino Compatible Nano

OPTIONAL:JaycarAltronicsCore Electronics
1 × (Optional) 20mm Dia. × 50mm Heatshrink WH5567 W0917A -
1 × (Optional) Liquid Electrical Tape NM2836T3135-


*Quantity required, may be sold in packs. NB: If your servos do not include screws, you may require additional.

^It is possible to use the plastic geared servos, however, they are significantly more likely to fail prematurely when used in this device. Do so at your own risk. The code will also need to be changed as these have 180° range compared to the 90° of the recommended servo.


The electronics in this project is relatively straightforward.

We are using an Arduino Nano plugged onto a DFRobot I/O shield. To this shield, we simply plug in the four servos, connect 5V power to the screw terminal block, and finally, we connect the wiring loom from our controller.

Most of the effort to build the electronics is in the controller. We need to carefully solder a wiring loom to the four potentiometers. We use coloured rainbow cable to make wiring it all up a little easier. There is a custom made plug we need to put together, but this will make it easier to plug in and out of the I/O board.


The code for Grippy is super simple. You can type in what you see below, or download the files from the Resources section on our website.

We include the Servo.h file, which allows us to change the PWM duty cycle on a pin using one line making it very easy. All we need to do is read the value of a potentiometer on an analogue pin and calculate how that value coincides with a 0° – 90° position, and then write that value out to the servo.


#include <Servo.h>
Servo claw;
Servo boom;
Servo boom2;
Servo slew;
int clawPot = 0;
int boomPot = 1;
int boom2Pot = 2;
int slewPot = 3;
int clawVal;
int boomVal;
int boom2Val;
int slewVal;


void loop() {
  // CLAW
  clawVal = analogRead(clawPot);
  clawVal = map(clawVal, 0, 1023, 0, 90);
  boomVal = analogRead(boomPot);
  boomVal = map(boomVal, 0, 1023, 90, 0);
  boom2Val = analogRead(boom2Pot);
  boom2Val = map(boom2Val, 0, 1023, 90, 0);
  slewVal = analogRead(slewPot);
  slewVal = map(slewVal, 0, 1023, 90, 0);

Assembling Grippy:

With all the printed parts printed, and electronics prepared, it's now time to assemble our friend, Grippy. We have prepared the following thorough step-by-step instructions to help guide you to success. Some areas are a little tricky due to space limitations, however, if you follow these steps carefully, you should have your Grippy coming to life soon enough.


Before you start building Grippy, you'll need to get some basic hand tools. We suggest you have the following:

  • A 3mm drill bit, preferably one you can turn by hand.
  • 7.5mm drill bit (dependent on servo and tolerances).
  • Flush cut side cutters for removing support material.
  • Fine sand paper
  • Small long nose pliers for holding parts and removing supports.
  • Hobby knife for deburring and removing support material.
  • A small set of jewellers screwdrivers with a thin diameter shaft i.e. less than 3mm thick.


The first step is removing all of the support material from the 3D printed components and to tidy them up. Sharp side cutters, hobby knife or sandpaper can help with this task. Some makers also use a hot air blow torch or acetone to clean up ABS.

Make sure you clean all the parts before assembly to avoid having to disassemble the arm, which could lead to accidental damage.

The second step is to attach the slew servo to the base by inserting the servo into the slot from underneath and affixing it with 2 small screws.

If you’re going to attach ferrite toroid to the servos to aid in noise reduction now is the ideal time to do so. We simply loop the cable through the toroid a couple of times and secured it with a cable tie as shown above.

Four 3mm standoffs with bolts are used to secure the DFRobot I/O shield to the base. Next, screw the standoffs directly into the plastic base, put the shield in place and secure with 3mm bolts. To prevent the base slipping around on a tabletop, you can apply rubber feet underneath.

The next step is to secure the slew servo horn to the main slew base using the screws provided in the servo kit. Insert the horn from the top, sliding in under the centre main boom support structure. You may need to enlarge this hole depending on the servo horn and or your 3D printer's tolerances.

Now you need to attach the main boom servo horn to the main boom using the screws provided with your servo kit. Again, you may need to slightly enlarge the inner hole diameter to suit your servo and the tolerances of your printer.

Attach the main boom servo to the main body of the arm making sure the pivot point is closer to the front of the base. On the recommended servos this coincides with the wiring out of the servo body. Now is also a good chance to attach the ferrite toroid to this servo if you’re deciding to use them for noise reduction and servo stability.

Centre the main boom servo using the following code, this will ensure that all of your servos are in their optimum position. Change the value 'xx' in the code below to reflect the position.

int clawVal = xx;
int boomVal = xx;
int boom2Val = xx;
int slewVal = xx;

To reflect the position you’re attaching the servo horn, i.e. if you’re attaching the horn in it’s lowest position middle position or highest position i.e. 0 , 45 or 90 degrees.

Insert the chosen value by replacing the xx. Then upload the code to the Arduino. You then attach the servo, power the device and the sketch will then position the servo at that point.

#include <Servo.h>
Servo claw;
Servo boom;
Servo boom2;
Servo slew;
int clawVal = xx;
int boomVal = xx;
int boom2Val = xx;
int slewVal = xx;
void setup() {
void loop () {
  //Main Boom
  //Boom 2

Now you need to attach the main boom to the main boom servo. We suggest using a thin Jeweller’s screwdriver, as shown in the image above.

You need to secure Part I and the main boom to the centre boom support structure of the main body. Use an M3 × 10mm long bolt to do this. Bear in mind, Part I and the boom both need to rotate on this structure, so both may need their holes enlarged using the 3mm drill bit to ensure free movement. The parts are screwed to the main centre support structure, so do not enlarge the hole on that part.

The robot arm is starting to take shape, the next step is to attach the second boom servo horn to Part Nv. As shown below.

Attach the servo horn and Part N to the servo. Carefully position it onto the main body with the pivot point facing the front of the body.

This is a tricky part of the assembly. There is limited room to position the servo so that the screw can be inserted to secure the horn to the servo. Given the limited space, it isn’t likely the horn can fall out of the servo once it’s secured to the body. However, to secure it in place, all you need to do is slide the servo (with the horn attached) towards the rear of the body. This will give you a small amount of room to screw the bolt to the servo, as shown above.

Next, you need to secure the servo to the main body using the provided screws. Attach a ferrite toroid if needed.

The next step is to secure one of the two levers to the newly assembled second boom servo. The thicker side connects to the servo end as shown below.

Attach the second boom to the main boom by using a M3 × 8mm bolt. Then use another M3 × 8mm bolt to attach the levers to the second boom.

Now we need to attach Part J to the main and second boom using a 10mm M3 bolt. From there we attach a lever to the main body of the arm and then attach it to Part J.

Attach the flat lever to Part J with a 8mm bolt, as shown here. This part will be for holding the claw level, and is the last step before moving onto the claw.

Put the main assembly aside for now so we can assemble the claw.

You want to attach the claw servo to the Claw mount, as shown below. Note the servo faces forward with the wiring coming from the front. This is also a good time to attach the ferrite toroid.

Attach the servo horn to Part K (claw servo attachment).

Now let's attach the claws to the Claw mount using Part F as the thread.

Note that the left claw, when looking top down, is threaded directly to Part F. The right claw goes past this part and threads to Part P, so do not enlarge the holes on Part F as doing so may not give you enough material for the thread to gain any purchase.

Next, you want to attach the claw to the second boom using a M3 × 8mm bolt and two M3 × 8mm bolts.

You also need to extend the servo wiring by using some short male to female jumper cables. Cable tie the wiring to the boom, ensuring there is sufficient length of cable so it is not pulled taught at any point in the arms movement.

Attach the robot arm to the slew servo using the bolt provided in the servo kit.

Now is also a good time to connect the wires to the I/O shield and cable tie all of the robot arm servo wiring. Neat wiring will avoid the cables getting accidentally caught in the mechanism, and also prevent strain on the wires as the arm moves.

  • The claw servo goes to digital pin 8
  • The boom servo goes to digital pin 9
  • The second boom servo goes to digital pin 10
  • The slew servo goes to digital pin 11

Make sure you follow the pins on the I/O board, in the case of the MG90 servos and the DFRobot I/O sheild:

  • The signal pin green on the I/O shield goes to the yellow pin on the servo.
  • The 5V pin red on the I/O shield goes to the red pin on the servo.
  • The ground pin black on the I/O shield goes to the black pin on the servo.

Let's now build the controller for the robot arm.

The first step is to strip and tin some wires. We recommend using rainbow ribbon cable to make wiring easy. To get the required 6 wires, simply separated wires from the cable by cutting and peeling it apart.

Trim the ends and tin with a soldering iron and some solder. A third hand comes in handy to make this job easier.

Instead of connecting multiple wires to the I/O shield, we made a custom connector using three header strips. This custom connector requires some soldering and handywork, but it will enable us to easily connect and disconnect the wiring without having to remember which wire goes where.

Prepare three 4-way female pin headers as shown here. You can tin each connector with solder to make wiring easier.

Next, wire the first connector with the same four coloured wires as you see here. These four wires will connect to the four potentiometers to control the arm.

Solder the red wire to the second 4-way header. The wire needs to go to an outer pin. This red wire and connector is our positive power connection for the circuit.

Solder the remaining brown wire to the third 4-way connector. Again, this gets soldered to an outer pin. This brown wire and connector is our negative power connection for the circuit.

The wiring should now look like the image shown above.

You can use the three 4-way headers separated into your I/O shield, or you can do the following steps to make them into one handy connector.

  • Cut a 15mm long piece of 20mm diameter heatshrink
  • Pass the three 4-way headers through the heatshrink
  • Plug the three headers into the I/O board so they are side-by-side
  • Slide the heatshrink over the three headers and use a hot air blow torch to shrink the heatshrink firmly in place.
  • Gently remove the group of connectors from the I/O board
  • Apply glue from a hot glue gun or liquid electrical tape (shown above) to secure and insulate the wires

Once the glue or liquid electrical tape has dried, we recommend adding a small piece of 20mm heatshrink over the bundle to provide more strength. Just make sure you mark which side is ground as connecting it the wrong way into the I/O shield could damage the unit.

Insert the four potentiometers into the controller enclosure and securely fix into place using the washers and nuts provided.

Next, insert the ribbon cable into the slot on the side of the controller. Insert enough cable so you can comfortably solder the cable to the potentiometers.

Make a strain relief by folding the ribbon cable and securing a cable tie across it, as shown below.

Following the wiring diagram provided above, carefully solder the four power and ground wires to the 5V and GND connections of the potentiometers.

Tinning the potentiometer legs beforehand can help to solder the wires onto them. You could also use a third hand so you have your hands free to handle the soldering iron and solder.

With the power wires all soldered onto the outer potentiometer legs, you can now solder the four signal wires to the centre/wiper pins of the potentiometers.

Follow the same colour coding as you see in the photo above so that the four controls match our controller. Mixing the signal wires will just mean the potentiometers control different actions than the layout our controller has.

The final step in the controller construction is to secure the back panel to the controller using four self-tapping screws.

Now all you need to do is connect the controller to the I/O shield and program the Arduino.


Wire up the servos and controller connector as described in the Electronics section of this article.

Power for the servos should be provided by connecting 5V power to the Servo_PWR screw terminals on the I/O shield. 5V power for the Arduino development board can be via the USB on the Nano.

We must stress that you need to power the servos from a separate 5V power source, and not shared by the USB powering the Arduino Nano. If you attempt to power the entire device with 5V from the USB port there is a high chance the servos will stutter and cause the Nano to reset.

Note: The PWRIN on the I/O board uses the onboard voltage regulator which is unable to supply the required current to the servos.


With power applied, you should now be able to operate the four servos successfully using the associated potentiometer in the controller.

If you find the servos only provide a limited range of motion, you may not have aligned the servo horn positions correctly in the setup stage. If this is the case, the only option is to remove the servo horn and replace it in its correct position. We suggest the best way to do this is to use the code from step 7 and place the servos in either extreme position. For example, put the boom servo in its lowest position and attach the boom to it so it’s parallel to the base. This should allow the full range of movement. i.e. 90 ̊.

Something to also look out for while testing is when your servos can't move freely. You need to ensure that all of the screws/bolts on articulating joints are secure enough to hold the parts together but not so tight that they inhibit movement. If a particular joint seems to be not working fluidly, try loosening the bolts a little to free it up so it can function correctly.

After thorough testing of our prototype, we found a weakness in the claw servo mount. A lever connection that keeps the claw oriented parallel to the base failed. We have since increased the surface area of this part in the final 3D print files. This should mean you can grip heavy items with the gripper without the risk of the claw breaking.


The future potential for this robot arm is limitless. Imagine giving this little guy the ability to be mobile with tracks or wheels. You could drastically improve his usability with such a simple upgrade. Of course, with mobility comes the need for untethered communication and therefore batteries, so perhaps a Bluetooth and lithium battery upgrade is in order?

Of course, there is plenty of flexibility in what tool attachment is used. Whilst the standard attachment is a claw you can easily implement any number of different tools from camera mounts to lasers or possibly even a vacuum pump attachment for picking up tiny objects.

There is also scope to include different types of controllers. A computer or smartphone control, for example.