Bu yazımızda RGB LED nedir, çeşitleri nelerdir ve Arduino ile nasıl kullanılır onu anlatacağız. RGB LED’in rengini sürekli değiştirip renk geçişini de bir potansiyometre ile ayarlayacağız.
Malzeme Listesi
- 1 x Arduino (UNO veya MEG- Yazımızda Mega Kullandık)
- 1 x RGB LED(Yazıda ortak anot kullanıldı)
- 3 x 220Ω-1kΩ Direnç (Direnç değerleri aynı olmalıdır)
- Jumper Kablo
- 10k Potansiyometre
RGB LED NEDİR?
RGB LED kırmızı, yeşil ve mavi renklerini aynı anda verebilen ve bu sayede renklerin karışımı ile oluşan renkleri verebilen LED çeşididir. RGB kısaltması Red-Green-Blue yani Kırmızı-Yeşil-Maviyi temsil etmektedir. Renkli LCD ekranların pikselleri de RGB LED’lerdir. Yaptığımız projelerde LED’leri genellikle indikatör yani işaret olarak kullanıyoruz. RGB LED’ler ile tek bir LED kullanarak bir çok durumu farklı renklerle belirtebiliriz.
Genel anlamda iki çeşit RGB LED vardır:
- Ortak Katot: RGB LED içerisinde bulunan 3 farklı renkteki LED’lerin (-) uçları ortaktır.
- Ortak Anot: RGB LED içerisinde bulunan 3 farklı renkteki LED’lerin (+) uçları ortaktır.
Devre Şeması
Arduino ile RGB Kontrolü
RGB LED’lerin kontrolü oldukça basittir. Ortak katot RGB LED’din ortak ucu (en uzun bacak) toprağa bağlanırken diğer bacakları dirençle denetleyiciye bağlanır. Denetleyiciden PWM verilerek renk değerleri ayarlanır. Ortak anotta ise ortak uca enerji verilerek (5V) diğer bacakları dirençle denetleyiciye bağlanır. Yine aynı şekilde PWM ile sürülür. İki tip RGB LED kullanımındaki farklılık ise ortak katotta akım denetleyici pinlerinden dışarıya doğru iken ortak anotta akım denetleyici pinlerine doğru akar yani bir akım havuzu oluşturulmuş olur. Bu aslında denetleyici için çok sağlıklı olmasa da RGB LED’in akım değeri çok düşük olduğundan Arduino için sorun oluşturmamaktadır. Ayrıca ortak katotta R G B bacaklarına verilen PWM değerine göre parlaklık doğrusal olarak artarken ortak anotta tam tersi olur. Örneğin ortak katotta R G B bacaklarına %100 PWM (5V) uygulanması durumunda LED beyaz yanarken ortak anotta ise LED hiç yanmayacaktır. Burada her 3 bacağa da aynı değerde direnç bağlanması önemlidir. Aksi taktirde parlaklıklar faklı olacağı için renkte tutarsızlık olacaktır.
Arduino RGB LED Kodları:
Kodlar Arduino Mega için yazılmıştır. Uno kullanmanız durumunda 2. 3. ve 4. bacaklar yerine PWM özelliği olan bacakları kullanmanız gerekmektedir. (Örneğin 3. 5. ve 6. bacaklar). Devrede ortak anot kullanıldığı için setColor fonksiyonunun içerisinde girilen değerler 255’ten çıkartılmıştır. Ortak katot kullanmanız durumunda bu işlem gerekli değildir. setColor(r,g,b) foksiyonu girdilere göre renk oluşturmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#define LED_R 4 //RGB LED kırmızı bacağın bağlandığı pin #define LED_G 3 //RGB LED yeşil bacağın bağlandığı pin #define LED_B 2 //RGB LED mavi bacağın bağlandığı pin #define POT 0 uint8_t i = 0; //Kırmızı renk tonu değişimi için for değişkeni uint8_t j = 0; //Yeşil renk tonu değişimi için for değişkeni uint8_t k = 0; //Mavi renk tonu değişimi için for değişkeni uint16_t delay_read = 0; void setup() { pinMode(LED_R, OUTPUT); //Kırmızı LED'in bağlı olduğu bacak çıkış olarak ayarlanır pinMode(LED_G, OUTPUT); //Yeşil LED'in bağlı olduğu bacak çıkış olarak ayarlanır pinMode(LED_B, OUTPUT); //Mavi LED'in bağlı olduğu bacak çıkış olarak ayarlanır pinMode(POT, INPUT); //A0 pinindeki potansiyometre analog giriş olarak ayarlanır setColor(0, 0, 0); //LED söndürülür } void loop() { for (i = 0; i < 255; i++) //Kırmızı ton arttırılır { setColor(i, j, k); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) delay(delay_read); } for (j = 0; j < 255; j++) //Yeşil ton arttılır { setColor(i, j, k); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) delay(delay_read); } for (k = 0; k < 255; k++) //Mavi ton arttırılır { setColor(i, j, k); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) delay(delay_read); } for (i = 255; i > 0; i--) //Mavi ton azaltırlır { setColor(i, j, k); delay(delay_read); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) } for (j = 255; j > 0; j--) //Yeşil ton azaltırlır { setColor(i, j, k); delay(delay_read); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) } for (k = 255; k > 0; k--) //Kırmızı ton azaltılır. { setColor(i, j, k); delay_read = map(analogRead(POT), 0, 1023, 1, 500); //POT'tan okunan değere göre delay ayarlanır (1ms-500ms aralığında) delay(delay_read); } } //Renk ayarlama fonksiyonu void setColor(int red, int green, int blue) { red = 255 - red; //Ortak anot olduğu için değer 255'ten çıkarılır green = 255 - green; //Ortak anot olduğu için değer 255'ten çıkarılır blue = 255 - blue; //Ortak anot olduğu için değer 255'ten çıkarılır analogWrite(LED_R, red); //Hesaplanan değere göre kırmızı renk için PWM ayarlanır analogWrite(LED_G, green); //Hesaplanan değere göre yeşil renk için PWM ayarlanır analogWrite(LED_B, blue); //Hesaplanan değere göre mavi renk için PWM ayarlanır } |
Bazı Hazır Renk Değerleri:
Siz de artık Arduino projelerinizde rahatlıkla RGB LED kullanabilirsiniz. Sorunuz olursa lütfen yorumlarda belirtin. RF modüller ile RGB LED kontrol ettiğimiz projemize buradan ulaşabilirsiniz. İyi eğlenceler!!
Merhaba.
Ben hobi amaçlı bir projede 50 adet 4 bacak ortak katodlu rgb ledi aynı anda arduino ile sürebilecek bir sistem kurmak istiyorum.
Ancak nette 1 adet RGB LED sürme dışında tek bir paylaşım bulamadım.
Serimi bağlamam gerekir?
Paralelmi?
Arduinonun 3 pinini kullanarak bu amacını nasıl gerçekleştirebilirim?
Şimdiden teşekkürler.