Arduino Ders 26: Potansiyometre ile RGB Led Kontrolü

Arduino Uygulaması

Potansiyometre ile RGB LED Kontrolü

Üç potansiyometre kullanarak RGB LED’in kırmızı, yeşil ve mavi kanallarını ayrı ayrı kontrol edeceğiz.

Arduino potansiyometre ile RGB LED kontrolü

Üç potansiyometre ile RGB LED içindeki üç renk ayrı ayrı kontrol edilerek ara renkleri elde etmek mümkündür. Bu işlem için Arduino’ya bağlı üç potansiyometreden okunan değerleri RGB LED’in renk pinlerine PWM sinyali olarak göndermek yeterlidir.

Daha önce Arduino ile RGB LED kontrolünün nasıl yapılacağını öğrenmiştik. Bu yazıda ise potansiyometre ile RGB LED kontrolü yapacağız.

Potansiyometrelerden alınan 0-1023 arasındaki analog değerler map() komutu ile 0-255 arasındaki PWM değerlerine dönüştürülür. Bu değerler Arduino üzerindeki PWM pinlerine bağlı RGB LED renk pinlerine aktarılır.

Bu sayede kırmızı, yeşil ve mavi dışında tüm ara renkler potansiyometreler çevrilerek elde edilebilir.

RGB LED renk pinleri Arduino’nun PWM destekli 3, 5 ve 6 numaralı pinlerine bağlanır. Potansiyometrelerin orta uçları ise sırayla A0, A1 ve A2 analog pinlerine bağlanır.

Potansiyometrelerin diğer iki ucu 5V ve GND hatlarına bağlanır. RGB LED’in ortak ucu, LED türüne göre GND veya 5V hattına bağlanmalıdır.

Arduino potansiyometre RGB LED bağlantı şeması

Ortak katot RGB LED’de ortak uç GND’ye bağlanır ve PWM değeri arttıkça parlaklık artar. Ortak anot RGB LED’de ortak uç 5V’a bağlanır ve PWM değerleri ters çevrilmelidir. 4 bacaklı RGB LED kullanıyorsanız her renk bacağı için uygun seri direnç kullanın.

Her potansiyometre RGB LED’in bir renk kanalını kontrol eder. Birinci potansiyometre kırmızı, ikinci potansiyometre yeşil, üçüncü potansiyometre ise mavi parlaklığını ayarlar.

analogRead() ile okunan değer 0-1023 aralığındadır. analogWrite() ise 0-255 aralığında değer bekler. Bu yüzden map() ile değer aralığı dönüştürülür.

const int kPot = A0;
const int yPot = A1;
const int mPot = A2;

const int kirmizi = 3;
const int yesil = 5;
const int mavi = 6;

void setup() {
  pinMode(kirmizi, OUTPUT);
  pinMode(yesil, OUTPUT);
  pinMode(mavi, OUTPUT);
}

void loop() {
  int kDeger = map(analogRead(kPot), 0, 1023, 0, 255);
  int yDeger = map(analogRead(yPot), 0, 1023, 0, 255);
  int mDeger = map(analogRead(mPot), 0, 1023, 0, 255);

  analogWrite(kirmizi, kDeger);
  analogWrite(yesil, yDeger);
  analogWrite(mavi, mDeger);
}

Bu kod ortak katot RGB LED veya ortak katot RGB LED modülü için uygundur.

const int kPot = A0;
const int yPot = A1;
const int mPot = A2;

const int kirmizi = 3;
const int yesil = 5;
const int mavi = 6;

void setup() {
  pinMode(kirmizi, OUTPUT);
  pinMode(yesil, OUTPUT);
  pinMode(mavi, OUTPUT);
}

void loop() {
  int kDeger = map(analogRead(kPot), 0, 1023, 0, 255);
  int yDeger = map(analogRead(yPot), 0, 1023, 0, 255);
  int mDeger = map(analogRead(mPot), 0, 1023, 0, 255);

  // Ortak anot RGB LED kullanılıyorsa PWM değerleri ters çevrilir.
  analogWrite(kirmizi, 255 - kDeger);
  analogWrite(yesil, 255 - yDeger);
  analogWrite(mavi, 255 - mDeger);
}

Elinizdeki RGB LED ortak anot ise PWM değerlerini bu şekilde ters çevirerek kullanabilirsiniz.

const int pGiris = A0;

const int kirmizi = 3;
const int yesil = 5;
const int mavi = 6;

void setup() {
  pinMode(kirmizi, OUTPUT);
  pinMode(yesil, OUTPUT);
  pinMode(mavi, OUTPUT);
}

void loop() {
  int pDeger = analogRead(pGiris);
  int kDeger;
  int yDeger;
  int mDeger;

  if (pDeger < 341) {
    pDeger = map(pDeger, 0, 340, 0, 255);

    kDeger = 255 - pDeger;
    yDeger = pDeger;
    mDeger = 0;
  } 
  else if (pDeger < 682) {
    pDeger = map(pDeger, 341, 681, 0, 255);

    kDeger = 0;
    yDeger = 255 - pDeger;
    mDeger = pDeger;
  } 
  else {
    pDeger = map(pDeger, 682, 1023, 0, 255);

    kDeger = pDeger;
    yDeger = 0;
    mDeger = 255 - pDeger;
  }

  analogWrite(kirmizi, kDeger);
  analogWrite(yesil, yDeger);
  analogWrite(mavi, mDeger);
}

Bu alternatif kodda tek potansiyometre ile renk geçişi yapılır. Üç potansiyometreli devre yerine yalnızca A0 pinine bağlı bir potansiyometre kullanılır.

2 Yorumlar

  1. Yalnız en son kısımda else içerisinde, potansiyometre maksimum 1023 olduğunda 683 çıkartıp *3 /4 yaptığınızda bu nasıl 0-255 arasına daraltılıyor? En son kısımda bir eksiklik var gibi sanki.

    YanıtlaSil
Daha yeni Daha eski