Kendali Lengan Robot dengan Penggerak Motor Servo

Robot ada yang bergerak atau pindah lokasi ada juga robot yang bergerak tapi tidak pindah lokasi. Robot yang bergerak tidak berpindah lokasi biasanya berbentuk lengan. Bagian penggerak (aktuator) pada gambar di bawah ini berupa motor servo yang dapat bergerak sesuai dengan sudut yang diinginkan sehingga lengan robot bergerak sesuai kombinasi pergerakan motor servo tersebut.

Berikut nama-nama bagian penggerak lengan robot :

Bagian Lengan Robot

Secara keseluruhan sebuah sistem lengan robot manipulator terdiri dari :

1. Tangan Mekanik (Mechanical Arm)

Adalah bagian dasar dari konstruksi lengan robot untuk dapat membentuk lengan robot sesuai kebutuhan dan merupakan bagian yang dikendalikan pergerakannya.

2. End-Effector

Kemampuan robot juga tergantung pada piranti yang dipasang pada lengan robot. Piranti ini biasanya dikenal dengan end effector. End effector ada dua jenis yaitu Pencengkram (gripper) yang digunakan untuk memegang dan menahan objek, peralatan (tool) yang digunakan untuk melakukan operasi tertentu pada suatu objek. Contohnya: bor, penyemprot cat, gerinda, las dan sebagainya.

3. Penggerak (Actuator)

Istilah yang digunakan untuk mekanisme yang menggerakkan lengan robot. Aktuator dapat berupa hidrolik dan pneumatik yang digunakan untuk mengendalikan persendian prismatik karena dapat menghasilkan gerakan linier secara langsung (sering disebut dengan penggerak linier) atau pula aktuator motor listrik yang menghasilkan gerakan rotasi. Penggerak yang umum digunakan pada saat ini adalah penggerak motor servo. Penggerak ini lebih mudah dikontrol dibanding penggerak lainnya.

4. Sensor/Transducer

Sensor dipergunakan manipulator agar dapat berinteraksi dengan lingkungan kerjanya. Sensor juga dipergunakan sebagai input umpan balik pada proses pengendalian manipulator.

5. Pengendali (Controller)

Pengendali adalah mekanisme (baik secara perangkat keras maupun perangkat lunak) yang dipergunakan untuk mengatur seluruh pergerakan atau proses yang dilakukan manipulator.

Untuk mengendalikan lengan robot bisa dengan sensor (knob) atau dengan waktu (sweep) saja. Mengendalikan lengan robot dengan sensor berarti pergerakan lengan robot tergantung perubahan nilai sensor (misalkan potensiometer), sedangkan pergerakan lengan robot dengan waktu berarti lengan robot bergerak secara terus menerus (berulang) sesuai waktu yang ditentukan.

KENDALI LENGAN ROBOT DENGAN SENSOR

Rangkaian Motor Servo dengan Sensor

List Program Berdasarkan Knob atau Sensor :

#include <Servo.h>

Servo myservo1; // create servo object to control a servo
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;

int potpin1 = 0; // analog pin used to connect the potentiometer
int potpin2 = 1;
int potpin3 = 2;
int potpin4 = 3;
int potpin5 = 4;

int val1; // variable to read the value from the analog pin
int val2;
int val3;
int val4;
int val5; void setup() {

myservo1.attach(9); // attaches the servo on pin 9 to the servo object
myservo2.attach(10);
myservo3.attach(11);
myservo4.attach(12);
myservo5.attach(13);
}

void loop() {

val1 = analogRead(potpin1); // reads the value of the potentiometer (value between 0 and 1023)
val1 = map(val1, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo1.write(val1); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there

val2 = analogRead(potpin2); // reads the value of the potentiometer (value between 0 and 1023)
val2 = map(val2, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo2.write(val2); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there

val3 = analogRead(potpin3); // reads the value of the potentiometer (value between 0 and 1023)
val3 = map(val3, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo3.write(val3); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there

val4 = analogRead(potpin4); // reads the value of the potentiometer (value between 0 and 1023)
val4 = map(val4, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo4.write(val4); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there

val5 = analogRead(potpin5); // reads the value of the potentiometer (value between 0 and 1023)
val5 = map(val5, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo5.write(val5); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}

Video Simulasi Lengan Robot dengan Sensor dapat dilihat dalam video di bawah ini :

 

KENDALI LENGAN ROBOT TANPA SENSOR

Rangkaian Motor Servo tanpa Sensor

List Program Berdasarkan Sweep atau Waktu :

#include <Servo.h>
Servo myservo1;
Servo myservo2;// create servo object to control a servo
Servo myservo3;
Servo myservo4;
Servo myservo5;
// twelve servo objects can be created on most boards
int pos1 = 0; // variabel menentukan posisi motor servo
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int pos5 = 0;
int pos6 = 0;
int pos7 = 0;
int pos8 = 0;
void setup() {
myservo1.attach(8); // pin keluaran arduino
myservo2.attach(9);
myservo3.attach(10); // pin keluaran arduino
myservo4.attach(11);
myservo5.attach(12);
}
void loop() {
for (pos1 = 0; pos1 <= 90; pos1 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos1 = 90; pos1 >= 0; pos1 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo2.write(pos1);
myservo4.write(pos1);
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}

for (pos2 = 0; pos2 <= 90; pos2 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos2 = 90; pos2 >= 0; pos2 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo5.write(pos2);
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}

for (pos3 = 0; pos3 <= 90; pos3 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
myservo2.write(pos3);
myservo4.write(pos3);
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos3 = 90; pos3 >= 0; pos3 -= 1) { // berputar dari 180 derajat ke 0 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}
for (pos4 = 0; pos4 <= 180; pos4 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos4 = 180; pos4 >= 0; pos4 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo1.write(pos4); // memberitahukan motor servo untuk ke posisi sesuai variabel 'pos'
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}
for (pos5 = 0; pos5 <= 90; pos5 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos5 = 90; pos5 >= 0; pos5 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo2.write(pos5);
myservo4.write(pos5);
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}

for (pos6 = 0; pos6 <= 90; pos6 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
myservo5.write(pos6);
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos6 = 90; pos6 >= 0; pos6 -= 1) { // berputar dari 180 derajat ke 0 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}

for (pos7 = 0; pos7 <= 90; pos7 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
myservo2.write(pos7);
myservo4.write(pos7);
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos7 = 90; pos7 >= 0; pos7 -= 1) { // berputar dari 180 derajat ke 0 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}
for (pos8 = 0; pos8 <= 180; pos8 += 1) { // berputar dari 0 derajat ke 180 derajat
// langkah dalam 1 derajat
myservo1.write(pos8); // memberitahukan motor servo untuk ke posisi sesuai variabel 'pos'
delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat
}
for (pos8 = 180; pos8 >= 0; pos8 -= 1) { // berputar dari 180 derajat ke 0 derajat
delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat
}
}

 

Video simulasi pergerakan motor servo bisa dilihat seperti pada video di bawah ini :

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *