Image
3 Temmuz, 2026

Arduino Uno ile Buton Kontrollü RGB LED Mod Değiştirme Projesi

Arduino Uno ile Buton Kontrollü RGB LED Mod Değiştirme Projesi

Arduino projelerinde LED yakıp söndürme uygulamasından sonra yapılabilecek en faydalı çalışmalardan biri RGB LED kontrolü uygulamasıdır. Bu projede Arduino Uno, RGB LED ve bir buton kullanarak farklı LED modları arasında geçiş yapacağız.

Butona her bastığımızda RGB LED farklı bir moda geçecek. Bir modda LED’in parlaklığı artıp azalacak, bir modda renkler yumuşak şekilde değişecek, diğer modda ise kırmızı, yeşil ve mavi renkler sırayla yanacaktır.

Bu proje sayesinde Arduino’da buton kullanımı, RGB LED kontrolü, PWM çıkışlar, dijital giriş okuma ve millis() fonksiyonu gibi temel konuları pratik şekilde öğrenebilirsiniz.

Arduino Uno ile buton kontrollü RGB LED projesi
Fotoğraf 1: Arduino Uno ile buton kontrollü RGB LED uygulaması.

Gerekli Malzemeler

Arduino ile buton kontrollü RGB LED projesi için aşağıdaki malzemelere ihtiyacınız vardır:

Not: RGB LED kullanırken kırmızı, yeşil ve mavi renk bacaklarının her birine ayrı direnç bağlamak daha doğru ve güvenlidir. Direnç olarak 220Ω, 330Ω veya 1K kullanılabilir. 1K direnç LED’i daha düşük parlaklıkta ama daha güvenli şekilde çalıştırır.

RGB LED Nedir?

RGB LED, tek bir LED gövdesi içinde kırmızı, yeşil ve mavi LED çipleri bulunan bir LED türüdür. Bu üç temel renk farklı parlaklıklarda yakılarak birçok farklı renk elde edilebilir.

RGB LED’lerde genellikle 4 bacak bulunur:

  • Kırmızı renk bacağı
  • Yeşil renk bacağı
  • Mavi renk bacağı
  • Ortak anot veya ortak katot bacağı

Ortak Katot ve Ortak Anot RGB LED Farkı

RGB LED’ler genellikle iki farklı yapıda olabilir:

Ortak Katot RGB LED

Ortak Katot RGB LED’de ortak bacak GND hattına bağlanır. Renkleri yakmak için Arduino pinlerinden pozitif sinyal gönderilir. Bu yazıdaki ana kod Ortak Katot RGB LED için hazırlanmıştır.

Ortak Anot RGB LED

Ortak Anot RGB LED’de ortak bacak 5V hattına bağlanır. Bu tip LED’lerde çalışma mantığı ters olduğu için kodda PWM değerleri terslenmelidir. Yazının ilerleyen kısmında Ortak Anot RGB LED için gerekli kod değişikliğini de bulabilirsiniz.

Projenin Çalışma Mantığı

Bu projede bir buton ile RGB LED’in çalışma modu değiştirilecektir. Butona her basıldığında Arduino bir sonraki moda geçer.

Mod Açıklama
Mod 0 LED kapalıdır.
Mod 1 LED’in parlaklığı artar ve azalır.
Mod 2 RGB LED renkleri yumuşak geçiş yapar.
Mod 3 Kırmızı, yeşil ve mavi renkler sırayla yanar.

Devre Bağlantısı Nasıl Yapılır?

RGB LED’in kırmızı, yeşil ve mavi bacakları Arduino’nun PWM destekli pinlerine bağlanmalıdır. Bu projede D9, D10 ve D11 pinleri kullanılacaktır. Buton ise D2 pinine bağlanacaktır.

Buton bağlantısında harici direnç kullanmaya gerek yoktur. Çünkü kod içinde Arduino’nun dahili INPUT_PULLUP özelliği aktif edilecektir.

Bağlantı Özeti

Arduino Uno Pini Bağlanacak Parça
D9 Direnç üzerinden RGB LED kırmızı bacağı
D10 Direnç üzerinden RGB LED yeşil bacağı
D11 Direnç üzerinden RGB LED mavi bacağı
GND RGB LED ortak bacağı
D2 Butonun bir bacağı
GND Butonun diğer bacağı
Önemli: Bu bağlantı Ortak Anot RGB LED içindir. Eğer Ortak Anot RGB LED kullanıyorsanız ortak bacak GND yerine 5V’a bağlanmalıdır. Ayrıca kodda renk değerlerinin terslenmesi gerekir.
Arduino Uno RGB LED ve buton bağlantı şeması
Fotoğraf 2: Arduino Uno, RGB LED ve buton bağlantı şeması.
Arduino Uno breadboard üzerinde RGB LED ve buton devresi
Fotoğraf 3: Breadboard üzerinde kurulmuş RGB LED ve buton devresi.

Arduino Buton Kontrollü RGB LED Kodu

Aşağıdaki kodda butona her basıldığında RGB LED bir sonraki moda geçer. Kod, Ortak Katot RGB LED için hazırlanmıştır.

// RGB LED pinleri
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;

// Buton pini
const int buttonPin = 2;

// Mod değişkeni
int mode = 0;

// Buton kontrol değişkenleri
bool lastButtonState = HIGH;
bool buttonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

// Zaman kontrolü için değişken
unsigned long previousMillis = 0;

// RGB sıralı yanma modu için
int colorStep = 0;

// Parlaklık modu için
int brightness = 0;
int fadeAmount = 5;

// Renk geçiş modu için
int hueValue = 0;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  pinMode(buttonPin, INPUT_PULLUP);

  setColor(0, 0, 0);
}

void loop() {
  checkButton();

  if (mode == 0) {
    ledOff();
  }
  else if (mode == 1) {
    brightnessMode();
  }
  else if (mode == 2) {
    smoothColorMode();
  }
  else if (mode == 3) {
    rgbStepMode();
  }
}

void checkButton() {
  bool reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;

      if (buttonState == LOW) {
        mode++;

        if (mode > 3) {
          mode = 0;
        }

        setColor(0, 0, 0);
        brightness = 0;
        fadeAmount = 5;
        colorStep = 0;
        hueValue = 0;
      }
    }
  }

  lastButtonState = reading;
}

void brightnessMode() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 30) {
    previousMillis = currentMillis;

    setColor(brightness, brightness, brightness);

    brightness += fadeAmount;

    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount;
    }
  }
}

void smoothColorMode() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 20) {
    previousMillis = currentMillis;

    int redValue = 0;
    int greenValue = 0;
    int blueValue = 0;

    if (hueValue < 255) {
      redValue = 255 - hueValue;
      greenValue = hueValue;
      blueValue = 0;
    }
    else if (hueValue < 510) {
      redValue = 0;
      greenValue = 510 - hueValue;
      blueValue = hueValue - 255;
    }
    else {
      redValue = hueValue - 510;
      greenValue = 0;
      blueValue = 765 - hueValue;
    }

    setColor(redValue, greenValue, blueValue);

    hueValue++;

    if (hueValue > 765) {
      hueValue = 0;
    }
  }
}

void rgbStepMode() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 1000) {
    previousMillis = currentMillis;

    if (colorStep == 0) {
      setColor(255, 0, 0); // Kırmızı
    }
    else if (colorStep == 1) {
      setColor(0, 255, 0); // Yeşil
    }
    else if (colorStep == 2) {
      setColor(0, 0, 255); // Mavi
    }

    colorStep++;

    if (colorStep > 2) {
      colorStep = 0;
    }
  }
}

void ledOff() {
  setColor(0, 0, 0);
}

void setColor(int redValue, int greenValue, int blueValue) {
  analogWrite(redPin, redValue);
  analogWrite(greenPin, greenValue);
  analogWrite(bluePin, blueValue);
}

Kod Nasıl Çalışıyor?

Kodda RGB LED’in kırmızı, yeşil ve mavi bacakları sırasıyla D9, D10 ve D11 pinlerine bağlanmıştır. Bu pinler PWM destekli olduğu için LED’in parlaklığı ve renk geçişleri kontrol edilebilir.

const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;

Buton D2 pinine bağlanmıştır. Kodda INPUT_PULLUP kullanıldığı için butonun bir bacağı D2 pinine, diğer bacağı ise GND hattına bağlanır.

pinMode(buttonPin, INPUT_PULLUP);

Bu bağlantı şeklinde butona basılmadığında pin HIGH, butona basıldığında ise LOW okunur. Bu nedenle kod içinde buton basışı LOW değeri ile kontrol edilir.

Butona Basınca Mod Nasıl Değişiyor?

Kodda mode değişkeni LED’in hangi modda çalışacağını belirler. Butona her basıldığında mode değeri bir artırılır.

mode++;

if (mode > 3) {
  mode = 0;
}

Mod değeri 3’ü geçtiğinde tekrar 0’a döner. Böylece butona her basıldığında LED farklı bir moda geçer.

Mod 1: Parlaklık Artıp Azalma Modu

Bu modda RGB LED beyaz renkte yanar ve parlaklığı düzenli olarak artıp azalır. Parlaklık değeri 0 ile 255 arasında değiştirilir.

Bu bölümde analogWrite() komutu kullanılır. Arduino’da analogWrite değeri 0 olduğunda LED sönük, 255 olduğunda ise maksimum parlaklıkta yanar.

Mod 2: Yumuşak Renk Geçiş Modu

Bu modda RGB LED renkleri yumuşak şekilde değiştirir. Kırmızıdan yeşile, yeşilden maviye ve maviden tekrar kırmızıya geçiş yapılır.

Bu sayede RGB LED’in farklı renkleri nasıl oluşturduğu ve PWM sinyalleri ile renk geçişlerinin nasıl yapılabileceği öğrenilebilir.

Mod 3: Kırmızı, Yeşil ve Mavi Sıralı Yanma Modu

Bu modda RGB LED önce kırmızı, sonra yeşil, ardından mavi renkte yanar. Her renk 1 saniye boyunca aktif kalır ve döngü sürekli tekrar eder.

Bu mod, RGB LED’in temel renk bacaklarını test etmek için de oldukça kullanışlıdır. Eğer renklerden biri yanmıyorsa ilgili bacak bağlantısı veya direnç kontrol edilmelidir.

Neden delay() Yerine millis() Kullanıldı?

Basit LED Blink uygulamalarında delay() komutu kullanılabilir. Ancak bu projede LED efektleri çalışırken butona basıldığında modun hızlı şekilde değişmesi gerekir.

delay() kullanılırsa Arduino bekleme süresindeyken buton basışını geç algılayabilir. Bu nedenle bu projede millis() fonksiyonu kullanılmıştır.

millis() sayesinde Arduino hem LED efektlerini çalıştırabilir hem de aynı anda buton basışlarını kontrol edebilir. Bu yöntem, daha gelişmiş Arduino projeleri için oldukça önemlidir.

Ortak Anot RGB LED Kullanıyorsanız

Eğer RGB LED’in ortak bacağı GND yerine 5V’a bağlanıyorsa LED’iniz muhtemelen Ortak Anot tipindedir. Bu durumda renk değerleri ters çalışır.

Ortak Anot RGB LED kullanıyorsanız koddaki setColor() fonksiyonunu aşağıdaki gibi değiştirmeniz gerekir:

void setColor(int redValue, int greenValue, int blueValue) {
  analogWrite(redPin, 255 - redValue);
  analogWrite(greenPin, 255 - greenValue);
  analogWrite(bluePin, 255 - blueValue);
}

Arduino IDE’ye Kod Nasıl Yüklenir?

Kodu Arduino Uno’ya yüklemek için aşağıdaki adımları takip edebilirsiniz:

  1. Arduino Uno’yu USB kablo ile bilgisayara bağlayın.
  2. Arduino IDE programını açın.
  3. Yeni bir sketch oluşturun.
  4. Yukarıdaki kodu Arduino IDE içine yapıştırın.
  5. Araçlar > Kart bölümünden Arduino Uno seçin.
  6. Araçlar > Port bölümünden Arduino’nun bağlı olduğu COM portunu seçin.
  7. Sol üstteki Yükle butonuna basın.

Kod başarıyla yüklendikten sonra butona her bastığınızda RGB LED’in modu değişecektir.

Arduino IDE üzerinde RGB LED buton kontrol kodu
Fotoğraf 4: Arduino IDE üzerinde RGB LED buton kontrol kodu.

LED Çalışmıyorsa Ne Kontrol Edilmeli?

Kod yüklendiği halde RGB LED çalışmıyorsa veya renkler beklediğiniz gibi yanmıyorsa aşağıdaki kontrolleri yapabilirsiniz:

  • RGB LED’in ortak bacağının doğru hatta bağlandığını kontrol edin.
  • Ortak Katot LED kullanıyorsanız ortak bacağı GND’ye bağlayın.
  • Ortak Anot LED kullanıyorsanız ortak bacağı 5V’a bağlayın.
  • Kırmızı, yeşil ve mavi bacakların doğru pinlere bağlandığından emin olun.
  • Her renk bacağında direnç kullanıldığını kontrol edin.
  • Butonun bir bacağının D2 pinine, diğer bacağının GND’ye bağlı olduğundan emin olun.
  • Arduino IDE’de doğru kart ve doğru port seçildiğini kontrol edin.
  • USB kablonun veri aktarımı desteklediğinden emin olun.

Renkler Yanlış Yanıyorsa Ne Yapılmalı?

Kodda kırmızı yaktırdığınızda yeşil veya mavi yanıyorsa RGB LED’in renk bacakları farklı sıralamada olabilir. Bu durumda kablo bağlantılarını değiştirebilir veya kod içinde pin tanımlarını yeniden düzenleyebilirsiniz.

Örneğin kırmızı yerine yeşil yanıyorsa redPin ve greenPin bağlantılarını kontrol etmeniz gerekir.

Sık Sorulan Sorular

RGB LED için neden PWM pinleri kullanılır?

PWM pinleri sayesinde LED parlaklığı 0 ile 255 arasında kontrol edilebilir. RGB LED’de farklı renkleri elde etmek için kırmızı, yeşil ve mavi bacakların parlaklıkları ayrı ayrı ayarlanır.

Buton için direnç kullanmak gerekir mi?

Bu projede harici buton direnci kullanılmamıştır. Çünkü Arduino’nun dahili pull-up direnci INPUT_PULLUP komutu ile aktif edilmiştir.

RGB LED ortak bacağı nasıl anlaşılır?

RGB LED’in ortak bacağı genellikle diğer bacaklardan daha uzundur. Ancak kesin sonuç için ürünün datasheet bilgisi kontrol edilebilir veya multimetre ile test yapılabilir.

RGB LED renkleri neden düşük parlaklıkta yanıyor?

Kullanılan direnç değeri yüksekse LED daha düşük parlaklıkta yanabilir. Örneğin 1K direnç güvenli bir kullanım sağlar ancak 220Ω veya 330Ω dirence göre daha düşük parlaklık verebilir.

Sonuç

Arduino Uno ile buton kontrollü RGB LED mod değiştirme projesi, başlangıç seviyesinden orta seviyeye geçmek isteyenler için oldukça faydalı bir uygulamadır. Bu projede RGB LED’in renk kontrolü, buton ile mod değiştirme, PWM kullanımı ve delay() yerine millis() fonksiyonu ile zamanlama yapma konuları öğrenilir.

Robomer’de Arduino Uno, RGB LED, buton, direnç, breadboard ve jumper kablo gibi başlangıç seviye elektronik proje malzemelerini inceleyerek kendi Arduino projelerinize kolayca başlayabilirsiniz.