SCARA Robot Arm
A SCARA robot arm is a type of robotic arm that is commonly used in industrial automations applications. The term "SCARA" stands for Selective Compliance Assembly Robot Arm. SCARA robots are known for their vertical assembly capabilities and their ability to move in a precise, repeatable manner.
They are typically used for tasks that require a high level of accuracy and speed, such as pick-and-place operations or assembly tasks in the manufacturing industry. SCARA robots have a unique kinematic structure that allows them to move in the X, Y, and Z axes, as well as rotate around the Z-axis. They are designed to be rigid and stiff in the Z-axis direction, while being compliant and flexible in the X and Y-axis directions. This allows the robot arm to move and assemble parts with precision and accuracy.
Materials Required
- Arduino UNO R3 Board x1
- CNC Shield with 2 A4988 drivers
- NEMA 17 Stepper motors x2
- GT2 Timing Belt 280 closed loop
- GT2 20 teeth gear x2
- GT2 36 teeth pulley gear x2
- Aluminum Linkages
- Nuts and Bolts
- 12v 2A Power Supply
Assembly
- Assemble the SCARA robot arm as shown.
- Attach the stepper motors to the robot arm using screws and nuts. Make sure they are securely fastened.
- Connect the NEMA17 stepper motor drivers to the CNC shield using jumper wires. Make sure the wires are connected to the correct pins.
- Connect the CNC shield to the Arduino board. Connect the power supply to the CNC shield.
Circuit

Programming
Code for controlling robot arm using Serial Monitor:
//NISHANT RANA 28-01-2023 SCARA DEGREE CONTROL
int x=0,y=0,z=0;
#include <AccelStepper.h>
#include <Servo.h>
AccelStepper stepper(1,2,5);
AccelStepper stepper2(1, 3, 6);
Servo servo1;
void setup() {
Serial.begin(9600);
servo1.attach(9);
}
void loop() {
Serial.println("Enter x parameter :"); //accepting x-paramater in degrees
while(Serial.available()==0)
{}
x=Serial.readString().toInt();
Serial.println(x);
Serial.println("Enter y parameter :"); //accepting y-paramater in degrees
while(Serial.available()==0)
{}
y=Serial.readString().toInt();
Serial.println(y);
Serial.println("Enter servo degrees: ");
while(Serial.available()==0)
{}
z=Serial.readString().toInt();
servo1.write(z);
stepper.setMaxSpeed(500.0);
stepper.setAcceleration(1000.0);
stepper.runToNewPosition((x*27.22)); //experimentally obtained value
stepper2.setMaxSpeed(500.0);
stepper2.setAcceleration(1000.0);
stepper2.runToNewPosition(y*27.22);
}
Code for demonstrating the workspace of robot arm:
//NISHANT RANA 15-04-2023 SCARA MOTION DEMONSTRATION
int x=0,y=0,z=0;
#include <AccelStepper.h>
#include <Servo.h>
AccelStepper stepper(1,2,5);
AccelStepper stepper2(1, 3, 6);
Servo servo1;
void setup()
{
Serial.begin(9600);
servo1.attach(9);
}
void loop()
{ for(int i=0;i<15;i++)
{
servo1.write(90);
stepper.setMaxSpeed(1000.0);
stepper.setAcceleration(1000.0);
stepper.runToNewPosition((90*27.22));
delay(500);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(1000);
stepper2.runToNewPosition(-180*27.22);
delay(500);
stepper.setMaxSpeed(500.0);
stepper.setAcceleration(1000.0);
stepper.runToNewPosition(40*27.22);
delay(500);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(1000);
stepper2.runToNewPosition(0*27.22);
delay(500);
servo1.write(45);
stepper.setMaxSpeed(1000.0);
stepper.setAcceleration(1000.0);
stepper.runToNewPosition((0*27.22));
delay(500);
}
}
Issues Faced
While making a SCARA robot arm using Arduino, CNC shield, and stepper motors, there are several issues that can be encountered. One of the main issues is the choice of correct stepper motors and drivers. It is important to choose stepper motors and drivers that are compatible with each other and can handle the load of the robot arm. If the motors are too weak, they may not be able to move the arm properly. If they are too powerful, they may cause damage to the arm or the CNC shield.
Another issue that may arise is the need for inverse kinematics. Inverse kinematics is a mathematical model that is used to calculate the joint angles of a robot arm based on the desired end effector position. While it can be useful for more complex robotic systems, it may not be necessary for a simple SCARA robot arm. Instead, simple coordinate-based movements can be used to move the arm.
Finally, the code for the robot arm may also pose a challenge. The code must be written correctly to ensure that the arm moves smoothly and accurately. It is important to test the code thoroughly and make any necessary adjustments to ensure that the arm moves as desired.
Conclusion
In summary, making a SCARA robot arm using Arduino, CNC shield, and stepper motors may pose some challenges such as the choice of correct stepper motors and drivers, the need for inverse kinematics, and the proper coding of the robot arm. However, with proper research and attention to detail, these issues can be overcome and a functioning robot arm can be created.