Robot adalah sebuah manipulator yang dapat di program ulang untuk memindahkan tool, material, atau peralatan tertentu dengan berbagai program pergerakan untuk berbagai tugas dan juga mengendalikan serta mensinkronkan peralatan dengan pekerjaannya, - oleh Robot Institute of America, (Gonzalez,1987).
Inspiration
Di Indonesia, kita dapat menjumpai berbagai macam jenis Robotic Arm. Arm robot tersebut digunakan dalam berbagai bidang antara lain dibidang industri, kesehatan, pertanian dll.
Hardware
Adapun perangkat keras yang dibutuhkan dalam pembuatan Robotic Arm ini adalah:
- Arduino Uno,
- Sensor Warna (RGB),
- Sensor IR Obstacle,
- Motor DC,
- Motor Servo,
- LCD 16x2 dengan I2C
- Relay.
Diagram Blok
Cara kerja atau prinsip Robotic Arm akan dijelaskan pada diagram blok berikut:
Diagram Blok Arm Robot Berdasarkan Warna |
Berdasarkan blok diagram sistem yang telah digambarkan diatas, maka dapat diuraikan secara detail mengenai perancangan dan pembuatan Robotic Arm baik dari segi hardware (perangkat keras) maupun software. Perancangan pembuatan rangkaian elektronik ini menggunakan Arduino sebagai pemrosesan data keseluruhannya.
Sensor RGB
Baca: Cara Membuat Alat Pendeteksi Warna dengan Sensor LDR dan RGBSensor yang digunakan dalam pembuatan alat ini adalah dengan memanfaatkan rangkaian LDR dan led RGB sebagai pembaca objek. Berikut adalah rangkaiannya:
Rangkaian Sensor RGB |
Ket:
- LED RGB
- LDR
- Resistor 220 ohm
- Resistor 33K ohm
Tata letak sensor RGB |
Rangkailah komponen sensor seperti gambar diatas, kemudian upload program dibawah ini untuk memastikan sensor berfungsi dengan baik.
/* Program sensor warna
Oleh : HESTECH iNDONESIA
web : Hestech.id
*/
#include <Servo.h>
Servo myservo;
int sensorPin = A0;
int LedBiru =3; // Led warna biru digital pin 3
int LedHijau=4; // Led warna hijau digital pin 4
int LedMerah=5; // Led warna merah digital pin 5
int hasil,hasilb,hasilm,hasilh;
int k=8; // toleransi warna
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(LedBiru,OUTPUT);
pinMode(LedMerah,OUTPUT);
pinMode(LedHijau,OUTPUT);
digitalWrite(LedBiru,LOW);
digitalWrite(LedMerah,LOW);
digitalWrite(LedHijau,LOW);
myservo.attach(6); // motor servo pin digital 9
myservo.write(90);
delay(100);
Serial.begin(9600);
delay(1000);
}
void loop() {
// nyalakan LedMerah
digitalWrite(LedMerah,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilm=map(hasil,0,1023,0,255);
Serial.print("R,G,B = ");
Serial.print(hasilm);
digitalWrite(LedMerah,LOW);
delay(150);
// nyalakan LedHijau
digitalWrite(LedHijau,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilh=map(hasil,0,1023,0,255);
Serial.print(",");
Serial.print(hasilh);
digitalWrite(LedHijau,LOW);
delay(150);
// nyalakan LedBiru
digitalWrite(LedBiru,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilb=map(hasil,0,1023,0,255);
Serial.print(",");
Serial.println(hasilb);
digitalWrite(LedBiru,LOW);
delay(150);
// cek warna dibandingkan dengan nilai hasil kalibrasi
if(abs(hasilm-209)<k && abs(hasilh-165)<k && abs(hasilb-139)<k){
Serial.println(" -> WARNA MERAH !\n");
myservo.write(30); } else
if(abs(hasilm-135)<k && abs(hasilh-182)<k && abs(hasilb-147)<k){
Serial.println(" -> WARNA HIJAU !\n");
myservo.write(50); } else
if(abs(hasilm-186)<k && abs(hasilh-225)<k && abs(hasilb-202)<k){
Serial.println(" -> WARNA BIRU !\n");
myservo.write(70); } else
if(abs(hasilm-156)<k && abs(hasilh-184)<k && abs(hasilb-172)<k){
Serial.println(" -> WARNA CYAN !\n");
myservo.write(90); } else
if(abs(hasilm-199)<k && abs(hasilh-159)<k && abs(hasilb-170)<k){
Serial.println(" -> WARNA UNGU !\n");
myservo.write(110); } else
if(abs(hasilm-154)<k && abs(hasilh-231)<k && abs(hasilb-239)<k){
Serial.println(" -> WARNA KUNING !\n");
myservo.write(130); } else
if(abs(hasilm-210)<k && abs(hasilh-206)<k && abs(hasilb-211)<k){
Serial.println(" -> WARNA PINK !\n");
myservo.write(150); } else
if(abs(hasilm-168)<k && abs(hasilh-230)<k && abs(hasilb-225)<k){
Serial.println(" -> WARNA HIJAU MUDA !\n");
myservo.write(170); } else
// if(abs(hasilm-203)<k && abs(hasilh-73)<k && abs(hasilb-87)<k){
// Serial.println(" -> WARNA KUNING MUDA!\n");
// myservo.write(180); } else
Serial.println(" -> ???\n");
delay (1000);
}
- Setelah diuplod kedalam arduino, bukalah serial monitor untuk mengambil sampel warna.
- Siapkan warna yang akan dijadikan objek untuk deteksi, (warna merah)
- Letakan sampel warna (merah) tersebut tepat didepan sensor RGB untuk mengambil nilai kalibrasi, maka akan diperoleh hasil seperti berikut:
- Hasil kalibrasi pada gambar diatas dimasukan kedalam program sebagai hasil kalibrasi warna merah. Letakan nilai tersebut disini:
- Upload ulang kedalam arduino, dan lakukan kalibrasi ulang terhadap warna merah yang tadi sudah di ambil nilainya. Maka akan menampilkan hasil seperti gambar dibawah:
- Hasil kalibrasi ulang pada gambar diatas menunjukan bahwa warna merah telah terdeteksi, meskipun berbeda nilai dari hasil kalibrasi awal. Hal itu tidak mempengaruhi hasil selama nilai RGB nya masih berselisih 8 angka. karena nilai toleransi pada program dibuat 8. Jika ingin merubah nilai toleransinya, rubah pada program ini:
int k=8; // toleransi warna
Setelah memahami rangkaian diatas, selanjutnya adalah merangkai keseluruhan komponen.
Schematich
Setelah memahami rangkaian sensor diatas, selanjutnya merangkai seluruh komponen seperti gambar dibawah ini:
Pada gambar diatas terdapat beberapa bagian penting diataranya adalah:
Agar lebih jelas, desain awal robot arm pemindah barang dapat dilihat pada gambar dibawah ini:
Flowchart
Untuk lebih mudah memahami diagram alir (Flowchart) cara kerja robot arm pemindah barang akan ditunjukkan pada gambar dibawah ini:
Berdasarkan perencanaan sistem diatas dibuatlah perencanaan program. Program akan didesain atau dirancang secara sistematis terlebih dahulu, dimana langkah-langkah yang sistematis untuk menyelesaikan suatu masalah dinamakan algoritma. Kemudian langkah-langkah tersebut akan dikonversikan ke dalam bahasa pemrograman dengan menggunakan perintah-perintah yang sesuai.
Source Code
Berikut adalah source code keseluruhan.
Schematich
Setelah memahami rangkaian sensor diatas, selanjutnya merangkai seluruh komponen seperti gambar dibawah ini:
Schematich Robot Arm Pemindah barang |
- Servo, untuk menggerakkan lengan robot (4-axis),
- Relay, untuk menggerakan Motor dc yang dipakai sebagai aktuator pada Conveyor Belt
- Sensor RGB, pendeteksi warna
- Sensor IR obstacle, digunakan sebagai saklar otomatis ketika terdeteksi ada benda yang lewat diatas konveyor. Jika sensor ini mendeteksi benda, maka konveyor akan berhenti berputar, kemudian lengan robot akan mengarahkan capit ke depan benda. Setelah warna benda berhasil dideteksi, kemudian capit akan membawa benda tersebut ke tempat penampungan warna.
- LCD, untuk menampilkan hasil warna yang terdeteksi.
Agar lebih jelas, desain awal robot arm pemindah barang dapat dilihat pada gambar dibawah ini:
Desain dan tata Letak Robot Arm |
Untuk lebih mudah memahami diagram alir (Flowchart) cara kerja robot arm pemindah barang akan ditunjukkan pada gambar dibawah ini:
Flowcart Robot Arm |
Source Code
Berikut adalah source code keseluruhan.
/* Program Robot Arm
Oleh : hesctech indonesia
update : 2019
*/
#include <Servo.h>
#include <Wire.h> // i2C Conection Library
#include <LiquidCrystal_I2C.h> //i2C LCD Library
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo ServoBase;
Servo ServoCapit;
Servo ServoSikut;
Servo ServoLengan;
int isObstaclePin = 10; // Sensor IR berada pada pin 10
int isObstacle = HIGH; // sinyal awal sensor
int PinSensor = A0; // Sensor (LDR) pada Pin Nomor A0
int PinLedMerah =3; // Led Warna Merah pada Pin Nomor 3
int PinLedHijau=4; // Led Warna Hijau pada Pin Nomor 4
int PinLedBiru=5; // Led Warna Biru pada Pin Nomor 5
int Conveyor=11;
int Hasil,HasilMerah,HasilHijau,HasilBiru;
int k=15; // Toleransi Warna
void setup() {
Serial.begin(9600);
lcd.begin();
// Menetapkan Pin Led Merah, Hijau, Biru sebagai OUTPUT:
pinMode(isObstaclePin, INPUT);
pinMode(PinLedMerah,OUTPUT);
pinMode(PinLedHijau,OUTPUT);
pinMode(PinLedBiru,OUTPUT);
pinMode(Conveyor,OUTPUT);
digitalWrite(PinLedMerah,LOW);
digitalWrite(PinLedHijau,LOW);
digitalWrite(PinLedBiru,LOW);
ServoCapit.attach(9); // Menempatkan Servo Capit pada Pin Nomor 9
ServoSikut.attach(8); // Menempatkan Servo Sikut pada Pin Nomor 10
ServoLengan.attach(7); // Menempatkan Servo1 Lengan pada Pin Nomor 11
ServoBase.attach(6); //Menempatkan Servo Capit pada Pin 6
ServoCapit.write(50); // Menetapkan Putaran Awal Servo Capit pada Sudut 15 derajat
ServoSikut.write(70); // Menetapkan Putaran Awal Servo Sikut pada Sudut 30 derajat
ServoLengan.write(180); // Menetapkan Putaran Awal Servo Lengan pada Sudut 0 derajat
ServoBase.write(0); // Menetapkan Putaran Awal Servo Lengan pada Sudut 0 derajat
delay(100);
// delay(500);
}
void loop() {
//Menempatkan posisi pengambilan barang
isObstacle = digitalRead(isObstaclePin);
if (isObstacle == LOW)
{
digitalWrite(Conveyor,LOW);
lcd.clear();
lcd.print("Ada Barang...!");
delay(100);
for(int i = 150; i > 78; i--)
ServoBase.write(87);
ServoLengan.write(180); //
delay(500);
ServoLengan.write(38);
ServoCapit.write(135); //membuka capit
ServoSikut.write(87);
delay(1000);
digitalWrite(PinLedMerah,HIGH); // Menyalakan Led Merah
delay(150); // Jeda 150 milidetik agar LDR bisa Membaca Warna Merah dengan Stabil
// Membaca Data Sensor (LDR) :
Hasil= analogRead(PinSensor);
HasilMerah=map(Hasil,0,1023,0,255);
Serial.print(HasilMerah);
digitalWrite(PinLedMerah,LOW);
delay(150);
digitalWrite(PinLedHijau,HIGH); // Menyalakan Led Hijau
delay(150); // Jeda 150 milidetik agar LDR bisa Membaca Warna Hijau dengan Stabil
// Membaca Data Sensor (LDR) :
Hasil= analogRead(PinSensor);
HasilHijau=map(Hasil,0,1023,0,255);
Serial.print(" ");
Serial.print(HasilHijau);
digitalWrite(PinLedHijau,LOW);
delay(150);
digitalWrite(PinLedBiru,HIGH); // Menyalakan Led Biru
delay(150); // Jeda 150 milidetik agar LDR bisa Membaca Warna Biru dengan Stabil
// Membaca Data Sensor (LDR) :
Hasil= analogRead(PinSensor);
HasilBiru=map(Hasil,0,1023,0,255);
Serial.print(" ");
Serial.println(HasilBiru);
digitalWrite(PinLedBiru,LOW);
delay(150);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mengambil Barang...!");
delay(1000);
// Membandingkan Warna Hasil Peneraan Sensor dengan Hasil Kalibrasi :
if(abs(HasilMerah-232)<k && abs(HasilHijau-177)<k && abs(HasilBiru-90)<k){
Serial.println("WARNA MERAH\n");
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("WARNA MERAH.!");
ServoLengan.write(85); // Lengan menuju capit menuju benda
delay(1000);
ServoSikut.write(95); // Sikut membawa capit menuju benda
delay(1000);
ServoCapit.write(65); // Capit memegang benda
delay(1000);
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit yang membawa benda
delay(1000);
ServoBase.write(0); // Base berputar kerah kotak sesuai warna
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit dan mengarahkan ke kotak warna
delay(1000);
ServoLengan.write(75); // Lengan membawa benda ke tempat Warna Merah
ServoSikut.write(110); // Sikut menurunkan capit pembawa benda menuju tempat benda
delay(1000);
ServoCapit.write(135); // Capit melepas benda
delay(1000);
ServoLengan.write(130); // Lengan menuju posisi istirahat
ServoSikut.write(70); // Sikut mengangkat capit kosong
delay(500);
ServoLengan.write(180); // Lengan menuju posisi istirahat
delay(500);
ServoBase.write(30); // Base menuju posisi istirahat
delay(500);
ServoSikut.write(70); // Sikut menuju posisi istirahat
ServoCapit.write(50); // Capit menutup (posisi istirahat)
} else
if(abs(HasilMerah-232)<k && abs(HasilHijau-223)<k && abs(HasilBiru-125)<k){
Serial.println("WARNA KUNING\n");
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("WARNA KUNING.!");
ServoLengan.write(85); // Lengan menuju capit menuju benda
delay(1000);
ServoSikut.write(95); // Sikut membawa capit menuju benda
delay(1000);
ServoCapit.write(65); // Capit memegang benda
delay(1000);
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit yang membawa benda
delay(1000);
ServoBase.write(8); // Base berputar kerah kotak sesuai warna
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit dan mengarahkan ke kotak warna
delay(1000);
ServoLengan.write(75); // Lengan membawa benda ke tempat Warna Merah
ServoSikut.write(110); // Sikut menurunkan capit pembawa benda menuju tempat benda
delay(1000);
ServoCapit.write(135); // Capit melepas benda
delay(1000);
ServoLengan.write(130); // Lengan menuju posisi istirahat
ServoSikut.write(70); // Sikut mengangkat capit kosong
delay(500);
ServoLengan.write(180); // Lengan menuju posisi istirahat
delay(500);
ServoBase.write(30); // Base menuju posisi istirahat
delay(500);
ServoSikut.write(70); // Sikut menuju posisi istirahat
ServoCapit.write(50); // Capit menutup (posisi istirahat)
} else
if(abs(HasilMerah-213)<k && abs(HasilHijau-220)<k && abs(HasilBiru-138)<k){
Serial.println("WARNA HIJAU\n");
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("WARNA HIJAU..");
ServoLengan.write(85); // Lengan menuju menuju benda
delay(1000);
ServoSikut.write(95); // Sikut membawa capit menuju benda
delay(1000);
ServoCapit.write(65); // Capit memegang benda
delay(1000);
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit yang membawa benda
delay(1000);
ServoBase.write(17); // Base berputar kerah kotak sesuai warna
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit dan mengarahkan ke kotak warna
delay(1000);
ServoLengan.write(75); // Lengan membawa benda ke tempat Warna Merah
ServoSikut.write(110); // Sikut menurunkan capit pembawa benda menuju tempat benda
delay(1000);
ServoCapit.write(135); // Capit melepas benda
delay(1000);
ServoLengan.write(130); // Lengan menuju posisi istirahat
ServoSikut.write(70); // Sikut mengangkat capit kosong
delay(500);
ServoLengan.write(180); // Lengan menuju posisi istirahat
delay(500);
ServoBase.write(30); // Base menuju posisi istirahat
delay(500);
ServoSikut.write(70); // Sikut menuju posisi istirahat
ServoCapit.write(50); // Capit menutup (posisi istirahat)
} else
if(abs(HasilMerah-187)<k && abs(HasilHijau-213)<k && abs(HasilBiru-176)<k){
Serial.println("WARNA BIRU\n");
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("WARNA BIRU.!");
ServoLengan.write(85); // Lengan menuju capit menuju benda
delay(1000);
ServoSikut.write(95); // Sikut membawa capit menuju benda
delay(1000);
ServoCapit.write(65); // Capit memegang benda
delay(1000);
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit yang membawa benda
delay(1000);
ServoBase.write(24); // Base berputar kerah kotak sesuai warna
ServoLengan.write(190); // lengan menaikkan capit yang membawa benda
ServoSikut.write(70); // Sikut menaikkan capit dan mengarahkan ke kotak warna
delay(1000);
ServoLengan.write(75); // Lengan membawa benda ke tempat Warna Merah
ServoSikut.write(110); // Sikut menurunkan capit pembawa benda menuju tempat benda
delay(1000);
ServoCapit.write(135); // Capit melepas benda
delay(1000);
ServoLengan.write(130); // Lengan menuju posisi istirahat
ServoSikut.write(70); // Sikut mengangkat capit kosong
delay(500);
ServoLengan.write(180); // Lengan menuju posisi istirahat
delay(500);
ServoBase.write(30); // Base menuju posisi istirahat
delay(500);
ServoSikut.write(70); // Sikut menuju posisi istirahat
ServoCapit.write(50); // Capit menutup (posisi istirahat)
} else
Serial.println("Warna Tidak Dikenal\n");
lcd.setCursor(0, 1);
lcd.clear();
lcd.print("Warna tdk diknal");
digitalWrite(Conveyor, HIGH);
delay(500);
}
else
{
digitalWrite(Conveyor, HIGH);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Tidak Ada Barang");
delay(100);
}
delay (100);
}
Result
Desain bentuk robot arm pemindah barang otomatis ini didesan dengan menggunakan acrylic 3mm yang didesain dengan menggunakan alat khusus pembengkok acrylic.disamping itu juga base robot dibuat dengan menggunakan triplek dan kayu blok 3 cm2. Untuk desain lengan robot ini kamu bisa bereksperimen sendiri sesuai keinginan. Berikut adalah hasil pembuatan lengan robot yang telah selesai dibuat oleh Hestech Indonesia bersama team.
Gambar diatas merupakan last result yang telah di uji coba berdasarkan teori dan skema sederhana.
Pada gambar diatas terdapat 4 buah gear yang berfungsi sebagai pemutar konveyor dengan 1 tumpuan gear utama.
Selesai.
Selamat mencoba dan bereksperimen sendiri...!
Lengan Robot Arm 4 axis |
Capit/Gripper |
Conveyor Belt dengan gear box |
Peletakan sensor IR dan RGB |
Selamat mencoba dan bereksperimen sendiri...!
comment 0 komentar
more_vert