TCS3200 & Konveyör Renk Ayırıcı Band Sistemi
Konveyör ile çalışmalarım devam ediyor arkadaşlar. Bu projemde konveyör üzerine bırakılan malzemeleri renklerine göre ayırt etmek ve bunu her renk için ayrı konveyörlerle çıkışa ulaştırma çalışmasını yaptım. 3 adet renk ayrımı yaparak çalışmaktadır. RGB diye bilinen (R)Kırmızı -(G)Yeşil-(B)Mavi. Renkleri sorunsuz ve çok hızlı bir şekilde renklerini tespit ediyoruz ve bandlar sayesinde ayrıştırma işlemini gerçekleştiriyoruz. Ürün konveyörden çıktığı zaman buzzer ile uyarı alıyoruz ve sistem otomatik duruyor taki yeni ürün TCS3200 renk sensörünün önüne gelene kadar. Bu uygulamam da renk ayrımını TCS3200 renk sensörü ile yapmaktayım.
TCS3200 RGB verilerini kaynak ışığı ile filtreler. Işık yoğunluğuna orantılı olarak kare dalga frekansına dönüştürür.
Çıkış frekansı S0-S1 uçları ile kontrol edilir. Bu uçlara uygulanacak gerilim ile frekans kontrolü yapılır. Yukarıdaki resimde göründüğü üzere S0 gnd (LOW) ile S1 vcc (HIGH) ile kısa devre yapılmıştır. Bu sayede frekans kontrolü için bağlantıları yapılmış olmaktadır. Bu bağlantıya göre %2 lik frekans ayarı yapılmıştır.Neden Direkt sensör üzerinden bu şekilde yaptığımı sorarsanız arkadaşlar , Arduino uno da bu proje için tüm pinleri kullanmak zorundayım o yuzden pinleri boşa kullanmamak için bu şekilde yaptım . Yani;
digitalwrite (S1,HIGH);
digitalwrite (S0,LOW); Yaparakta bu işelem olur ama boştan yere iki pini işgal etmiş olurdum.
TCS3200 Sensörümüzün freknas ayarını yaptığımıza göre şimdi hanigi renk algılanacak ve neye göre algılayacak bu kısma deyineyim.
Sensörde bulunan S2 ve S3 pini RGB filtresini kontrol eder. Bu pinlere gerilimler vererek fotodiyotu harekete geçirecegiz ve bu sayede elde edilen filtrelenmiş frekansa göre o rengin ne olduğuna bakacağız. S2 ve S3 pinlerini Arduinoda tanımlıyoruz.
const int s2 = 6; const int s3 = 5; const int out = 2; Bu tanımlamaya göre Arduinonun digital 6. bacağı S2 digital 5. bacağı S3 digital 2. bacağı out olmuştur. Yandaki tabloya göre uygulanan gerilimlerin hangi renge denk geldiği gözükmektedir. Örnek olarak kırımızı rengi sorgulama için S2 LOW - S3 LOw olacak. Arduinoda ki yazılımı şu şekildedir.
void color() { digitalWrite(s2, LOW); digitalWrite(s3, LOW); //Kırmızı red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //Mavi blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //Yeşil green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); } ilk başta S2 LOW S3 LOW Bunun karşılığı kırmızı renkgi sorgulamaktır. " red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); " bu komudun açılımı : out degeri HIGH mıdır ? Eğer HIGH ise LOW yap. Eğer HIGH değil ise HIGH yap. ikinci olarak mavi renk sorgulanmaktadır. Dikkat edersek S3 HIGH yapılmış S2 De değişiklik olmamış yani; S3 HIGH S2 LOW bunun tablodaki karşılığı mavi rengin sorgulanmasıdır. Son olarak ta Yeşil renk sorgulanmak için S3 HIGH S2 HIGH yapılmıştır. İlk olarak kullanmış olduğum sensörü denedim ve sonuçlarına baktım. İlk olarak 3 adet led ile çıkış aldım. Projemin son halinin çalışma mantığı Şu şekildedir. İlk başlangıçta bulunan ır engel sensörünün önüde engel yani cisim gelirse TCS3200 sensörü ölçüm yapmaya başlıyorki bu ölçüm diğer örnek yazılımlardan daha hızlı olmaktadır.Yapılan ölçümler sonucunda Ölçülen rengin R-G-B de ki değerleri kayıt edilerek karşılaştırma yapılmaktadır. Okunan bu değerler red -green - blue olarak kayıt edilmektedir. Bu kayıtların karşılaştırılması yazılımda şu şekilde olmuştur. if (red < blue && red < green && red < 800 ) Bu sorguda okunan değerlerin kıyası yapılmaktadır. Okunan degerlerden kücük olan sayı o rengi temsil etmektedir. 800 den küçük olaması şartıda boşta duruduğu zaman okunan değerlere göre eşik değeri seçilmiştir. Eğer bu şart sağlanıyorsa renk sensörünün önünde duran küp kırmızı renklidir. Devre üzerindeki led yanacak ve Konveyör çalışmaya başlayacaktır tabi ki de kırımızı alana taşıma yapan konveyörde çalışacaktır. Kırmızı küp için konum değiştirici olan servo motor açısını 135 dereceye getirecek ve ana konveyör üzerinde bulunan kırımız küpü ilgili konveyör üzerine kaydıracaktır. Kırmızı küp kendi konveyöründe sona ulaşınca engel sensörü sayesinde bunu anlayacak ve buzzer ile uyarı vererek işlemi sonandıracaktır taki bir başka küp başlangıca koyulana dek.


#include<Servo.h> Servo kirmizi_servo; Servo mavi_servo; Servo yesil_servo; #define buzzer 3 #define led 4 #define y_motor 8 #define m_motor 7 #define k_motor 12 #define a_motor 13 int sure = 0; int mesafe = 0; const int s2 = 6; const int s3 = 5; const int out = 2; int kirmizi_urun = 0; int mavi_urun = 0; int yesil_urun = 0; int diger_urun = 0; // LED pins connected to Arduino // Variables int red = 0; int green = 0; int blue = 0; int baslangic = analogRead(A0); int m_son = analogRead(A1); int y_son = analogRead(A2); int k_son = analogRead(A3); void setup() { kirmizi_servo.attach(9); yesil_servo.attach(10); mavi_servo.attach(11); Serial.begin(9600); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); pinMode(y_motor, OUTPUT); pinMode(k_motor, OUTPUT); pinMode(m_motor, OUTPUT); pinMode(a_motor, OUTPUT); pinMode(led, OUTPUT); pinMode(buzzer, OUTPUT); kirmizi_servo.write(90); yesil_servo.write(90); mavi_servo.write(90); } void loop() { int baslangic = analogRead(A0); digitalWrite(a_motor, LOW); digitalWrite(m_motor, LOW); digitalWrite(y_motor, LOW); digitalWrite(k_motor, LOW); digitalWrite(led, LOW); kirmizi_servo.write(90); yesil_servo.write(90); mavi_servo.write(90); if (baslangic < 100) { digitalWrite(led, HIGH); int baslangic = analogRead(A0); color(); Serial.print("R Intensity:"); Serial.print(red, DEC); Serial.print(" G Intensity: "); Serial.print(green, DEC); Serial.print(" B Intensity : "); Serial.print(blue, DEC); //Serial.println(); if (red < blue && red < green && red < 800 ) { kirmizi_urun ++ ; while (kirmizi_urun > 0) { int m_son = analogRead(A1); int y_son = analogRead(A2); int k_son = analogRead(A3); if (k_son < 100) { digitalWrite(buzzer, HIGH); kirmizi_urun -- ; if (kirmizi_urun < 0) { kirmizi_urun = 0; } delay(500); digitalWrite(buzzer, LOW); } Serial.print ("while ici kirmizi urun sayisi = "); Serial.println (kirmizi_urun); Serial.println(" - (Red Color)"); kirmizi_servo.write(135); yesil_servo.write(90); mavi_servo.write(90); digitalWrite(k_motor, HIGH); digitalWrite(a_motor, HIGH); delay(50); } } else if (blue < red && blue < green && blue < 800) { mavi_urun ++ ; while (mavi_urun > 0) { int m_son = analogRead(A1); int y_son = analogRead(A2); int k_son = analogRead(A3); if (m_son < 100) { digitalWrite(buzzer, HIGH); mavi_urun -- ; if (mavi_urun < 0) { mavi_urun = 0; } delay(500); digitalWrite(buzzer, LOW); } Serial.print ("while ici mavi_urun sayisi = "); Serial.println (mavi_urun); Serial.println(" - (blue Color)"); kirmizi_servo.write(90); yesil_servo.write(90); mavi_servo.write(135); digitalWrite(m_motor, HIGH); digitalWrite(a_motor, HIGH); delay(50); } } else if (green < red && green < blue && green < 800) { yesil_urun ++ ; while (yesil_urun > 0) { int m_son = analogRead(A1); int y_son = analogRead(A2); int k_son = analogRead(A3); if (y_son < 100) { digitalWrite(buzzer, HIGH); yesil_urun -- ; if (yesil_urun < 0) { yesil_urun = 0; } delay(500); digitalWrite(buzzer, LOW); } Serial.print ("while ici yesil_urun sayisi = "); Serial.println (yesil_urun); Serial.println(" - (Green Color)"); kirmizi_servo.write(90); yesil_servo.write(135); mavi_servo.write(90); digitalWrite(y_motor, HIGH); digitalWrite(a_motor, HIGH); delay(50); } } else { digitalWrite(m_motor, LOW); digitalWrite(y_motor, LOW); digitalWrite(k_motor, LOW); kirmizi_servo.write(90); yesil_servo.write(90); mavi_servo.write(90); Serial.println(); } delay(300); } } void color() { digitalWrite(s2, LOW); digitalWrite(s3, LOW); //Kırmızı red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //Mavi blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //Yeşil green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); }
Etiketler: arduino renk sensörü, konveyör, renk ayrımı, renk seçimi, renk sensörü, renkgine göre kutu ayırma, TCS3200, yürüyen band
Eklenme Tarihi: 12 Şubat 2017
Hocam baskı devre şemasını paylaşabilir misiniz
İyi günler hocam.Bana e-mail den baskı devresini atabilir misiniz?
Konveyör bandın üretimi için gerekli çizimleri paylaşır mısınız
Çizim yok tamamen doğaçlama ile yapıyorum.
Konveyör bant için kullandığınız malzeme nedir
Suni Deri. 200 rpm motor. Tükenmez kalem. Cam balkon profili.
bunların çıkışlarını 5v röleler ile plc inputlarına 24 v göndererek yapabilirsin
Merhabalar ben bu sensörü Plc ye üç renk algılamak için uyarlayabilir miyim?
Hocam 10 temel renk ile ilgili frekans olcumleri ald?m. Bahsettiginiz turden bir katsay? arad?m ama tam olarak her renk icin uygun bir katsay? mant?g? oturtamad?m renkler aras?nda. Olcumlerim su sekilde;