Andri Puji Prasetiyo
Published © CC BY

Robot Servo Penyortir Warna

Robot Servo Penyortir Warna adalah sebuah proyek arduino yang memanfaatkan rangkain sensor warna untuk mendeteksi warna

IntermediateFull instructions provided4 hours5,214
Robot Servo Penyortir Warna

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
TOWERPRO MG995 SERVO MOTOR 55G
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×2
RGB Diffused Common Cathode
RGB Diffused Common Cathode
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×1
LDR GL5516 5MM PHOTORESISTOR PHOTO RESISTOR GL 5516
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
PVC Wiring Duct
Scissor
Origami paper
Screw
Screwdriver

Story

Read more

Schematics

Skema Sensor Warna

Skema Full Proyek

Code

Source Code Kalibrasi Warna

C/C++
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 Hasil,HasilMerah,HasilHijau,HasilBiru;

void setup() {
// Menetapkan Pin Led Merah, Hijau, Biru sebagai OUTPUT:
  pinMode(PinLedMerah,OUTPUT);
  pinMode(PinLedHijau,OUTPUT);
  pinMode(PinLedBiru,OUTPUT); 
  digitalWrite(PinLedMerah,LOW);
  digitalWrite(PinLedHijau,LOW);
  digitalWrite(PinLedBiru,LOW);

  Serial.begin(9600);
  delay(1000);

  Serial.println("  R   G   B");
  Serial.println("--- --- ---");

}

void loop() {

   digitalWrite(PinLedMerah,HIGH); // Menyalakan Led Merah
   delay(150); // Jeda 150 mili detik agar LDR bisa Membaca Warna Merah
// 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 mili detik agar LDR bisa Membaca Warna Hijau
// 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 mili detik agar LDR bisa Membaca Warna Biru
// Membaca Data Sensor (LDR) :
   Hasil= analogRead(PinSensor);
   HasilBiru=map(Hasil,0,1023,0,255); 
   Serial.print(" ");
   Serial.println(HasilBiru);
   digitalWrite(PinLedBiru,LOW); 
   delay(150);
}

Source Code Full Proyek

C/C++
 #include <Servo.h>
Servo ServoCapit;
Servo ServoSikut;
Servo ServoLengan;
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 Hasil,HasilMerah,HasilHijau,HasilBiru;
int k=6;  // Toleransi Warna

void setup() {
// Menetapkan Pin Led Merah, Hijau, Biru sebagai OUTPUT:
  pinMode(PinLedMerah,OUTPUT);
  pinMode(PinLedHijau,OUTPUT);
  pinMode(PinLedBiru,OUTPUT); 
  digitalWrite(PinLedMerah,LOW);
  digitalWrite(PinLedHijau,LOW);
  digitalWrite(PinLedBiru,LOW);
  ServoCapit.attach(9); // Menempatkan Servo Capit pada Pin Nomor 9
  ServoSikut.attach(10); // Menempatkan Servo Sikut pada Pin Nomor 10
  ServoLengan.attach(11); // Menempatkan Servo1 Lengan pada Pin Nomor 11 
  ServoCapit.write(45); // Menetapkan Putaran Awal Servo Capit pada Sudut 45 derajat      
  ServoSikut.write(120); // Menetapkan Putaran Awal Servo Sikut pada Sudut 120 derajat
  ServoLengan.write(0); // Menetapkan Putaran Awal Servo Lengan pada Sudut 0 derajat
  delay(100);      
  Serial.begin(9600);
  delay(1000);
}

void loop() {
   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);

// Membandingkan Warna Hasil Peneraan Sensor dengan Hasil Kalibrasi :

  if(abs(HasilMerah-238)<k && abs(HasilHijau-218)<k && abs(HasilBiru-192)<k){
    Serial.println("WARNA MERAH\n");

    ServoSikut.write(90); // Sikut mengangkat capit
    delay(1000);
    ServoLengan.write(90); // Lengan membawa capit menuju tempat benda
    delay(1000);
    ServoCapit.write(70); // Capit membuka
    delay(1000);
    ServoSikut.write(70); // Sikut membawa capit menuju benda  
    delay(1000);
    ServoCapit.write(45); // Capit memegang benda
    delay(1000);
    ServoSikut.write(90); // Sikut menaikkan capit yang membawa benda
    delay(1000);
    ServoLengan.write(110); // Lengan membawa benda ke tempat Warna Merah
    delay(1000);
    ServoSikut.write(70); // Sikut menurunkan capit pembawa benda menuju tempat benda  
    delay(1000);
    ServoCapit.write(70); // Capit melepas benda
    delay(1000);
    ServoSikut.write(90); // Sikut mengangkat capit kosong
    delay(1000);
    ServoCapit.write(45); // Capit menutup (posisi istirahat)
    delay(1000);
    ServoLengan.write(0); // Lengan menuju posisi istirahat
    delay(1000);
    ServoSikut.write(120); // Sikut menuju posisi istirahat 

    } else

   if(abs(HasilMerah-237)<k && abs(HasilHijau-238)<k && abs(HasilBiru-224)<k){
    Serial.println("WARNA KUNING\n");

    ServoSikut.write(90); // Sikut mengangkat capit
    delay(1000);
    ServoLengan.write(90); // Lengan membawa capit menuju tempat benda
    delay(1000);
    ServoCapit.write(70); // Capit membuka
    delay(1000);
    ServoSikut.write(70); // Sikut membawa capit menuju benda  
    delay(1000);
    ServoCapit.write(45); // Capit memegang benda
    delay(1000);
    ServoSikut.write(90); // Sikut menaikkan capit yang membawa benda
    delay(1000);
    ServoLengan.write(70); // Lengan membawa benda ke tempat Warna Merah
    delay(1000);
    ServoSikut.write(70); // Sikut menurunkan capit pembawa benda menuju tempat benda  
    delay(1000);
    ServoCapit.write(70); // Capit melepas benda
    delay(1000);
    ServoSikut.write(90); // Sikut mengangkat capit kosong
    delay(1000);
    ServoCapit.write(45); // Capit menutup (posisi istirahat)
    delay(1000);
    ServoLengan.write(0); // Lengan menuju posisi istirahat
    delay(1000);
    ServoSikut.write(120); // Sikut menuju posisi istirahat 

    } else

 if(abs(HasilMerah-221)<k && abs(HasilHijau-230)<k && abs(HasilBiru-216)<k){
    Serial.println("WARNA HIJAU\n");

    ServoSikut.write(90); // Sikut mengangkat capit
    delay(1000);
    ServoLengan.write(90); // Lengan membawa capit menuju tempat benda
    delay(1000);
    ServoCapit.write(70); // Capit membuka
    delay(1000);
    ServoSikut.write(70); // Sikut membawa capit menuju benda  
    delay(1000);
    ServoCapit.write(45); // Capit memegang benda
    delay(1000);
    ServoSikut.write(90); // Sikut menaikkan capit yang membawa benda
    delay(1000);
    ServoLengan.write(45); // Lengan membawa benda ke tempat Warna Merah
    delay(1000);
    ServoSikut.write(70); // Sikut menurunkan capit pembawa benda menuju tempat benda  
    delay(1000);
    ServoCapit.write(70); // Capit melepas benda
    delay(1000);
    ServoSikut.write(90); // Sikut mengangkat capit kosong
    delay(1000);
    ServoCapit.write(45); // Capit menutup (posisi istirahat)
    delay(1000);
    ServoLengan.write(0); // Lengan menuju posisi istirahat
    delay(1000);
    ServoSikut.write(120); // Sikut menuju posisi istirahat 

    } else

 if(abs(HasilMerah-218)<k && abs(HasilHijau-235)<k && abs(HasilBiru-225)<k){
    Serial.println("WARNA BIRU\n");

      ServoSikut.write(90); // Sikut mengangkat capit
    delay(1000);
    ServoLengan.write(90); // Lengan membawa capit menuju tempat benda
    delay(1000);
    ServoCapit.write(70); // Capit membuka
    delay(1000);
    ServoSikut.write(70); // Sikut membawa capit menuju benda  
    delay(1000);
    ServoCapit.write(45); // Capit memegang benda
    delay(1000);
    ServoSikut.write(90); // Sikut menaikkan capit yang membawa benda
    delay(1000);
    ServoLengan.write(20); // Lengan membawa benda ke tempat Warna Merah
    delay(1000);
    ServoSikut.write(70); // Sikut menurunkan capit pembawa benda menuju tempat benda  
    delay(1000);
    ServoCapit.write(70); // Capit melepas benda
    delay(1000);
    ServoSikut.write(90); // Sikut mengangkat capit kosong
    delay(1000);
    ServoCapit.write(45); // Capit menutup (posisi istirahat)
    delay(1000);
    ServoLengan.write(0); // Lengan menuju posisi istirahat
    delay(1000);
    ServoSikut.write(120); // Sikut menuju posisi istirahat 

    } else

 if(abs(HasilMerah-233)<k && abs(HasilHijau-241)<k && abs(HasilBiru-238)<k){
    Serial.println("WARNA PINK\n");

    ServoSikut.write(90); // Sikut mengangkat capit
    delay(1000);
    ServoLengan.write(90); // Lengan membawa capit menuju tempat benda
    delay(1000);
    ServoCapit.write(70); // Capit membuka
    delay(1000);
    ServoSikut.write(70); // Sikut membawa capit menuju benda  
    delay(1000);
    ServoCapit.write(45); // Capit memegang benda
    delay(1000);
    ServoSikut.write(90); // Sikut menaikkan capit yang membawa benda
    delay(1000);
    ServoLengan.write(0); // Lengan membawa benda ke tempat Warna Merah
    delay(1000);
    ServoSikut.write(70); // Sikut menurunkan capit pembawa benda menuju tempat benda  
    delay(1000);
    ServoCapit.write(70); // Capit melepas benda
    delay(1000);
    ServoSikut.write(90); // Sikut mengangkat capit kosong
    delay(1000);
    ServoCapit.write(45); // Capit menutup (posisi istirahat)
    delay(1000);
    ServoLengan.write(0); // Lengan menuju posisi istirahat
    delay(1000);
    ServoSikut.write(120); // Sikut menuju posisi istirahat 

    } else

    Serial.println("Warna Tidak Dikenal\n");    
   
  delay (2000);
}

Credits

Andri Puji Prasetiyo

Andri Puji Prasetiyo

0 projects • 2 followers
I'm Student 😊

Comments

Add projectSign up / Login