Arduino ile Renklerine Göre Ürünleri Ayıklama Robotu Yapımı

16 4.196

Kendi robotunu yap projelerimizin bu bölümünde arduino ile renklerine göre ürün ayıklama robotu yapımından bahsedeceğim. Geçmiş projelerimizde renk sensörleri ile uygulamalar yapmıştık. Bu projede TCS34725 modeli renk sensörünü tercih ettim. Çünkü bu sensör diğerlerine göre daha doğru algılama işlemi yapmakta ve çevredeki ışık değişiminden etkilenmemektedir. Ürün ayıklama robotu, visual basic de tasarladığım arayüz programı ile kontrol edilmektedir. Program, arduino üzerinden anlık veri alarak kaplara aktarılan ürünlerin miktarını ekrana yazdırmaktadır. Ayrıca ayıklama işlemi tamamlandığında sistem otomatik olarak durmaktadır.

Projeyi Satın Al

Malzemeler:
  1. Arduino Uno ( başka model de kullanabilirsiniz)
  2. TCS34725 Rgb renk algılama sensörü
  3. 2 Adet sg90 servo motor
  4. Jumper kablolar
  5. 3d Baskı Stl Dosyaları >>  indir

Mekanik Kısım:

Sistemin hareket mekanizması ve genel tasarımı howtomechatronics sitesindeki Color Sorter isimli projeden referans alınarak pivot edilmiştir. Malzemeler listesinde mekanik parçaların stl dosyalarını indirebilir 3d yazıcıdan çıktı alabilirsiniz. Projeye ek olarak bazı parçalar eklenmiştir.

3d yazıcıdan birden fazla çıktı alınacak parçaların listesi:
  • yan parca1.STL >> 2 Adet
  • bardak.STL >> 6 Adet
  • destek.STL >> 4 Adet
  • pul.STL >> Sistemde tanımlı renkler için dilediğiniz kadar baskı yapabilirsiniz. Bardakların her birine ortalama 8 tane pul sığmaktadır.
Parçaların Teknik Resimleri buradan indiriniz : Teknik Resim Dosyaları

Not: Kodda renk kalibrasyonunu tekrar yapmak istemiyorsanız aşağıdaki renk filamentlerden baskı alabilirsiniz.

Esun marka filament kullanılmış olup renkler aşağıdaki gibidir.
  • Kırmızı
  • Pik Yeşil
  • Sarı
  • Açık Mavi
  • Turuncu
  • Pembe

 

Devre Şeması:

Yazılım Kısmı :

Renk Sensörü Kütüphanesi >> TCS34725 Kütüphane Dosyası

Arduino Yazılımı:

// Ürün - Renk Ayıklama Robotu
// Developed by Sezgin GÜL
// Robimek - 2017
#include <Servo.h>
#include "Wire.h"
#include "Adafruit_TCS34725.h"

Servo ust_servo;
Servo alt_servo;
int renk = 0;
int data, durum = false;

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);
void setup() {
Serial.begin(9600);

if (tcs.begin()) {
} else {

while (1); // Dur!
}

ust_servo.attach(9);
alt_servo.attach(8);

ust_servo.write(120);
delay(10);
}
void loop() {

data = Serial.read();
delay(10);
if ( data == '8')
{
durum = true;

}

if ( data =='9')
{
durum = false;
}

if ( durum == true)
{
makine_baslat();
}
if ( durum == false)
{
makine_durdur();
}
}

void makine_baslat()
{
delay(500);
for(int i = 120; i > 55; i--) {
ust_servo.write(i);
delay(5);
}
delay(500);

renk = renk_oku();
delay(50);
switch (renk) {
case 1:
alt_servo.write(45);

Serial.println(1);
break;
case 2:
alt_servo.write(60);
Serial.println(2);
break;
case 3:
alt_servo.write(72);
Serial.println(3);
break;
case 4:
alt_servo.write(88);
Serial.println(4);
break;
case 5:
alt_servo.write(102);
Serial.println(5);
break;
case 6:
alt_servo.write(120);
Serial.println(6);
break;
default:
Serial.println(0);
break;
}
delay(300);


for(int i = 55; i > 20; i--) {
ust_servo.write(i);
delay(5);
}
delay(200);

for(int i = 20; i < 120; i++) {
ust_servo.write(i);
delay(5);
}
renk=0;
}

void makine_durdur()
{
ust_servo.write(ust_servo.read());
alt_servo.write(alt_servo.read());
}

// renk okuma fonksiyonu
int renk_oku() {
uint16_t clearcol, red, green, blue;
float average, r, g, b;
tcs.getRawData(&red, &green, &blue, &clearcol);

average = (red+green+blue)/3;
r = red/average;
g = green/average;
b = blue/average;

delay(50);

if((r < 1.74)&& (r > 1.58) && (g > 0.76) && (g < 0.9)&& (b < 0.56&& (b > 0.45))){
renk = 1;

}
if((r < 1.05)&& (r > 0.75) && (g > 1.38) && (g < 1.5)&& (b < 1&& (b > 0.54))){
renk = 2;

}
if((r < 1.32)&& (r > 1.19) && (g > 1.24) && (g < 1.34)&& (b < 0.52&& (b > 0.42))){
renk = 3;

}

if((r < 1.5)&& (r > 1.35) && (g > 0.74) && (g < 0.85)&& (b < 0.9)&& (b > 0.7)){
renk = 4;

}
if((r < 2.2)&& (r > 1.8) && (g > 0.5) && (g < 0.65)&& (b < 0.55)&& (b > 0.4)){
renk = 5;

}
if((r < 1)&& (r > 0.48) && (g > 1.24) && (g < 1.34)&& (b < 1.24)&& (b > 1.14)){
renk = 6;

}
return renk;
}

 Visual Basic Arayüz Tasarımı:

Visual basic ile geliştirilen arayüz programı ile ürünlerin anlık takibi yapılmaktadır. Uygulamayı çalıştırın. Arduinonun bağlı olduğu portu seçerek cihaza bağlan butonuna tıklayın. Pulları huni içerisine bırakın ve cihazı çalıştır butonuna tıkladığınızda sistem çalışmaya başlayacaktır. Üstteki servo motor hareket ederek pulu hazneye alır ve renk sensörünün hizasına getirir. sensör pulun rengini tespit ederek alttaki servo motora hangi bardağa yöneleceğinin açı bilgisini gönderir. Üstteki servo motor pulu ilerletir ve bardağa gönderir. Arayüz programında ise, ayrışan pulların hangi renkte ne kadar olduğu anlık olarak ekrana yazdırılır. Bütün pullar ayıklandığında arayüz programı sistemi otomatik olarak kapatır ve ekrana bilgilendirme mesajı gönderir.

Arayüz Programını Buradan İndirebilirsiniz >> Renk Ayırma Robotu Kontrol Programı

Kendi Robotunu Yap projelerimizin bu bölümünde renk ayırma işlemi yapan robotumuzdan bahsettik. Bir sonraki projede görüşmek üzere..

Bunları da beğenebilirsin

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

  1. kadir samet

    yazılımı yükledik üst servo motor çalışıyor alt servo motor çalışmıyor size ulaşabilecegimiz bi adres varmı yardımcı olabilirmisiniz

  2. İsmail Emre

    programı nasıl indireceğiz yardımcı olur musunuz?

  3. fatih

    hocam bu ürünün parcalarini nerden temin edebiliriz bide tahmini ne kadara maal olur

    1. Sezgin GÜL

      Proje siparişi linkinden mail atın hocam, fiyat teklifi versinler https://www.robimek.com/proje-siparisi/

  4. Osman tekin

    Sayın hocam tcs34725 yuvalı ve normal versiyonları var piyasada sanıyorum siz yuvalı olanı kullanmışınız normal olanı kullansak projede bir fark olur mu yuvalı olanı stoklarda tükenmiş hep

    1. Sezgin GÜL

      modeli aynı olsun görünümü fark etmez.

  5. Osman tekin

    Renkli olmayan parçaları marangozda yaptırıp diğer parçaları yazıcıdan çıkarsak olur mu

    1. Sezgin GÜL

      Malzeme uygun ise istediğinizi kullanarak yapabilirsiniz. Pulların renklerini de farklı yapacaksanız sistemde renk aralıklarını tanımlamanız gerekir.

      1. osman tekin

        Rahatsızlık verdiğim için öncelikle özür dilerim. 3d konusunda çok yeniyim -kendin yap kendin öğren tarzı- okuldaki yazıcımız çok yavaş olduğu ve malzeme maliyetlerini azaltmak adına bazı parçaları marangozda yaptırmak istiyoruz sorun şu ki ölçü ve ebatları hakkında bir bilgimiz yok. 3d malzemelerin ölçü ve ebatları hakkında bilgi verir misiniz. teşekkürler.

        1. Sezgin GÜL

          Teknik resim çizimlerini ekledim . yukarıdaki linkten indirebilirsiniz.

  6. Mesut Turan

    Bilgisayar kullanmadan sadece lcd ekran ve buton kullansak yazılımda ne gibi değişiklikler yapmamız gerekiyor

    1. Sezgin GÜL

      if ( data == ‘8’)
      {
      durum = true;

      }
      burada 8 değeri geldiğinde makine çalışmaya başlıyor. burada data == 8 kısmına butonun durumunu alırsın. lcd ye yazdırmak için de switch (renk) { kısmında okunan renklere göre lcd ye yazdırabilirsin.

  7. Alper

    Cihazı çalıştır diye bilgisayardan programı çalıştırdığımızda “İşlem Tamamlandı” diye uyarı veriyor bağlantı kopuyor. Tüm sistemi STL’ler dahil hazır ama bi türlü çalıştıramadık yardımcı olursanız sevinirim.

    1. Sezgin GÜL

      renk görmediğinde işlemi sonlandırmaktadır. O nedenle önce pulları hazneye koyup programı çalıştırın

      1. Tuba

        Maliyet olarak ne kadar bir tutar ile bu projeyi gerceklestirebiliriz?

        1. Sezgin GÜL

          Donanımsal parçaları nereden temin ettiğinize bağlı olarak değişkenlik gösterebilir. Ayrıca 3b baskıyı dışarıdan temin edecekseniz maliyeti arttırabilir. Donanım parçaları genelde standart fiyatlardadır. Donanım satışı yapan e-ticaret sitelerinden fiyatlarına bakıp hesap yapabilirsiniz.