Robotik Sistemler Maker Platformu

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

4 899

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.

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.

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

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