3000 TL ve üzeri siparişlerde Kargo Ücretsiz!
Arduino ile TCS3200 Nedir Nasıl kullanılır.

Arduino ile TCS3200 Nedir Nasıl kullanılır.

TCS3200 Renk Sensörü ile Arduino Projesi - Renk Algılama ve Görsel Geri Bildirim" başlıklı projemizde TCS3200 renk sensörünün kullanımını ve Arduino ile bir renk algılama projesini anlatıyoruz.

7 dk okuma 1908 okunma

Bu projenin içeriği oldukça ilginç görünüyor. TCS3200 renk sensörünün nasıl çalıştığını ve bu projede LCD ekran ile nasıl kullanıldığını anlamak heyecan verici bir deneyim olabilir.

TCS3200'nin çalışma prensibi, üzerine gelen ışığın frekansta kare dalgalar üretmesi ve bu dalganın özelliklerinin fotodiyotlar ve akım-frekans dönüştürücüsü ile ölçülmesi olarak özetlenebilir. Bu verileri alarak, çeşitli renklerin algılanması ve analizi mümkün olur. PulseIn() fonksiyonunun kullanılması, bu verileri daha iyi anlayabilmek için oldukça faydalı bir yaklaşım gibi görünüyor.

Renk sensörünün çalışma prensibi oldukça ilginç ve karmaşıktır. Renkleri ayırt etmek için fotodiyotlar ve filtrelerin kullanılması, sensörün çeşitli renklerdeki ışığı algılayabilmesini sağlar. Bu nedenle, sensörün iç yapısını ve çalışma mantığını anlamak önemlidir.

Sensörde bulunan 8x8 dizideki fotodiyotlar, belirli renklerin (kırmızı, yeşil ve mavi) algılanmasına yardımcı olan filtrelerle donatılmıştır. Bu filtrelere sahip olan fotodiyotlar, belirli bir renge daha duyarlıdır ve bu renklerin yoğunluğunu daha iyi ölçebilir. Geri kalan fotodiyotlar ise filtreye sahip değildir ve tüm renkleri genel olarak algılarlar.

S2 ve S3 pinleri, hangi filtrenin kullanılacağını belirlemek için kullanılır. Örneğin, kırmızı rengi belirlemek istediğinizde S2 ve S3 pinlerini lojik-0 konumuna getirirsiniz. Bu, sensörün yalnızca kırmızı renk için daha hassas olmasını sağlar. Aynı işlemi yeşil ve mavi renkler için de yapabilirsiniz.

Sonuç olarak, bu yöntem kullanılarak sensörün algıladığı renklerin yoğunluğunu ölçebilir ve RGB (Kırmızı-Yeşil-Mavi) renk değerlerini elde edebilirsiniz.

TCS3200 renk sensörü, çıkış frekansını ayarlamamıza yardımcı olan S0 ve S1 pinlerine sahiptir. Biz bu ölçeği, S0'ı "HIGH" ve S1'i "LOW" konumlarına getirerek %20 düzeyinde tutmayı tercih edeceğiz. Verileri almak için ise OUT pini kullanılacaktır. Bu pinleri kullanarak sensörü Arduino'nun dijital giriş-çıkışlarına bağlayarak projemizi gerçekleştireceğiz.

Sensörün üzerinde bulunan 4 adet beyaz LED, daha hassas veri elde etmemize yardımcı olan yardımcı elemanlardır. TCS3200 sensörü, yuvalı ve yuvasız olarak iki farklı versiyonla karşılaşabilirsiniz. Her iki versiyon da aynı işlevi yerine getirir, ancak yuvalı versiyon çipin dış etkilerden daha az etkilenmesi için bir yuvada bulunur. bu yü

Kalibrasyon

Projede kullandığımız TCS3200 sensöründen alacağımız değerler birçok etkene göre değişiklik gösterebilir. Bu etkenler ortamın ışık yoğunluğu, sensörün yuvalı olup olmaması olabilir. Bu yüzden bizim kullandığımız kodu direkt olarak projenize uygulamak istediğinizde farklı sonuçlar alabilirsiniz.

Bu oldukça normal bir durum, o yüzden bu aşamada yalnızca sensör değerlerini serial monitörde görebileceğimiz bir kod kullanacağız. Bu sayede sensörümüzden aldığımız çıktıları görmüş olacağız.

Ben bu kodu kullanarak ilk testimi beyaz kağıt üzerinde yaptım. Sağladığımız değerler düştükçe renk yoğunluğu artıyor demektir. Beyaz kağıttan aldığımız veriler beklediğimiz gibi 3 renk için de düşük çıktı.

Aynı testi hızlıca ana renkler öncelikli olmak üzere bazı ara renkler için de uyguladım. Bu testleri farklı renkteki kağıtları kullanarak yaptım. Testlerin sonucunda sensörün renkler üzerinde hangi değerlerde tepkiler verdiğini görmüş olduk.

Bu gözlemleri yapmamızın amacı kodumuzu yazarken renkler için bir eşik değer belirlemekti.

Hangi değerler ne ifade ediyor bunu görmüş olduk. Örneğin kırmızı renk için eşik değerini 100 olarak belirlediğimizi düşünelim. Kodumuzu yazarken bu değeri göz önünde bulundurarak 100’ün altında değer aldığımız nesnelerde kırmızı yoğunluğunun yüksek seviyelerde olduğunu çıkarabiliriz.

Yani bu gözlemler, elimizdeki değerler ile ilgili fikir sahibi olmamızı sağlamış olacak. Tüm bu işlemler için aşağıdaki kodu kullanmamız gerekiyor.

#define s0 8 //Bağladığımız pinlere göre tanımlamalarımızı yapıyoruz
#define s1 9
#define s2 10
#define s3 11
#define sensorOut 12
int K, Y, M = 0; //3 ana renk için değişken tanımlıyoruz
void setup() {
 pinMode(s0, OUTPUT); //S0, S1, S2 ve S3 pinlerini OUTPUT olarak tanımlıyoruz
 pinMode(s1, OUTPUT);
 pinMode(s2, OUTPUT);
 pinMode(s3, OUTPUT);
 pinMode(sensorOut, INPUT); //OUT pinini INPUT olarak tanımlıyoruz
 digitalWrite(s1, LOW); //Frekans ölçeğimizi %20 olarak tanımlıyoruz
 digitalWrite(s0, HIGH);
 Serial.begin(9600);
}
void loop() {
 digitalWrite(s2, LOW); //Kırmızıyı filtrelemek için
 digitalWrite(s3, LOW);
 K = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Kırmızı= ");
 Serial.print(K); //Kırmızı için aldığımız değeri serial monitöre yazdır
 Serial.print(" ");
 delay(50); //50 milisaniye bekle
 digitalWrite(s2, HIGH); //Yeşili filtrelemek için
 digitalWrite(s3, HIGH);
 Y = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Yeşil= ");
 Serial.print(Y); //Yeşil için aldığımız değeri serial monitöre yazdır
 Serial.print(" ");
 delay(50); //50 milisaniye bekle
 digitalWrite(s2, LOW); //Maviyi filtrelemek için
 digitalWrite(s3, HIGH);
 M = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Mavi= ");
 Serial.print(M); //Mavi için aldığımız değeri serial monitöre yazdır
 Serial.println();
 delay(50); //50 milisaniye bekle
}

Proje koduna geçmeden önce, projemizin temelinde yer alan TCS3200 renk sensörünü anladığımızdan emin olmak istiyoruz. Bu sensör, renkleri algılamak ve bunları sayısal değerlere çevirmek için kullanılır. Sensörün üzerinde bulunan S0, S1, S2 ve S3 gibi pinler, çıkış frekansını ve algılama hassasiyetini ayarlamamıza olanak tanır. Ayrıca, beyaz LED'ler, doğru renk algılaması için ışık kaynağı sağlar.

Projemizde, bu sensörü kullanarak çeşitli renkleri algılayıp LCD ekran üzerinde göstermeyi planlıyoruz. Ancak 2x16 ekranın sınırlı boyutları nedeniyle değerleri ve algılanan rengi ayrı ayrı göstereceğiz. Renklerin algılanması için aşağıdaki renk diyagramından yararlanacağız.

Proje kodumuzda sensör tarafından ölçülen frekansları alacak ve bu frekansları renk değerlerine dönüştüreceğiz. Ardından, LCD ekran üzerinde bu renk değerlerini görüntüleyeceğiz.

#include <LiquidCrystal.h> //LCD kütüphanesini kodumuza dahil ediyoruz
#define s0 8 //Bağladığımız pinlere göre tanımlamalarımızı yapıyoruz
#define s1 9
#define s2 10
#define s3 11
#define sensorOut 12
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //LCD pinlerini tanımlıyoruz
int K, Y, M = 0; //3 ana renk için değişken tanımlıyoruz
void setup() {
 lcd.begin(16, 2);
 pinMode(s0, OUTPUT); //S0, S1, S2 ve S3 pinlerini OUTPUT olarak tanımlıyoruz
 pinMode(s1, OUTPUT);
 pinMode(s2, OUTPUT);
 pinMode(s3, OUTPUT);
 pinMode(sensorOut, INPUT); //OUT pinini INPUT olarak tanımlıyoruz
 digitalWrite(s1, LOW); //Frekans ölçeğimizi %20 olarak tanımlıyoruz
 digitalWrite(s0, HIGH);
 Serial.begin(9600);
}
void loop() {
 lcd.print("K=");
 digitalWrite(s2, LOW); //Kırmızıyı filtrele
 digitalWrite(s3, LOW);
 K = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Kırmızı= ");
 Serial.print(K); //Kırmızı için aldığımız değeri serial monitöre yazdır
 Serial.print(" ");
 lcd.print(K); //Kırmızı için aldığımız değeri LCD ekrana yazdır
 lcd.print(" ");
 lcd.setCursor(7, 0); //İmleci 7. sütuna al
 delay(50); //50 milisaniye bekle
 lcd.print("Y=");
 digitalWrite(s2, HIGH); //Yeşili filtrele
 digitalWrite(s3, HIGH);
 Y = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Yeşil= ");
 Serial.print(Y); //Yeşil için aldığımız değeri serial monitöre yazdır
 Serial.print(" ");
 lcd.print(Y); //Yeşil için aldığımız değeri LCD ekrana yazdır
 delay(50);
 lcd.setCursor(4, 1); //İmleci 2. satır 4. sütuna taşı
 lcd.print("M=");
 digitalWrite(s2, LOW); //Maviyi filtrele
 digitalWrite(s3, HIGH);
 M = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
 Serial.print("Mavi= ");
 Serial.print(M); //Mavi için aldığımız değeri serial monitöre yazdır
 Serial.println();
 lcd.print(M); //Mavi için aldığımız değeri LCD ekrana yazdır
 lcd.setCursor(0, 0);
 delay(1000); //1000 milisaniye bekle
 //Renk değerlerini 1 saniye boyunca ekranda göreceğiz
 lcd.clear(); //Ekranı temizle
 delay(150); //150 milisaniye bekle
 lcd.setCursor(1, 0); //İmleci 1. sütuna al
 lcd.print("Algilanan Renk");
 lcd.setCursor(2, 1); //İmleci 2. satır 2. sütuna al
 //Kalibrasyon bölümünde elde ettiğimiz değerleri bu kısımda kullanacağız
 if (K < 70 && M < 70 && Y < 70) //Eğer tüm renklerin yoğunluğu yüksekse: Beyaz
 {
 Serial.print("Renk = Beyaz ");
 lcd.print("Beyaz");
 } else if (K < 100 && Y < M && abs(K - Y) < 20)
 //Kırmızı yoğunluğu yüksek ve yeşille arasındaki değer 20'den azsa: Sarı
 {
 Serial.print("Renk = Sarı ");
 lcd.print("Sari");
 } else if (K < 100 && M < Y && abs(M - K) < 20)
 //Kırmızı yoğunluğu yüksek ve mavi ile arasındaki değer 20'den azsa: Magenta
 {
 Serial.print("Renk = Magenta ");
 lcd.print("Magenta");
 } else if (Y < 130 && Y < M && Y < K)
 //Yeşil yoğunluğu belli bir seviyenin üstünde ve kırmızı-maviden daha yoğunsa: Yeşil
 {
 Serial.print("Renk = Yeşil ");
 lcd.print("Yesil");
 } else if (M < 100 && M < Y && M < K)
 //Mavi yoğunluğu belli bir seviyenin üstünde ve yeşil-kırmızıdan daha yoğunsa: Mavi
 {
 Serial.print("Renk = Mavi ");
 lcd.print("Mavi");
 } else if (K < 100 && K < Y && K < M)
 //Kırmızı yoğunluğu belli bir seviyenin üstünde ve yeşil-maviden daha yoğunsa: Kırmızı
 {
 Serial.print("Renk = Kırmızı ");
 lcd.print("Kirmizi");
 } else {
 Serial.print("Renk algılanamadı "); //Belirlediğimiz kıstaslara uymayan diğer renkler
 lcd.print("---");
 }
 Serial.println(); //Serial monitörde bir satır aşağı geç
 delay(1000); //1000 milisaniye bekle
 lcd.clear(); //LCD ekranı temizle
 delay(150);
}

Sayfamız sürekli olarak yeni içeriklerle güncelleniyor. Size sormak istediğimiz soruları lütfen yorum olarak paylaşın!

Paylaş
Tüm yazılara dön

Yorumlar

Bu yazıya henüz yorum yapılmamış. İlk yorumu siz yazın.

E-posta adresiniz yayınlanmaz. Yorumlar yayınlanmadan önce denetlenir.

Bu form Google reCAPTCHA ile korunmaktadır; Google Gizlilik Politikası ve Hizmet Şartları geçerlidir.

Benzer Yazılar

Hızlı Kargo Hafta içi saat 15:00 öncesinde oluşturduğunuz tüm siparişler aynı gün kargoya verilmektedir.
Güvenli Alışveriş Tüm bilgileriniz 256 Bit SSL sertifikasıyla korunmaktadır.
Uzman Teknik Servis Ürünleriniz için profesyonel bakım ve onarım.
Ücretsiz Kargo Belirli tutarın üzerindeki alışverişlerinizde kargo ücreti ödemezsiniz.

Bültenimize Abone Ol

Kampanya ve fırsatlardan ilk siz haberdar olun.

Kuruköprü Mah. Sefa Özler Cad. özden İşmerkezi kat 7/74 Seyhan / adana

Ödeme Yöntemleri

Visa Mastercard Banka Kartı World

©2017 - 2026 Tüm hakları saklıdır.