Cardboard Robotic Arm





Introduction: Cardboard Robotic Arm

This is an Arduino controlled robotic arm I made just from cardboard and small servos. It takes around 2 hours to build. Once built, you can write all sorts of code to make it do anything.

In this instructable, I include two programmes I wrote. One makes the arm move periodically to lift a small object. The other takes input from the user via potentiometers, and moves the arm. The arduino records this movement and plays it in a loop afterwards.

This instructable focuses mainly on building the hardware. It can be divided into three parts. The claw, the elbow and the base.

Material required-

  1. Cardboard
  2. 1 clothespin
  3. 3 servo motors
  4. Arduino
  5. 3 potentiometers (optional)

Tools required-

  1. Fevicol or Hot glue.
  2. Black tape
  3. cello tape
  4. Knife
  5. Ruler
  6. Screwdriver
  7. Pins

Step 1: The Claw

I used a metal clothespin. Attach one of it's halves to the servo motor with tape and fevicol. You can use hot glue too.

Cut out a piece of cardboard of dimension approximately 3cm X 13cm. Attach the servo blade of the elbow to one end with fevicol and tape. This connection needs to be strong as this joint transmits the torque from the servo to the arm.

To the other end, attach the other half of the clip. After these connections dry, attach the claw servo with more glue and tape.

Ensure that the claw closes properly during servo operation.

Step 2: The Elbow

This part is like the claw in the sense that it has a servo motor attached at one end, and a servo blade at the other.

  1. Take 3 to 4 layers of cardboard of dimensions around 3cmX 15cm and sandwich them together Make sure that the longer side is along the cardboard grain, for higher strength.
  2. Towards the top, drill a hole of the dimensions of the servo, and embed it inside the cardboard.
  3. Make 2 cardboard trusses as shown in the pictures with cardboard which can support the claw during operation.
  4. Attach the truss to the elbow with fevicol such that a centimeter of space remains. The base servo will fit in this place.
  5. Coat the bottom surface of the trusses with cello tape to reduce friction.
  6. Attach the servo blade to the base with fevicol or hot glue, and pins. This joint needs to be strong to ensure proper power transmission from the base to the elbow.

Step 3: The Base

All of the arm's operations are within this region.

  1. Cutout 3 to 4 layers of cardboard and sandwich them together with tape.
  2. At the center, you need to fix the base servo. So cutout a t-shaped cavity.
  3. At the center, fix the servo with fevicol or hot glue.. I used the metal gear mg90 servo for the base.
  4. Make sure that the servo is in level with the base. The gear should fit in the space we left between the elbow and the trusses.
  5. There should be enough space in the T- hole for the wires to slip under.
  6. Mark of the circle in which the elbow will rotate with tape.
  7. Coat this circle with cello-tape to reduce friction between the base and trusses.
  8. You can even apply lubricant like machine oil over the cello-tape.

Step 4: Putting It All Together

  1. Attach the claw piece to the elbow such that at 180 degree the claw touches the base.
  2. Tape the connecting wires and jumpers to the side of the elbow pillar.
  3. The elbow pillar should connect with the base servo with little effort. You can make this connection permanent with a screw. I chose to keep it free so that during violent servo movement the arm doesn't get damaged.
  4. Pass all the wires underneath the base through the hole.
  5. Attach one final layer of cardboard to the base, which will ensure that the base servo doesn't touch the ground, and the wires are hidden.

Step 5: The Potentiometer Controller

Connect 3 pots to the arduino analog input pins. Any value will do. I used 10k.

Step 6: Code

I have attached the two codes used in the videos and described in the introduction.

UPDATE 18-10-2017

I have updated the code for servoRecordandPlay, now it can record for a minute on the UNO, and for over 4 minutes on the mega with 3 servos. Also, I have specified the pins explicitly.

Step 7: Some Tips...

  1. Make appropriate measurement before cutting the cardboard, or gluing anything together.
  2. At every step of the construction, plan where to put the wires. Otherwise it will be a real hassle in the end.
  3. Give the glue time to dry before powering the servos.

2 People Made This Project!


  • Epilog Challenge 9

    Epilog Challenge 9
  • Trash to Treasure

    Trash to Treasure
  • Pro Tips Challenge

    Pro Tips Challenge

We have a be nice policy.
Please be positive and constructive.




Hi thanks for the updated code it worked nicely on uno.

But Sourav the movements while recording are not precise enough.. like while recording its very hard to get the gripper right on top of the object which needs to be picked up. However, while playing it moves fluently.

I understand that may be you should not expect too much with these micro servos but still, can you do something to make the recording movement more precise or fluent.

I was trying to upload my videos here but failed, may be only pictures are allowed here

Hmm, You can try and increase samplepersec to more than 8 (at the cost of less recording time). Or look for this line 61 at the record function.
if( val[i] >= store[i]+100 || val[i] <= store[i]-100){// to account for the changes in value due to loose wiring

I included this line because I didn't want to constantly instruct the servo to move based on the slightly different values read from the pot.
Try decreasing the 100 to 50 or lower; play around with it a bit. Maybe that will work for you.

Hi Sourav

To increase its memory i have connected it with arduino mega but then servos were behaving weirdly and two of them were not working at all.

Please guide me how to connect it with mega and how to change the code for mega. with thanks

Wow! Congratulations on building the arm! It looks great! I would love to see it in action.

I have updated the code slightly, maybe that would help you a bit.

I apologise for my crappy code, it offered no portability whatsoever. I had a glance at Mega's pinout and found the source of your problem. My code expects the pots to be connected to gpios 14,15,16 and 17 by default. It read random noise from those pins of the mega and sent them over to the servos.

Just write A0, A1 etc on the pot array of the new code, and it should be fixed. I think. And I don't think there should be a problem to attach a servo to a pwm pin.

But still, I don't think to abandon the uno just because of its limited memory is the best solution. Code is free, but hardware costs money. You could use shorter data types to encode the information. I think a byte to store a position should be enough for your needs, even on the UNO. You can get more than 40 seconds of recording time with 4 servos, with 8 samples per second in an UNO with the newer code.


I would need more information than that to help you, but here are some of the things you could do:

1.) Ensure you have wired the servos correctly to the pins that are defined in the code.

2.) Test the servo motors independently with example code to see if they are okay.

3.) Change the pin definitions in my code and see if that works for you.

mega is like a beast when it comes to dynamic memory comparison with uno. I am extremely desperate to enhance the learning memory upto 3 times of the current one which is now 50sec.

The goal is to develop a sorting bot application so that at least after getting enough learning memory it will be able to perform three different lift and drops for 3 different sized items and 3 different dropping positions.
I had conducted individual servo test with mega but no success. Or any innovative application if u can suggest, would be highly appreciated.

On mega everything seemed fitting and same like uno except that mega has separate digital pins and pwn pins which might have causing the trouble and i used mega's pwm pins for my four servos, starting from 2 to 5.

lastly, i couldn't find the pin definitions in the code as it only shows servo and pot as "N".. normally i have seen in different codes where servo pins and pots pins are defined and pin numbers are visible.. i dont know, i think u have develop some kind of formula and therefore no need to define pin individually. I can't interpret complex formats of coding except the basics formats and theoretical concepts. Please do explain me about changing pins and then i will be able to try it to connect and control with mega.

Sorry once again dor disturbing but 2 of my servos are only working. Sometimes first and second work and sometimes 1st and 3rd works but they don't work all 3 at a time. What should I do???

Maybe it's caused by lack of current

Can you ellaborate more? Send a couple of pics of the arm, the connections and the code.

After making it I understood how hard you would have worked. Praised by your work and waiting for your next project........ :() :):):):):):):):):):)
Thanks once again...