Cardboard Robotic Arm





Introduction: Cardboard Robotic Arm

About: I am an electronics and communication engineering student currently in my third year. I have an interest towards micro-controllers, electronic circuits and hardware hacking.

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!


  • Oil Contest

    Oil Contest
  • Planter Challenge

    Planter Challenge
  • Woodworking Contest

    Woodworking Contest

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

1 reply

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

3 replies

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???

2 replies

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...

Hi Sourav, sorry once again I am distirbing you but can you please tell me how to connect the circuit on breadboard I dont know where to connect power terminals. I think I should connect that triangle in the circuit diagram with the reset button and for gnd I have 2 terminals on my arduino where should I connect...
Please reply.....

2 replies

Just connect 5v from the arduino to a power rail in your breadboard. This is the triangle. Connect all wires connected to the triangle to this power rail.
Connect any of the three ground of the arduino to another power rail. Connect all grounded wires to this.

Hey Sourav, do I need to upload both the codes to run the arm for continuous motion. I mean when I have planned an action, do I need to upload both the codes so that my arm performs the same action repeatedly???
Please reply

2 replies

No just upload the ServoRecordandPlay. Perform an action when the led at pin 13 is on. After it turns off, the arm is no longer taking input from you, and plays whatever it recorded in a loop. If you want it to repeat another action, just press the reset button and record the action.

Thanks bro you helped me so much I am almost done with it

Hey how did you power it. I meam is it powered by external battery. If yes than how many volt or is it powered by arduino itself

2 replies

It is powered by the arduino itself. You can attach an external battery of upto 12 volts to it.

If you are using servos which require more current than the arduino can source, you can use the external battery with a suitable voltage regulator (like 7805) to power them.

But that shouldn't be a problem because the arduino only supplies current to one servo at a time.

Thanks and how many ohms potentiometer did you use. I found several like 470 kohm to 1k ohm which should I use