Arduino ile Renklerine Göre Ürünleri Ayıklama Robotu Yapımı
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:
-
Arduino Uno ( başka model de kullanabilirsiniz)
-
TCS34725 Rgb renk algılama sensörü
-
2 Adet sg90 servo motor
-
Jumper kablolar
-
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
avrdude: ser_open(): can’t open device “\\.\COM3”: Erisim engellendi. Kodları çalıştırırken şu sekilde hata alıyorum sebebi nedir ?
Renk sensörü çalışmıyor
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?
TCS 34725 dosyasında hata gösteriyor hata mesajı:redefinition of ‘Adafruit_TCS34725 tcs’ ne yapmalıyız
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
Merhaba
Bu projeyi renklere göre değil de bir barkod okuyucu kullanıp ürünleri barkoda gore ayırma yapabilir miyiz?
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.
Kod ve sistem çalışmıyor 🙁
Sezgin bey sizle özelden konuşabilir miyiz
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ı.
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
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
İ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
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
sorunu çözebildin mi kardeşim
programı nasıl indireceğiz yardımcı olur musunuz?
hocam bu ürünün parcalarini nerden temin edebiliriz bide tahmini ne kadara maal olur
Proje siparişi linkinden mail atın hocam, fiyat teklifi versinler https://www.robimek.com/proje-siparisi/
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
modeli aynı olsun görünümü fark etmez.
Renkli olmayan parçaları marangozda yaptırıp diğer parçaları yazıcıdan çıkarsak olur mu
Malzeme uygun ise istediğinizi kullanarak yapabilirsiniz. Pulların renklerini de farklı yapacaksanız sistemde renk aralıklarını tanımlamanız gerekir.
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.
Teknik resim çizimlerini ekledim . yukarıdaki linkten indirebilirsiniz.
Bilgisayar kullanmadan sadece lcd ekran ve buton kullansak yazılımda ne gibi değişiklikler yapmamız gerekiyor
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.
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.
renk görmediğinde işlemi sonlandırmaktadır. O nedenle önce pulları hazneye koyup programı çalıştırın
Maliyet olarak ne kadar bir tutar ile bu projeyi gerceklestirebiliriz?
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.