DIY ELECTRONICSEN

← Tüm projeler

TCS3200 ile Renk Algılama

Orta30 dk

Önüne tutulan nesnenin rengini algılayan bir devre. TCS3200 kartı ışığı kırmızı, yeşil ve mavi filtreli fotodiyotlarla ölçer ve seçilen rengin yoğunluğunu kare dalga olarak verir; Arduino üç rengin darbe sürelerini pulseIn ile ölçüp Seri Monitöre yazar ve baskın rengi söyler. Dijital pinlerle filtre seçmeyi ve darbe süresi ölçmeyi öğretir. Ek kütüphane gerekmez.

Uygulamada adım adım yap

Gerekli malzemeler

Bağlantı adımları

  1. 1

    Sensöre güç ver

    Sensöre güç ver

    Kırmızı jumper kabloyu Arduino’nun POWER bölümündeki 5V pininden sensör kartının Vcc pinine, siyah kabloyu dijital pinlerin başındaki (13 numaralı pinin yanındaki) GND pininden kartın Gnd pinine tak. Arduino’yu USB’ye bağlayınca karttaki dört beyaz LED yanar; nesneyi bunlar aydınlatır. OE pinini şimdilik boş bırak.

    • Arduino 5V → TCS3200 Vcc (kırmızı kablo)
    • Arduino GND → TCS3200 Gnd (siyah kablo)
  2. 2

    Frekans ölçeklemeyi bağla

    Frekans ölçeklemeyi bağla

    Sarı kabloyu Arduino’nun 4 numaralı pininden kartın S0 pinine, yeşil kabloyu 5 numaralı pinden S1 pinine tak. Bu iki pin sensörün çıkış frekansını küçültür: kod S0’ı HIGH, S1’i LOW yapar ve frekansı %20’ye indirir, böylece Arduino darbeleri rahatça ölçer.

    • Arduino pin 4 → TCS3200 S0 (sarı kablo)
    • Arduino pin 5 → TCS3200 S1 (yeşil kablo)
  3. 3

    Renk filtresi pinlerini bağla

    Renk filtresi pinlerini bağla

    Turuncu kabloyu 6 numaralı pinden S2’ye, turkuaz kabloyu 7 numaralı pinden S3’e tak. Bu ikisi sensörün o an hangi renge baktığını seçer: ikisi LOW iken kırmızı, ikisi HIGH iken yeşil, S2 LOW ve S3 HIGH iken mavi filtre açılır. Kod üç rengi sırayla seçip her birini ölçer.

    • Arduino pin 6 → TCS3200 S2 (turuncu kablo)
    • Arduino pin 7 → TCS3200 S3 (turkuaz kablo)
  4. 4

    Çıkışı bağla

    Çıkışı bağla

    Mor kabloyu kartın Out pininden Arduino’nun 8 numaralı pinine tak. Sensör seçilen rengin yoğunluğunu bu pinden kare dalga olarak verir: renk ne kadar güçlüyse darbeler o kadar kısa olur. Arduino darbe süresini pulseIn ile ölçer.

    • Arduino pin 8 → TCS3200 Out (mor kablo)

Arduino kodu

#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define SENSOR_OUT 8

// Seçilen filtreden gelen darbenin süresi (mikrosaniye).
// Küçük değer = o renk daha güçlü. 0 ise darbe gelmedi.
int readColour(int s2, int s3) {
  digitalWrite(S2, s2);
  digitalWrite(S3, s3);
  delay(20);  // filtre değişince sensöre biraz zaman tanı
  return pulseIn(SENSOR_OUT, LOW, 100000);
}

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(SENSOR_OUT, INPUT);

  // Frekans ölçekleme %20: S0 HIGH, S1 LOW
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);

  Serial.begin(9600);
}

void loop() {
  int red = readColour(LOW, LOW);
  int green = readColour(HIGH, HIGH);
  int blue = readColour(LOW, HIGH);

  Serial.print("R: ");
  Serial.print(red);
  Serial.print("  G: ");
  Serial.print(green);
  Serial.print("  B: ");
  Serial.print(blue);

  // En kısa darbe hangi renkteyse nesne o renge daha yakın.
  if (red == 0 || green == 0 || blue == 0) {
    Serial.println("  -> ?");
  } else if (red < green && red < blue) {
    Serial.println("  -> R");
  } else if (green < red && green < blue) {
    Serial.println("  -> G");
  } else {
    Serial.println("  -> B");
  }

  delay(500);
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
R: 38  G: 112  B: 95  -> R
R: 37  G: 110  B: 93  -> R

Bir kablo yerinde değilse

SERIAL MONITOR · 9600 BAUD
R: 0  G: 0  B: 0  -> ?

Sonuç

Sensörün önüne 1-2 cm uzaklıkta kırmızı bir nesne tuttuğunda R değeri en küçük olur ve satır “-> R” ile biter; yeşil bir nesnede “-> G”, mavide “-> B”. Sayılar ortam ışığına ve uzaklığa göre değişir; önemli olan üçünün birbirine göre durumudur. Hep “R: 0 G: 0 B: 0” geliyorsa Out kablosunu kontrol et ve OE pinini bir kabloyla GND’ye bağla.

Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.

Uygulamada adım adım yap