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

30 47.291

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.

ÜRÜNÜ SATIN 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ı >>   MEKANİK PARÇLARI SATIN AL   

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 Resimlerine buradan ulaşabilirsiniz : Teknik Resim Dosyaları

Not: Kodda renk kalibrasyonunu tekrar yapmak istemiyorsanız aşağıdaki renk filamentlerden baskı alabilirsiniz.
Filament renkleri 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ı:
#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..

Android Telefon Kontrollü Versiyonu İncele !  >> Yeni Versiyon RENK OTOMASYONU

 

Bunlar da İlgini Çekebilir
Cevap bırakın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

30 Yorum
  1. taha

    avrdude: ser_open(): can’t open device “\\.\COM3”: Erisim engellendi. Kodları çalıştırırken şu sekilde hata alıyorum sebebi nedir ?

  2. İlknur

    Renk sensörü çalışmıyor

  3. Agathon

    Arduinoya serial port terminalden de 8 göndererek çalıştırmayı denedim. Her yolu test ettim yine de çalışmıyor. Arduino kodlarında bir sıkıntı mı var acaba?

  4. Erdem Kayıkçı

    TCS 34725 dosyasında hata gösteriyor hata mesajı:redefinition of ‘Adafruit_TCS34725 tcs’ ne yapmalıyız

    1. Robimek

      Kütüphane dosyasını eklemeniz gerekir. Buradan indirip ekleyebilirsiniz :https://www.robimek.com/wp-content/uploads/Renk-Sens%C3%B6r%C3%BC-K%C3%BCt%C3%BCphane.rar

  5. Aydogan

    Merhaba

    Bu projeyi renklere göre değil de bir barkod okuyucu kullanıp ürünleri barkoda gore ayırma yapabilir miyiz?

  6. fatma

    Benim renk sensörüm tcs3200 . “Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);” buradaki kod kısmında nasıl değişiklik yapmalıyım acaba yardımcı olabilir misiniz.

  7. etem

    Kod ve sistem çalışmıyor 🙁

  8. Oğuzhan

    Sezgin bey sizle özelden konuşabilir miyiz

  9. ecmel

    programı nasıl indireceğiz yardımcı olur musunuz?
    Program sadece pulların bilgisayar ortamında sayılması için mi kullanılıyor.Projenin çalışması için şart mıdır? Yoksa tercihemi bağlı.

  10. ALEMDAR

    YAZILIMI YÜKLEDİK SİSTEM TAMAM AMA TEK REN OKUYOR ONUDA YANLIŞ OKUYOR TURUNCUYU PEMBE DİYE OKUYOR TÜM PARÇALAR ORJİNAL AMA OLMUYOR YARDIMCI OLABİLİRMİSİNİZ ACİL

    1. Osman

      Renk analizi yada renklerin rgb kodlarını gösteren bir çizelgeye göre kalibrasyon yaparsanız renkler okur
      . Bi de turuncunuz pembe okunuyorsa pembe deki average değerlerini değistirirseniz doğru rengi okutmuş olursunuz

      1. Alemdar

        İlk önce renk kalibrasyonunu internette ve bazı yazılımlara göre yaptım sonra renk sensörünün hangi renge nası tepki verdiğini gösteren bi bölümden renkleri baştan ayaraladım yani 3-4 kere farklı türde kalibrasyonu yaptım ama ginede çalışmadı.Farklı bişey sorayım peki ne yaparsam ekrenda ve arduino sadece iki rengi okur yani boşta calışsa bile arayuz progrmanıdan baktığımda turuncu ,turuncu,sarı,turuncu,turuncu.. diye okutturabilirim ?tek rengi yapabiliyorum ama 2 rengide boşta çalıssa bile okudu olarak göstermek istiyorum 😀 Bari olmuyor bu şekilde yapayım

  11. 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

    1. MEHMET

      sorunu çözebildin mi kardeşim

  12. İsmail Emre

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

  13. 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/

  14. 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.

  15. 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.

  16. 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.

  17. 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.