Arduino Robotic Arm
DIY Arduino Robotic Arm
In
this tutorial, we design an Arduino Uno Robotic Arm. Entire arm will be designed from some scrap
material and servos. Entire process of
construction has been explained in detail below. The arm has been built with cardboards and the
individual parts have been locked to servo motors. Arduino Uno is programmed to control
servo motors.
Servos are serving as joints
of Robotic arm here. This setup also looks as
a Robotic Crane or we can convert it into a Crane by some easy
tweaks.
This project will be very
helpful for beginners who want to learn to develop a Simple Robot in
low cost.
This Arduino
Robotic Arm can be controlled by four Potentiometer attached
to it, each potentiometer is used to control each servo. You can move these servos by rotating the pots to
pick some object, with some practice you can easily pick and move the object
from one place to another. We
have used low torque servos here but you can use more powerful servos to pick
heavy object.
The whole process has been
well demonstrated in the Video at the end. Also check our other Robotics Projects here.
Components Required:
·
Arduino Uno
·
1000uF Capacitor (4 pieces)
·
100nF Capacitor (4 pieces)
·
Servo Motor (SG 90- four
pieces)
·
10K pot- Variable Resistor (4 pieces)
·
Power Supply (5v- preferably
two)
Servo Motor:
First
we talk a bit about Servo
Motors. Servo
Motors are excessively used when there is a need for accurate shaft movement or
position.
These are not proposed for
high speed applications. Servo motors are proposed for
low speed, medium torque and accurate position application. So these motors are best for
designing robotic arm.
Servo
motors are available at different shapes and sizes. We are going to use small servo motors, here we
use four SG90 servos. A
servo motor will have mainly there wires, one is for positive voltage another
is for ground and last one is for position setting. The RED wire is connected to power, Black wire is
connected to ground and YELLOW wire is connected to signal. Go through this tutorial of Controlling
Servo Motor using Arduino to learn more about it. In Arduino we have predefined libraries to control
the Servo, so it is very easy to control servo, which you will learn along with
this tutorial.
Construction of Robotic Arm:
Take a
flat and stable surface, like a table or a hard card board. Next place a servo motor in the middle and glue it
in place.
Make sure the degree of
rotation is in the area presented in figure. This servo acts as base of arm.
Place
a small piece of cardboard on top of first servo and then
place the second servo on this piece of board and glue it in
place.
The servo rotation must match
the diagram.
Take
some cardboards and cut them into 3cm x 11cm pieces. Make sure the piece is not softened. Cut a rectangular hole at one end (leave 0.8cm
from bottom)
just enough to fit another
servo and at another end fit the servo gear tightly with screws or by glue. Then fit the third servo in the
first hole.
Now
cut another cardboard piece with lengths shown in figure below and glue another
gear at the bottom of this piece.
Now
glue the fourth and last servo at the edge of second piece as
shown in figure.
With
this, two pieces together looks like.
When
we attach this setup to the base it should look like,
It’s almost done. We just need to make the hook to grab and
pick the object like a robotic hand. For hook, cut another two pieces of card board of
lengths 1cmx7cm & 4cmx5cm. Glue
them together as shown in figure and stick final gear at the very edge.
Mount
this piece on top and with this we have done building our Robotic Arm.
With
this, our basic robotic arm design got completed and that's how we have built
our low cost robotic arm. Now
connect the circuit in breadboard as per circuit diagram.
Circuit Diagram and Working Explanation:
The
circuit connection for Arduino Uno Robotic Arm is shown below.
The
voltage across variable resistors is not completely linear; it will be a noisy
one.
So to filter out this noise,
capacitors are placed across each resistor as shown in figure.
Now we
will feed the voltage provided by these variable resistor (voltage which represents position control) into ADC channels of Arduino. We are going to use four ADC channels of UNO from
A0 to A3 for this.
After the ADC initialization,
we will have digital value of pots representing the position needed by user. We will take this value and match it with servo
position.
Arduino
has six ADC channels. We have used four for
our Robotic Arm. The
UNO ADC is of 10 bit resolution so the integer values ranging from 0-1023 (2^10=1024 values). This means that it will map input voltages between
0 and 5 volts into integer values between 0 and 1023. So for every (5/1024= 4.9mV) per unit. Learn more about mapping
the voltage levels using ADC channels in Arduino here.
Now,
for the UNO to convert analog signal into digital signal, we need to Use
ADC Channel of Arduino Uno, with the help of below functions:
1. analogRead(pin);
2. analogReference();
3. analogReadResolution(bits);
Arduino
ADC channels have a default reference value of 5V. This means we can give a maximum input voltage of
5V for ADC conversion at any input channel. Since some sensors provide voltages from 0-2.5V, so
with a 5V reference, we get lesser accuracy, so we have an instruction that
enables us to change this reference value. So for changing the reference value we have “analogReference();”
As
default we get the maximum board ADC resolution which is 10bits, this
resolution can be changed by using instruction (“analogReadResolution(bits);”).
In our Robotic hand circuit, we have left this reference voltage to the default, so we can
read value from ADC channel by directly calling function “analogRead(pin);”, here “pin” represents pin where we connected the analog
signal, say we want to read “A0”. The value from ADC can be stored into an integer
as int SENSORVALUE0 = analogRead(A0);.
Now let’s talk about the SERVO, the Arduino Uno has a feature which enables us
to control the servo position by just giving the degree value. Say if we want the servo to be at 30, we
can directly represent the value in the program. The SERVO header (Servo.h) file
takes care of all the duty ratio calculations internally.
#include
<Servo.h>
servo
servo0;
servo0.attach(3);
servo0.write(degrees);
Here
first statement represents the header file for controlling the SERVO MOTOR. Second statement is naming the servo; we leave it
as servo0 as we are going to use four. Third statement states where the servo signal pin
is connected; this must be a PWM pin. Here
we are using PIN3 for first servo. Fourth
statement gives commands for positioning servo motor in degrees. If it is given 30, the servo motor rotates 30
degrees.
Now,
we have SG90 servo position from 0 to 180 and the ADC values are from 0-1023. We will
use a special function which matches both values automatically.
sensorvalue0
= map(sensorvalue0, 0, 1023, 0, 180);
This
statement maps both values automatically and stores the result in integer ‘servovalue0’.
This
is how we have controlled the Servos in our Robotic Arm project using
Arduino.
Check the full code below.
How to Operate Robotic Arm:
There
are four pots provided to the user. And by
rotating these four pots, we provide variable voltage at the ADC channels of
UNO.
So the digital values of
Arduino are under control of user. These
digital values are mapped to adjust the servo motor position, hence the servo
position is in control of user and by rotating these Pots user can move
the joints of Robotic arm and can pick or grab any object.
Demo & Code
Arduino Robotic Arm
Reviewed by XXX
on
สิงหาคม 27, 2560
Rating:
ไม่มีความคิดเห็น