28 Ocak 2018 Pazar

Arduino - TCS3200 Renk Sensörü Uygulaması



     Bu yazımda TCS3200 renk sensörünün kullanımından bahsedeceğim. Bu sensör üzerindeki fotodiyotlar aracılığıyla gördüğü rengi algılayıp çıkış veren bir sensör. TCS3200 renk sensörünü nasıl kullanacağımızdan bahsetmek gerekirse ;
Üzerinde bulunan 4 inputu kullanmak istediğimiz renk filtresine göre lojik-1 ve lojik-0 konumuna getireceğiz.
Daha sonra sensörün çıkışından aldığımız kare sinyalin kaç pulse olduğunu sayacağız. Bunu 3 renk için de uygulayıp, sensörün gördüğü cismin hangi renk olduğunu belirleyeceğiz.






Öncelikle çalışma aralığımızı belirleyeceğiz. Arduino için %20 uygun görülmekte. Aşağıdaki tabloya göre S0 "HIGH", S1 "LOW" olacak.



Aşağıdaki tabloda da hangi renk filtresine göre hangi çıkışların ne olması gerektiği yazmaktadır.



Öncelikle en yukarıdaki şemaya göre bağlantılarımızı yapıp aşağıdaki kodları yüklüyoruz. İlk aşamada yapacağımız şey kalibrasyon olacak.



#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int kirmizi_f=0,yesil_f=0,mavi_f=0;
void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT); 
  
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  Serial.begin(9600);
}
void loop() {
  
  //**************************** Kirmizi Renk Filtresi****************************
digitalWrite(S2,LOW); digitalWrite(S3,LOW); kirmizi_f = pulseIn(sensorOut, LOW); Serial.print("Kirmizi= "); Serial.print(kirmizi_f); Serial.print(" "); delay(100); //**************************** Yesil Renk Filtresi**************************** digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); yesil_f = pulseIn(sensorOut, LOW); Serial.print("Yesil= "); Serial.print(yesil_f); Serial.print(" "); delay(100); //**************************** Mavi Renk Filtresi**************************** digitalWrite(S2,LOW); digitalWrite(S3,HIGH); mavi_f = pulseIn(sensorOut, LOW); Serial.print("Mavi= "); Serial.print(mavi_f); Serial.println(" "); delay(100); }


Yukarıdaki kodları yükledikten sonra seri haberleşme monitörünü açıyoruz. Öncelikle sensörün önüne beyaz bir kağıt koyup ölçülen değerleri not ediyoruz. Daha sonra siyah bir cisim koyup aynı işlemi tekrarlıyoruz.

Ben kendi kullandığım sensörde aşağıda yazmış olduğum değerleri elde ettim. 

Kırmızı --->  83 ~~ 840
Yeşil     --->  86 ~~ 855
Mavi     --->  25 ~~ 323

Bu değerleri map komutuyla 0-100 aralığına indirgeyeceğiz. Böylelikle filtreleme işlemleri sonucunda sensör önünde bulunan cismin rengini belirleyebileceğiz. Değerlerimiz belirledikten sonra aşağıdaki kodu arduinoya yüklüyoruz. Siz kendi belirlemiş olduğunuz değerleri girmelisiniz.




#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int kirmizi_f=0,yesil_f=0,mavi_f=0;
void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);  
  
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  Serial.begin(9600);
}
void loop() {
  
 //**************************** Kirmizi Renk Filtresi****************************
digitalWrite(S2,LOW); digitalWrite(S3,LOW); kirmizi_f = pulseIn(sensorOut, LOW); kirmizi_f=map(kirmizi_f,83,840,0,100); Serial.print("Kirmizi= ");//printing name Serial.print(kirmizi_f);//printing RED color frequency Serial.print(" "); delay(100); //**************************** Yesil Renk Filtresi**************************** digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); yesil_f = pulseIn(sensorOut, LOW); yesil_f = map(yesil_f,86,855,0,100); Serial.print("Yesil= "); Serial.print(yesil_f); Serial.print(" "); delay(100); //**************************** Mavi Renk Filtresi**************************** digitalWrite(S2,LOW); digitalWrite(S3,HIGH); mavi_f = pulseIn(sensorOut, LOW); mavi_f = map(mavi_f,25,323,0,100); Serial.print("Mavi= ");//printing name Serial.print(mavi_f);//printing RED color frequency Serial.println(" "); delay(100); }


Kodlardan bahsetmek gerekirse. void setup içerisinde çıkışlarımızı belirledik. Daha sonra S0-HIGH  ve S1 LOW ile %20 skalada çalışacağımızı sensöre bildirdik. Hangi filtreyi kullanacaksak S2 ve S3 çıkışlarını tabloya göre HIGH ya da LOW yaptık ve bunu 3 renk için de uyguladık.

Seri monitörde çıkışlarımız şu şekilde olacak ve sensörün algıladığı rengin değeri aralarında en düşük olacak ve bizim rengi belirlememizi sağlayacak.




Anlatım videosu;


Hiç yorum yok:

Yorum Gönder