This pyBot (SCARA type) Robotic Arm has been designed with five conditioning factors in mind:

  1. Making it “printable” with any 3D printer in the market no matter its capabilities or limitations
  2. Use common elements of the MAKER / 3D printer World
  3. Easy to set-up, OPEN and well documented.
  4. Python code controlled
  5. Fun, versatile and easy to modify
Side and Top view of the pybot SCARA Robotic arm.
This robot mounts three NEMA17 stepper motors and 2 servos (SG90/MG90 or SG92R)

Mechanical specifications:

  • Robot frame total height: 270 mm.
  • Nº of axis: 3 (arm) + 2 (clamp)
  • Working height with the clamp mounted: 145 mm
  • Arm (extended) length: 24 cms
  • Working area: 1190 cm2
  • Horizontal max. speed: 22 mm/s
  • Vertical max speed: 25 mm/s
  • Total Weight: 2120 grams
  • Repeatability (mm): 0.4mm
  • Maximum Payload Capacity (arm extended) = approx. 150 g
  • Range of motion per axis: Arm: ~190° Forearm: ~280°
  • Driving motors: 3x NEMA17 1.8° stepper motor
  • Gripper / Actuator drivers: 2x SG90 /MG90 / MG92R servos

The pyBot SCARA type robotic arm sweeps and angle of approx 315° quickly reaching any point inside that extent. This is an advantage over other robotic arms with vertical elbow configuration (Delta and Polar types) as just one or two simple motor action/s is required to move the arm. Once retracted, the robot is compact and its volume minimal

SCARA arms are good for vertical assembly operations, such as inserting pins in holes without binding or pick and place objects to a certain location when you need speed and accuracy once reached the target. The joints are load points that need robust bearings and high-torque motors or reductions to handle the loads when the arm extends.

They are suitable for complex movements that simulate a human arm with its elbow — reaching under something to grab a part and place it on a conveyor, for example.

Arm´s covered angle. Due to the mechanical relationships between arm and forearm, a proper control of the forearm is a must during the arm movement.
The forearm can cover up to 280°. While moving the forearm, the arm´s motor has to be steady (holding itself in position)
A regular servo (SG90, MG90 or SG92R) will work as wrist and will be mechanically limited to a (approx) 160° angle. The control software has the capability to keep it straight during the movements (to a certain point, limited by the physical construction of the servo)

The main frame: Created using 3 x8 mm stainless steel round bars that will work are rails. A perfect alignment of the 3 bars is mandatory. To help the base´s bars channels to keep the rails straight, a support triangle placed 2 cm over the base with hold the rails firmly. That piece and the top triangle (light grey) will prevent the frame to vibrate when the Z-platform is moving fast up and down.


Moving UP and DOWN

There is a stepper motor embedded in the robot´s base. That motor, rotating, will lift or low the Z-platform. The arm is fitted to this platform so if we lift the platform, we are lifting the arm too.

The motor´s shaft in connected to a threaded rod (2mm/rev) mounting a coupler. This element will do the job of continuing the physical connection between motor and rod and reducing vibrations during any vertical movement. But, how the threaded rod push or pull the Z-platform? There is a threaded nut fitted tight in the platform, so every complete turn of the threaded rod, the nut, will push the platform up, 2mm if rotates clockwise and down if rotates anti-clockwise.

Side view of the frame with the Z-platform already placed and the Z-motor embedded. All the elements displayed have a role when the robot moves up/ down the Z-platform.
The nut (red arrow) does the real job of moving the Z-platform up and down.

The Robotic arm has been designed placing the motor1 and 2 (you will know more about them if you keep reading this document) opposing the weight of the arm and any object lifted by the robot´s gripper. Looking for a good general balance so the linear bearings embedded in the Z-platform does not suffer from any angular force. This will allow to considerably reduce the friction letting the Z axis to be agile and fast.


Moving the arm and forearm

TOP VIEW of the Z-platform. The motor1 making use of a pulley reduction (16 to 72)

The ARM element will be moved by a NEMA17 motor (motor1) transferring the shaft´s rotation to the component using a gear reduction of 16 to 72. The motor´s shaft has a 16 teeth pulley, which transmits the movement to a 72 teeth gear located on the Robot´s arm. Doing this, we are reducing the rotational speed 4,5 times + increasing the power delivered 4,5 times: We have to rotate the motor1 10° to get a 45° arm rotation

Simplified representation of the motor1 (green) -driving element- and the arm (red) -driven element-. This gear-belt reduction allows to increase the arm´s power and, at the same time, the accuracy of the arm
TOP VIEW; Transferring the movement to the forearm from the motor2 using a 16 to 62 teeth and a 33 to 62 teeth reductions.

To drive the forearm, the robotic arm uses the same mechanism: reduction, in this case two reductions chained. 16 to 62 (x3,875) and 33 to 62 (x1,879), that means we are applying a reduction of speed of approx 7.28 times (3,875 x 1,879) and increasing the power the same amount. Keep in mind that reducing the rotational speed increases the accuracy of the forearm reaching any target point.


Controlling two rotational articulations

A SCARA type robot, beside its advantages has an inherent problem: how to properly control the motors so you can get good speed and precision drawing simple geometric figures achieving good repeatability. It is not a simple thing to draw on a paper a straight like with a SCARA. A Cartesian robot (like a regular 3D printer or the iboardbot) is way easier to control as you only need to spin its controlling motors shafts certain number of steps (you can add a reduction but that will not change the way the robot moves). But a SCARA pivots around two points, the “shoulder” and the “elbow“. We have created a powerful yet simple algorithm of control. You can take a look at it already implement in Python here, in the “HOW TO CONTROL THE SCARA Robotic Arm. CODE

With a good motor control algorithm, even with the arm completely extended, the SCARA Robotic arm can achieve a 0.2 mm repeatability accuracy.

The theory behind the Robotic control

[latexpage] Lets start from the beginning:

Imagine that you have to create your Robot control algorithm. You already know how the robot works, using 3 motors. You have to reach certain point inside the working area, and pick an object there with the gripper. A common way to do this would be:

  1. Raise the arm a little so it will not bump into the object you are planning to pick
  2. WORKING IN PROGRESS —————-

LINKS