(Tutorial Lengkap) Membuat Robot Arm Untuk Sistem Sorting Berdasarkan Warna
Dikesempatan yang baik ini saya ingin berbagi sedikit pengalaman saya waktu membuat rancang bangun Robot Arm Untuk Sistem Sorting barang berdasarkan Warna. membuat robot arm dengan arduino sebagai mikrokontrolernya. mungkin sebelumnya saya akan menjelaskan bagaimana sistem kerjanya dahulu dan apa aja tujuan dari pembuatan robot ini supaya kedepannya bisa lebih dikembangkan lagi.
Cara Kerja
cara kerja dari robot ini sangat sederhana sekali, pertama ketika ada barang yang melewati pembacaan sensor warna, maka sensor warna akan mendeteksi warnanya baru kemudian konveyor berhenti dan robot arm mengambil barang tersebut untuk di pindahkan ke tempat yang di sediakan sesuai warna barangnya
disini saya menggunakan semacam aplikasi interface buat ngontrol dan monitoring menggunakan visual basic, jadi kita bisa menentukan warna apa saja yang akan kita sortir. namun untuk interfacenya mungkin akan dibahas pada artikel berikutnya.
sebenernya tujuan pembuatan robot ini akan di implementasikan terhadap penyortiran buah sesuai tingkat warna kematangannya.
oke sekarang kita lanjut ke bagaimana cara membuat alat ini, pertama kalian harus mempersiapkan komponen yang akan gunakan
Komponen yang digunakan
- Frame Robot Arm ( Beli satu paket)
- Arduino uno
- 4 Motor Micro Servo
- Motor DC
- Sensor TCS2300
- Driver Motor L298N
- power 12 volt
dari diagram blok tersebut dapat kita buatkan rangkaian skematik yang terbagi menjadi 3 bagian yaitu rangkaian arduino dengan sensor tcs3200, rangkaian robot arm, rangkaian konveyor, maka rangkaian skematik berikut ini :
Rangkaian Arduino dengan sensor TCS3200
Sensor warna TCS3200 menerima daya 3 sampai 5 volt dan terdiri dari pin kontrol S0, S1, S2, S3, dan pin out yang berfungsi untuk mengirimkan data ke arduino.
Rangkaian skematik Robot Arm
Motor servo terdiri dari kabel warna orange dihubungkan dengan pin PWM pada arduino, kabel warna merah dihubungkan dengan pin VCC pada arduino, dan kabel warna coklat dihubungkan dengan pin GND pada arduino.
Rangkaian Konveyor
Untuk memudahkan proses kontrol motor DC maka dipasang Driver motor L298N. Pada Driver motor L298N digunakan pin ENB sebagai pengendali motor DC dan pin IN3, IN4 sebagai pengendali arah putaran motor DC.
Source code arduino
Source code arduino
#include #include //motor servo
Servo ServoLengankiri;
Servo ServoLengankanan;
Servo ServoBawah;
Servo ServoCapit;
// the used PINs sensor warna
const int s0=8;
const int s1=9;
const int s2=12;
const int s3=11;
const int sensorData=10;
// the used PIN driver motor
int ENB = 13;
int IN3 = 2;
int IN4 = 7;
// Global variable to store data
int dataR=0;
int dataG=0;
int dataB=0;
void setup()
{
pinMode(ENB,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
pinMode(sensorData,INPUT);
Serial.begin(9600);
digitalWrite(s0,HIGH);
digitalWrite(s1,HIGH);
ServoLengankiri.attach(5);
ServoLengankanan.attach(4);
ServoBawah.attach(6);// Menempatkan Servo1 Lengan pada Pin Nomor 11
ServoCapit.attach(3);
ServoLengankiri.write(120);
ServoLengankanan.write(70);
ServoBawah.write(180); // Menetapkan Putaran Awal Servo Lengan pada Sudut 0 derajat
ServoCapit.write(90);
delay(100);
Serial.begin(9600);
delay(1000);
}
void loop()
{
//sensor warna deteksi
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
dataR=pulseIn(sensorData,LOW);
// Serial.print("R= ");
//Serial.print(dataR);
//Serial.print(" ");
delay(20);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
dataG=pulseIn(sensorData,LOW);
// Serial.print("G= ");
//Serial.print(dataG);
//Serial.print(" ");
delay(20);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
dataB=pulseIn(sensorData,LOW);
//Serial.print("B= ");
//Serial.print(dataB);
//Serial.print(" ");
delay(20);
//delay(2000);
muter();
//identifikasi sensor warna
if(isRed())
{
Serial.println("Merah");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(90); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isGreen())
{
Serial.println("Hijau");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(50); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isBlue())
{
Serial.println("Biru");
muter();
delay(150);
berhenti(); ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(70); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180);
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isYellow())
{
Serial.println("Kuning");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(40); // Lengan membawa capit menuju tempat
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isOrange())
{
Serial.println("this is the ORANGE color");
}
}
//nilai dari hasil kalibrasi
bool isRed()
{
if((dataR<14 datar="">10) && (dataG<27 datag="">23) && (dataB<24 datab="">20))
{
return true;
}
else
{
return false;
}
}
bool isGreen()
{
if((dataR<26 datar="">22) && (dataG<21 datag="">17) && (dataB<24 datab="">19))
{
return true;
}
else
{
return false;
}
}
bool isBlue()
{
if((dataR<27 datar="">23) && (dataG<27 datag="">23) && (dataB<19 datab="">15))
{
return true;
}
else
{
return false;
}
}
bool isYellow()
{
if((dataR<10 datar="">6) && (dataG<15 datag="">11) && (dataB<19 datab="">15))
{
return true;
}
else
{
return false;
}
}
bool isOrange()
{
if((dataR<6 datar="">2) && (dataG<15 datag="">10) && (dataB<13 datab="">9))
{
return true;
}
else
{
return false;
}
}
//konveyor
void muter()
{
analogWrite(ENB,150);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void berhenti()
{
analogWrite(ENB,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
13>15>6>19>15>10>19>27>27>24>21>26>24>27>14>
Servo ServoLengankiri;
Servo ServoLengankanan;
Servo ServoBawah;
Servo ServoCapit;
// the used PINs sensor warna
const int s0=8;
const int s1=9;
const int s2=12;
const int s3=11;
const int sensorData=10;
// the used PIN driver motor
int ENB = 13;
int IN3 = 2;
int IN4 = 7;
// Global variable to store data
int dataR=0;
int dataG=0;
int dataB=0;
void setup()
{
pinMode(ENB,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
pinMode(sensorData,INPUT);
Serial.begin(9600);
digitalWrite(s0,HIGH);
digitalWrite(s1,HIGH);
ServoLengankiri.attach(5);
ServoLengankanan.attach(4);
ServoBawah.attach(6);// Menempatkan Servo1 Lengan pada Pin Nomor 11
ServoCapit.attach(3);
ServoLengankiri.write(120);
ServoLengankanan.write(70);
ServoBawah.write(180); // Menetapkan Putaran Awal Servo Lengan pada Sudut 0 derajat
ServoCapit.write(90);
delay(100);
Serial.begin(9600);
delay(1000);
}
void loop()
{
//sensor warna deteksi
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
dataR=pulseIn(sensorData,LOW);
// Serial.print("R= ");
//Serial.print(dataR);
//Serial.print(" ");
delay(20);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
dataG=pulseIn(sensorData,LOW);
// Serial.print("G= ");
//Serial.print(dataG);
//Serial.print(" ");
delay(20);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
dataB=pulseIn(sensorData,LOW);
//Serial.print("B= ");
//Serial.print(dataB);
//Serial.print(" ");
delay(20);
//delay(2000);
muter();
//identifikasi sensor warna
if(isRed())
{
Serial.println("Merah");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(90); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isGreen())
{
Serial.println("Hijau");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(50); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isBlue())
{
Serial.println("Biru");
muter();
delay(150);
berhenti(); ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(70); // Lengan membawa capit menuju tempat
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoBawah.write(180);
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isYellow())
{
Serial.println("Kuning");
muter();
delay(150);
berhenti();
ServoLengankiri.write(110); // Sikut mengangkat capit
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(110); // Capit memegang benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoLengankiri.write(150); // Sikut mengangkat capit
delay(1000);
ServoBawah.write(40); // Lengan membawa capit menuju tempat
delay(1000);
ServoLengankanan.write(90); // Sikut menurunkan capit
delay(1000);
ServoCapit.write(90); // Sikut melepas benda
delay(1000);
ServoLengankanan.write(70); // Sikut menurunkan capit
delay(1000);
ServoBawah.write(180); // robot ke posisi semula
delay(1000);
ServoLengankiri.write(120);
delay(1000);
ServoLengankanan.write(70);
}
if(isOrange())
{
Serial.println("this is the ORANGE color");
}
}
//nilai dari hasil kalibrasi
bool isRed()
{
if((dataR<14 datar="">10) && (dataG<27 datag="">23) && (dataB<24 datab="">20))
{
return true;
}
else
{
return false;
}
}
bool isGreen()
{
if((dataR<26 datar="">22) && (dataG<21 datag="">17) && (dataB<24 datab="">19))
{
return true;
}
else
{
return false;
}
}
bool isBlue()
{
if((dataR<27 datar="">23) && (dataG<27 datag="">23) && (dataB<19 datab="">15))
{
return true;
}
else
{
return false;
}
}
bool isYellow()
{
if((dataR<10 datar="">6) && (dataG<15 datag="">11) && (dataB<19 datab="">15))
{
return true;
}
else
{
return false;
}
}
bool isOrange()
{
if((dataR<6 datar="">2) && (dataG<15 datag="">10) && (dataB<13 datab="">9))
{
return true;
}
else
{
return false;
}
}
//konveyor
void muter()
{
analogWrite(ENB,150);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void berhenti()
{
analogWrite(ENB,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
13>15>6>19>15>10>19>27>27>24>21>26>24>27>14>
Untuk hasilnya bisa di lihat pada video berikut ini
Post a Comment for "(Tutorial Lengkap) Membuat Robot Arm Untuk Sistem Sorting Berdasarkan Warna "