5 Kasım 2026 Perşembe


Uygulama Açıklaması




Bir önceki uygulamada sensörün renklere göre verdiği değerler aşağıdaki gibidir:

Kırmızı :R=256 G = 202 B = 185

Yeşil :R=184 G = 256 B = 196

Mavi :R=146 G = 226 B = 255

Sarı :R=267 G = 297 B = 233

Cyan :R=197 G = 278 B = 281

Magenta:R=256 G = 220 B = 244



Bu değerlere baktığımızda sensör ana renklerde 255 veya üzeri değer veriyor, ara renklerde ise, ara rengi oluşturan ana renk değerleri yine 255 veya üzerinde (Magenta rengi hariç). Magenta rengindeki ana renk olan Mavinin 255 in altında değer vermesi nedeniyle şu anki uygulama olan 3. uygulamada, if-else şartlarını yazarken, bunu göz önünde bulundurduk.




Programlama Kodları

//AÇIKLAMA
//Bu uygulamada sensör renkleri okur, ham değerleri alır. Ardından gerçek RGB değerlerine denk gelen değerler hesaplanır.
//Buna göre hangi rengin okunduğu seri port ekranına yazdırılır. "constrain" fonksiyonu kullanılarak okunan değerler
//0 - 255 arasında tutulur. Bu fonksiyon ile Değer 255'ten büyükse 255'e, 0'dan küçükse 0'a sabitlenir.

//NOT:
//2 nolu uygulamada sensör, ayrı ayrı ana  renkler olan RED, GREEN, BLUE üzerindeyken, bunların değerleri 255 veya üzerinde
//çıkıyordu. Sensör, ara renkler olan YELLOW, CYAN, MAGENTA üzerindeyken de bunları oluşturan ana renklerin değeri 255 veya
//üzerinde çıkması gerekiyor. YELLOW ve CYAN'da bu sağlanırken MAGENTA'da R=~255, B=~244 çıkıyor. B ~244 çıktığı için if-else
//ile şart oluştururken bunu göz önünde bulundurmamız gerekti. if-else şartları buna göre yazıldı.

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

int red_ham = 0;
int green_ham = 0;
int blue_ham = 0;

int red_min = 27;
int red_max = 187;
int green_min = 46;
int green_max = 195;
int blue_min = 29;
int blue_max = 144;

int R, G, B;

void setup()
{
  Serial.begin(9600);

  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensor_out, INPUT);

  //sensörün çıkış frekansını %20 olarak ölçeklendirme
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
}

void loop()
{
  //kırmızı renk okuma
  red_ham = kirmizi_ham_oku();
  R = map(red_ham, red_min, red_max, 255, 0);
  R = constrain(R, 0, 255);
  delay(200);

  //yeşil renk okuma
  green_ham = yesil_ham_oku();
  G = map(green_ham, green_min, green_max, 255, 0);
  G = constrain(G, 0, 255);
  delay(200);

  //mavi renk okuma
  blue_ham = mavi_ham_oku();
  B = map(blue_ham, blue_min, blue_max, 255, 0);
  B = constrain(B, 0, 255);
  delay(200);

  Serial.print("R = ");  Serial.print(R);     Serial.print(" | ");
  Serial.print("G = ");  Serial.print(G);     Serial.print(" | ");
  Serial.print("B = ");  Serial.print(B);     Serial.print(" | ");

  if (R == 255 & G != 255 & B < 240)
  {
    Serial.println("Renk = KIRMIZI");
  }
  else if (R != 255 & G == 255 & B < 240)
  {
    Serial.println("Renk = YEŞİL");
  }
  else if (R != 255 & G != 255 & B > 240)
  {
    Serial.println("Renk = MAVİ");
  }
  else if (R == 255 & G == 255 & B < 240)
  {
    Serial.println("Renk = SARI");
  }
  else if (R != 255 & G == 255 & B > 240)
  {
    Serial.println("Renk = CYAN");
  }
  else if (R == 255 & G != 255 & B > 240)
  {
    Serial.println("Renk = MAGENTA");
  }
  else if(R==255 & G==255 & B==255)
  {
    Serial.println("Renk = BEYAZ");
  }
  else
  {
    Serial.println("Renk = TANIMLI DEĞİL ");
  }

}

int kirmizi_ham_oku()
{
  int ham;
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  ham = pulseIn(sensor_out, LOW);
  return ham;
}

int yesil_ham_oku()
{
  int ham;
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  ham = pulseIn(sensor_out, LOW);
  return ham;
}

int mavi_ham_oku()
{
  int ham;
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  ham = pulseIn(sensor_out, LOW);
  return ham;
}



Devre Şeması







0 comments:

Yorum Gönder

Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörler ve Aygıtların Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com