Robotik ve Kodlama

Arduino

Arduino ile Renk Okuma

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Fiziksel dünyada bulunan renkleri okumak için geliştirilmiş ve Arduino ile çalışabilen sensörler bulunmaktadır. Bu sensörlerden birisi CNY70'tir. Bu sensör 2-3 cm uzaktaki siyah ve beyaz renkleri ayırt etmek için kullanılır. Bu sensör genellikle çizgi takibi yapan robotlarda kullanılır. Siyah ve beyaz dışındaki renklerin algılanması için geliştirilmiş sensörler bulunmaktadır. TCS3200 bu sensörlere örnek olarak verilebilir.

Renk algılayan sensörler birçok projede kullanılabilir. Örnek olarak robot yarışmalarında farklı renkteki çöplerin ayrı ayrı toplanması için bu sensör kullanılmaktadır. Bu bölümde bu iki farklı sensörün nasıl kullanıldığını öğreneceğiz.

 

Arduino ile siyah ve beyaz rengi ayırma

Robot yarışmaları denildiğinde akla ilk gelen kategori çizgi izleyen robotlardır. Bu robotların yapıtaşını oluşturan kısım, siyah beyaz sensörüdür. Çizgi izleyen robotlar siyah ve beyaz zeminler üzerinde hareket etmektedir. Siyah ve beyaz renkleri ayırmak için uygulamalarda, CNY70 isimli sensör kullanılacaktır. Bu sensörü elektronik malzeme satan mağazalarda kolaylıkla bulabilirsiniz. Analog olarak çalışan çoğu siyah beyaz sensörü de CNY70 ile aynı mantıkta çalışmaktadır.

CNY70 üzerinde iki adet LED bulunmaktadır. Bu LED'lerden birisi kızılötesi ışık yayar. Yüzeye çarpan kızılötesi ışık, sensör üzerinde bulunan diğer LED'de toplanır. Toplanan kızılötesi ışığın şiddeti sensör tarafından ölçülür. Siyah ve beyaz renklerin kızılötesi ışığı yansıtma katsayıları farklı olduğu için, sensörden okunan farklı ışık şiddetleri Arduino tarafından siyah ve beyaz renk olarak algılanır. Sensör topladığı kızılötesi ışığın şiddetine göre analog bir çıkış verir. Bu yüzden CNY70 sensörü Arduino'nun analog girişlerine bağlanır.

Hatırlatma: Arduino, ADC yardımıyla analog sinyalleri dijital veriye çevirir.

CNY70 sensörünün bağlantıları aşağıdaki resimde gösterilmiştir. Devreyi breadboard üzerine kurmak için sensörü baklava dilimi şeklinde kullanmak bağlantı açısından kolaylık sağlamaktadır. Kızılötesi ışık yayan LED'in bağlantısına 220 ohm'luk bir direnç bağlanmıştır. Kızılötesi ışığı toplayan LED'e de 10K ohm değerinde pull-down direnç bağlanmıştır.

Not: Devre bağlantılarının doğru yapılıp yapılmadığını test etmek için, Android işletim sistemine sahip telefon kameraları kullanılabilir. Eğer sensör çalışıyorsa telefon kamerasında kızılötesi ışığı görebilirsiniz.

Aşağıdaki kodla öncelikle sensörden alınan analog sinyal dijital değere çevrilmiştir. Elde edilen dijital değer eşik gerilimiyle karşılaştırılmıştır. Eşik gerilimin üstüne siyah, altına beyaz renk denmiştir. Bu eşik değeri sensöre ve ortama göre değişmektedir. Seri Monitör'den okuduğunuz sensör değerlerine göre, siz de programınız için siyah ve beyaz ayrımı yapabilen bir eşik değeri bulabilirsiniz. Bulduğunuz eşik değerini kodda güncelleyerek Arduino ile siyah ve beyaz yüzeyleri ayırt edebilirsiniz.

int referansDegeri = 800; /* siyah ve beyaz yuzeyin ayrimini yapan deger */
/* 
referansDegeri sensorden okunan degerlere gore yeniden belirlenmelidir.
Cunku bu deger ortama ve sensore gore degismektedir.
referansDegerini belirlemek icin siyah yuzeyde okunan deger ile beyaz yuzeyde okunan degerin ortalamasi alinabilir
*/
void setup()
{
  Serial.begin(9600); 
  /* veri yollamak icin seri haberlesmeyi 9600 baud rate hizinda baslattik */
}

void loop()
{
  int sensorDegeri = analogRead(A0); /* Sensorden gelen analog deger dijitale cevriliyor */
  Serial.print("sensorden okunan deger= ");
  Serial.print(sensorDegeri); /* Sensorden okunan deger ekrana yazdiriliyor. Bu degere gore referansDegeri ayarlanabilir */
  
  Serial.print("\t renk= ");
  if(sensorDegeri > referansDegeri){
    /* Sensorden okunan deger referansDegerinden buyuk ise renk siyahtir */
    Serial.println("siyah");
  }else{
    /* Sensorden okunan deger referansDegerinden kucuk ise renk beyazdir */
    Serial.println("beyaz");
  }
  delay(1000); 
}

 

Arduino ile tüm renklerin algılanması

TCS3200 tüm renkleri algılayabilen ve Arduino ile kolayca çalıştırılabilen bir renk sensörüdür. Piyasada TCS3200 benzeri sensörler bulunmaktadır. Bu sensörlerle TC3200 hemen hemen aynı görevi görmektedir. Aynı kodla benzer sensörleri kullanabilirsiniz.

TCS3200 sensörü renklerin ayırt edilmesi için kullanılan bir sensördür. Sensör 3 ana rengi okumasının yanı sıra 3 ana renk oranlarını da belirleyerek bu renklerin okunmasını sağlamaktadır. Bunun için üzerinde kırmızı, yeşil, mavi ve beyaz ışık bulunmaktadır. Arduino komutlarıyla bu 4 LED farklı zamanlarda belirli bir sırayla yanması sağlanır.

Yüzeye gönderilen ışığın yansıması, yüzeyin rengine bağlı olarak değişmektedir. Sensör tarafından bir yüzeye 4 farklı renkte ışık yollanmaktadır. Bu ışıkların yansımaları sensörün ortasında bulunan alıcı tarafından ölçülmektedir. Bu ölçüm sonucunda yüzeyin rengi, ölçüm oranlarına bağlı olarak algılanmaktadır.

Sensörün çalışma teorisini öğrendiğimize göre şimdi nasıl kullanıldığına bakalım. Sensör üzerinde bulunan S0 ve S1 pinleri LED'lerin çalışma frekansını belirlemektedir. S2 ve S3 pinleri ise sensör üzerindeki LED'lerden hangilerinin etkinleştirileceğini seçmektedir. Aşağıdaki tabloda bu pinlerin kullanımı gösterilmiştir.

S0 S1 Frekans
0 0 -
0 1 1:50
1 0 1:5
1 1 1:1

 

S2 S3 Renk
0 0 Kırmızı
0 1 Mavi
1 0 Beyaz
1 1 Yeşil

 

Sensör üzerinde bulunan diğer pinlerden OUT pini ölçüm değerlerinin Arduino'ya aktarıldığı hattır. LED pini ise LED'lerin yanması veya sönmesi için kullanılan pindir. Sensörün VCC pini 5 volta, GND pini toprağa takılmalıdır.