4 DOF Robotic Arm (SG90, MG996R, Arduino)
Print Profile(1)

Description
Hi everyone, this is a personal project of mine. Please read below for more details, and feel free to reach out if you need any help with this model.
TLDR: A custom-built 4-DOF desktop robotic arm designed in Solidworks.
- Build: Turntable base (3D-printed ball bearing race, MG996R servo) → shoulder (MG996R) → elbow (SG90) → wrist (SG90) → gripper (fingers/lever reused from a GrabCAD reference, everything else original).
- Code: Arduino sketch, keyboard nudges servos via a generic moveServo(index, delta) function, parallel arrays for servos/pins/angles, constrain() for safety, recenter-to-90° key. No feedback or interrupts — kept deliberately simple.
- Hardware: Everything is intended to be assembled with M3 hardware, sizes up to you. Whatever works best. You will need 2 SG90 and 2 MG996R servos along with the various attachments. Servos can either be superglued or screwed directly into the plastic (I tried an iteration with holes, but the hold seemed worse than just screwing the screws directly into the plastic.
DISCLAIMER: Size is often not consistent for these servos and their attachments. I bought some really cheap SG90s and they were way off from the spec I was expecting. This is why I have given you access to actual CAD models, as I highly recommend tinkering, making improvements, and customizing this model to your specs. Even in my models I just found publicly available servo models which did not exactly match the ones I bought.
Robotic Arm
A 4-DOF desktop robotic arm designed and built from scratch as a personal engineering project. All structural components were custom-modeled in SolidWorks and 3D printed, with servo geometry measured directly from physical hardware using digital calipers. The arm is capable of planar reach-and-grasp tasks within an approximate 15–20 cm workspace and is controlled via keyboard input over serial.
CAD & Mechanical Design
All structural components were designed from scratch in SolidWorks/Inventor, modeled from physical hardware measurements taken with digital calipers. The arm is a 4-DOF serial manipulator with a total reach of approximately 15–20 cm. Additionally, all parts were designed for M3 hardware. While those are not found in the model, please use M3 washers on the gripper and screws throughout to ensure the best fit. For servo attachments, use the provided screws and screw them directly in the plastic. I’ve experimented drilling into holes and drilling directly in the plastic, the latter holds significantly better.
Base: The circular turntable base is fully custom-designed and integrates a 3D-printed ball bearing race using 1/8" diameter balls, enabling smooth continuous rotation driven by an MG996R servo. The two-tier disc profile houses the servo internally, keeping the footprint compact.
Arm Links: The shoulder and elbow joints are custom-designed structural links. The shoulder is actuated by an MG996R servo for higher-torque lifting; the elbow uses an SG90. Joint geometry and servo mounting pockets were modeled directly from caliper measurements of the physical servos — as dimensions vary slightly between manufacturers, printed parts may require minor tolerance adjustment for servos from different suppliers.
Wrist & Gripper: The wrist rotation is driven by an SG90. The gripper leverages the lever arm and finger geometry from an existing GrabCAD reference design (gripper-servo-sg90-1) with direct reuse of those components, modified only to adjust mounting hole sizing for fit. All surrounding structure — wrist housing, servo mounts, and interface brackets — is original.
Design Inspiration: Structural layout and proportions drew loose reference from a robotics arm with feeding spoon on GrabCAD. No geometry from that model was reused directly.
Programming
The arm is controlled via an Arduino Uno running a keyboard-control sketch written in Arduino IDE. Each keypress nudges the corresponding servo by a fixed angle step. The four joints are mapped to two-key pairs (increase/decrease) across the keyboard, with an additional key to recenter all servos to 90°.
Servo state is managed using a Servo array alongside parallel pin and angle arrays, with a single generic moveServo(index, delta) function handling all joints. Angles are clamped with constrain() to prevent out-of-range writes. The architecture is intentionally minimal — no interrupt-driven input, no position feedback. In the future, if I have time, I will add a dual-sense controller mode since joysticks tend to feel more natural.
Note: The circuit diagram provided comes directly from this project which makes a 6 DoF arm. The same logic applies for a 4 DoF arm, just make sure that you are not providing power to the servos directly from the Arduino as this can potentially fry the Uno. Another future iteration would be to change the elbow joint to a more powerful servo, as the SG90 can struggle with the load when lifting an object in addition to the weight of the arm






Comment & Rating (0)