back to top

Arduino Dersleri #8: Arduino RGB LED Bağlantısı ve Kullanımı

Merhaba arkadaşlar. Arduino serimizin bu yazısında sizlerle RGB LED renk değiştirme uygulaması yapacağız. Potansiyometre ile RGB LED kontrolünün nasıl yapıldığını inceleyeceğiz.

Daha önceki yazımızda LDR Devresinden bahsetmiştik >> Karanlıkta LED Yakan LDR Devresi yapalım !

Arduino ve Potansiyometre Kullanarak RGB LED Rengini Değiştirelim

RGB LED’lerin yapısında üç ayrı renk LED bulunur. Bunlar kırmızı (Red), yeşil (Green) ve mavidir (Blue). RGB LED ismi de bu renklerin baş harflerinden türemiştir. Normal LED’lerde bir anot ve bir katot pin vardır fakat RGB LED’lerde bir adet ortak anot veya ortak katot pini, bunun yanında da 3 rengi temsil eden pinler yer almaktadır.

RGB LED ile ilgili daha detaylı bilgiye yazımızdan ulaşabilirsiniz >> RGB LED Nedir?

Biz bu uygulamızda 3 adet potansiyometre kullanarak RGB LED’in renk değişimini kontrol edeceğiz.

Gerekli malzemeler: ( Not: Arduino RGB LED Uygulaması ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette ! >)

Arduino RGB LED devremiz için devremizi aşağıdaki gibi kuralım:

RGB LED Devresi

Arduino RGB LED Kodu

RGB LED Code (RGB LED Kodu) için aşağıdaki gibi algoritma yazdık. Arduino kodumuzdaki her satırın ne anlama geldiğini hem kanalımızda hem de blogumuzda detaylı olarak açıkladık. Hadi kodumuzu yazalım !

#define red 11 //LED'imizin kırmızıyı temsil eden pini Arduino'nun 11.pinine tanımlanır
#define green 10 //Yeşili temsil eden pin 10
#define blue 9 //Maviyi temsil eden pin 9
#define pot_r A0 //Kırmızı ledi temsil eden pot tanımlanır
#define pot_g A1 //Yeşil ledi temsil eden pot tanımlanır
#define pot_b A2 //Mavi ledi temsil eden pot tanımlanır
int red_value; //Kırmızı led değeri için bir değişken tanımlanır
int green_value; //Yeşil led değeri için bir değişken tanımlanır
int blue_value; //Mavi led değeri için bir değişken tanımlanır
void deger_oku() { //Potlardan gelen değerlerin okunması için bir döngü tanımlanır
  red_value = analogRead(pot_r); //Kırmızı ledi kontrol eden potun değeri okunur
  green_value = analogRead(pot_g); //Yeşil ledi kontrol eden potun değeri okunur
  blue_value = analogRead(pot_b); //Mavi ledi kontrol eden potun değeri okunur
  red_value = map(red_value, 0, 1023, 0, 255);
  green_value = map(green_value, 0, 1023, 0, 255);
  blue_value = map(blue_value, 0, 1023, 0, 255);
  ////0-1023 arası okunan değerler map komutu ile 0-255 arası değerlere dönüştürülür
}
void deger_yaz() { //Potlardan okunan değerler RGB LED'e aktarılır
  analogWrite(red, red_value); //Kırmızı pottan gelen renk değeri RGB LED'e aktarılır
  analogWrite(green, green_value); //Yeşil pottan gelen renk değeri RGB LED'e aktarılır
  analogWrite(blue, blue_value); //Mavi pottan gelen renk değeri RGB LED'e aktarılır
}
void setup() {
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);
  //RGB LED'in Kırmızı, Yeşil ve Mavi renkleri çıkış pini olarak tanımlanır
}
void loop() { //Ana döngüde değer okuma ve değer yazma işlemleri uygulanır
  deger_oku();
  deger_yaz();
}

Son Çıkan Yazılar

20 YORUMLAR

  1. abi emeğine sağlık her videon çok güzel ama videoda hem orjinal arduıno kodlarını hem de mblock kodlarını versen daha iyi olur hem öğrenciler için daha kolay ben bilişim hocasıyım anlıyorum beşe altıya giden çocuk nasıl anlasın ama yinede eline sağlık

    • 1 pot la olmayabilir olabilir, de kodları kendin yazıp hardwareda kendin yaparsan olabilir ama 3 pot daha rahat (1 pot ile sonsuz döndüremediğin için kısıtlıda olur) 🙂

    • RGB+ ise ortak anot
      RGB- ise ortak katot
      Anot artı 5 volta bağlanır
      Katot ise ortak GND hattına bağlanır.
      Diğer RGB pinlerini sizin atadiginiz pinleri IDE de Kod olarak yazdırmak gerekir.

  2. arkadaşlar rgb led yerine buzzer takın dirençleri değiştirerek buzzerın sesini arttırın ve potansiyometreleri hareket ettirin nota değişikliği oluyor

  3. Tek pot ile yapımı için gerekli kod (değişen değerleri konsol ekranında takip edebilirsiniz)

    #define potpin A0 //Potansiyometreyi A0 pinine tanımlıyoruz
    int deger=0; //”Değer” adlı 0 başlangıçlı bir değişken tanımlıyoruz
    void setup()
    {
    Serial.begin(9600); //9600 Baund bir seri haberleşme başlatıyoruz
    Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

    pinMode(3, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    }
    void loop()
    {
    deger = analogRead(potpin); //”Değer” değişkeni potansiyometrenin değerini okuyup buna göre değişir
    Serial.println(deger); //Okunan değer seri monitörde mesaj olarak gönderilir

    if (deger==0){
    digitalWrite(3, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
    }else if(deger>1 and deger351 and deger<700){
    digitalWrite(5, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(3, LOW);
    delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
    }else{
    digitalWrite(6, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(3, LOW);
    delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
    }

    }

    • Arduino:1.8.15 (Windows 10), Kart:”Arduino Uno”

      sketch_jul25b:6:16: error: stray ‘\342’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      sketch_jul25b:6:17: error: stray ‘\200’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      sketch_jul25b:6:18: error: stray ‘\234’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      sketch_jul25b:6:34: error: stray ‘\342’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      sketch_jul25b:6:35: error: stray ‘\200’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      sketch_jul25b:6:36: error: stray ‘\235’ in program

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^

      C:\Users\90553\AppData\Local\Temp\arduino_modified_sketch_945682\sketch_jul25b.ino: In function ‘void setup()’:

      sketch_jul25b:6:19: error: ‘Pot’ was not declared in this scope

      Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz

      ^~~

      C:\Users\90553\AppData\Local\Temp\arduino_modified_sketch_945682\sketch_jul25b.ino: In function ‘void loop()’:

      sketch_jul25b:22:22: error: ‘deger351’ was not declared in this scope

      }else if(deger>1 and deger351 and deger1 and deger351 and deger Preferences.

      Bu hatayı verdi, ne yapmalıyım?

  4. ÖNCELİKLE TEŞEKKÜR EDERİM
    BEN LM 35 VE VOLTAJ ÖLÇÜM İÇİN AYRI AYRI LED BAĞLAYIP İKİSİNİ DE AYRI DEĞERLERDE YAKMAYA ÇALIŞACAGIM POTLARA DEDİĞİNİZ GİBİ DEĞİLDE FARKLI ŞEKİLDE BAĞLADIM KODUNU YAZARKEN LM35 İÇİN AYRI VOLTAJ İÇİN AYRI YAZMAM MI GEREKİYOR YA DA DEDİĞİM OLAY MÜMKÜN MÜ YAKABİLİR MİYİM AYRI DEĞERLERDE.
    TEŞEKKÜR EDERİM

  5. Aciklamalarinizi yeterli bulmuyorum mesala map komutu hakkinda daha onceki derslerde bilgi vermdgnz haldee kullaniyorsunuz oda yetmezmis gibi okunan 10 bitlik degeri tekrar 8 bitlik bir degere donustryorsunuz bunu neden yaptgnzi aciklamyorsnzz burdaki dersler ezbercilik uzerine olmus oluyor

    • Anladığım kadarıyla, 10 bit Arduinodan kaynaklanan bir kısıtlama, analog girişlerden bu yüzden 1024 genişliğinde bir aralıkta yani 0-1023 aralığında değer okunuyor. 8 bitlik değere dönüştürme nedeni ise RGB ledin her renginin derecesi 256 aralığında değer kabul eder, yani 0-255 aralığında; bu yüzden de 8 bite dönüştürme işlemi yapılmış.

  6. Kod kısmında bir eksiklik olduğunu düşünüyorum. setup() fonksiyonu içerisine aşağıdaki gibi potansiyometre pinlerinin giriş olarak tanımlanması gerekiyor gibi geldi:

    pinMode(pot_r, INPUT);
    pinMode(pot_g, INPUT);
    pinMode(pot_b, INPUT);
    //Potansiyometre orta ayakları giriş pini olarak tanımlanır

    Ben kendi uygulamamda sorun yaşadım, bu şekilde bir ilave ile düzeldi.
    Ayrıca, RGB ledlerin aldığı değerlere göre renk ayarı ters ilişki ile oluyor sanırım. Yani 0-255 arası potansiyometrede okunan değer üzerinden dönüştürülen değer red_value olsun, RGB lede 255-red_value olarak girmek Serial monitorden okumayı kolaylaştırıyor. Tabi bunun için map fonksiyonunun da;
    red_value = map(red_value, 0, 1023, 255, 0);
    olarak değer sınırları ters olacak şekilde düzenlenmesi gerekiyor. Benim uygulamamda bu kısmi düzenlemelerle yapıp çalıştırdığım son halini aşağıda paylaşıyorum:
    #define red 9 //LED’imizin kırmızıyı temsil eden pini Arduino’nun 9.pinine tanımlanır
    #define green 10 //Yeşili temsil eden pin 10
    #define blue 11 //Maviyi temsil eden pin 11

    #define pot_r A0 //Kırmızı ledi temsil eden pot tanımlanır
    #define pot_g A1 //Yeşil ledi temsil eden pot tanımlanır
    #define pot_b A2 //Mavi ledi temsil eden pot tanımlanır

    int red_value; //Kırmızı led değeri için bir değişken tanımlanır
    int green_value; //Yeşil led değeri için bir değişken tanımlanır
    int blue_value; //Mavi led değeri için bir değişken tanımlanır

    void deger_oku() { //Potlardan gelen değerlerin okunması için bir döngü tanımlanır
    red_value = analogRead(pot_r); //Kırmızı ledi kontrol eden potun değeri okunur
    green_value = analogRead(pot_g); //Yeşil ledi kontrol eden potun değeri okunur
    blue_value = analogRead(pot_b); //Mavi ledi kontrol eden potun değeri okunur
    red_value = map(red_value, 0, 1023, 255, 0);
    green_value = map(green_value, 0, 1023, 255, 0);
    blue_value = map(blue_value, 0, 1023, 255, 0);
    ////0-1023 arası okunan değerler map komutu ile 0-255 arası değerlere dönüştürülür
    }

    void deger_yaz() { //Potlardan okunan değerler RGB LED’e aktarılır
    analogWrite(red, 255-red_value); //Kırmızı pottan gelen renk değeri RGB LED’e aktarılır
    analogWrite(green, 255-green_value); //Yeşil pottan gelen renk değeri RGB LED’e aktarılır
    analogWrite(blue, 255-blue_value); //Mavi pottan gelen renk değeri RGB LED’e aktarılır
    }

    void setup() {
    pinMode(red, OUTPUT);
    pinMode(green, OUTPUT);
    pinMode(blue, OUTPUT);
    //RGB LED’in Kırmızı, Yeşil ve Mavi renkleri çıkış pini olarak tanımlanır
    pinMode(pot_r, INPUT);
    pinMode(pot_g, INPUT);
    pinMode(pot_b, INPUT);
    //Potansiyometre orta ayakları giriş pini olarak tanımlanır
    Serial.begin(9600);
    }

    void loop() { //Ana döngüde değer okuma ve değer yazma işlemleri uygulanır

    deger_oku();
    Serial.print(red_value);
    Serial.print(“,”);
    Serial.print(green_value);
    Serial.print(“,”);
    Serial.println(blue_value);
    deger_yaz();
    }

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz