Potansiyometre ve RGB LED, Arduino öğrenmeye başlayanların en sık kullandığı elektronik komponentler arasında yer alır. Bu projede potansiyometreyi çevirerek RGB LED’in rengini PWM tekniği ile yumuşak şekilde değiştireceğiz.
Potansiyometre çevrildikçe RGB LED sırasıyla mavi, kırmızı, yeşil ve tekrar mavi renkleri arasında geçiş yapacaktır. Ayrıca potansiyometre en düşük konuma getirildiğinde LED bir anda sönmek yerine yavaşça kararacaktır.
Bu proje sayesinde analogRead(), analogWrite(), map() fonksiyonu, PWM sinyali ve RGB renk karışımı mantığını uygulamalı olarak öğrenebilirsiniz.
Projede Kullanılan Malzemeler
Arduino ile potansiyometre kullanarak RGB LED renk kontrolü yapmak için aşağıdaki malzemelere ihtiyacınız vardır:
| Gerekli Malzeme | Ürün Linki |
|---|---|
| Arduino Uno | Arduino Uno R3 Klon + USB Kablo |
| RGB LED | RGB LED 5mm |
| 10K Potansiyometre | 10K Potansiyometre - 3 Pin |
| 1K Direnç | 1/4W 1K Direnç Paketi |
| Jumper Kablo | 40 Adet Erkek-Dişi Jumper Kablo |
| Breadboard | Orta Boy Breadboard 400 Pin |
Projenin Çalışma Mantığı
Bu projede Arduino, potansiyometreden gelen analog değeri sürekli olarak okur. Okunan değere göre RGB LED’in kırmızı, yeşil ve mavi parlaklık seviyeleri PWM yöntemiyle değiştirilir.
Potansiyometre çevrildikçe LED’in rengi yumuşak şekilde değişir. Renk geçiş sırası şu şekildedir:
↓
🟣 Mor
↓
🔴 Kırmızı
↓
🟡 Sarı
↓
🟢 Yeşil
↓
🩵 Camgöbeği
↓
🔵 Mavi
Potansiyometre en düşük konuma getirildiğinde ise LED doğrudan kapanmak yerine yavaşça söner. Bu sayede projede hem analog giriş okuma hem de PWM ile yumuşak renk kontrolü uygulanmış olur.
RGB LED Bağlantısı
Bu projede ortak katot RGB LED kullanıldığı varsayılmıştır. Ortak katot RGB LED’de ortak bacak GND hattına bağlanır.
| RGB LED Bacağı | Arduino Bağlantısı |
|---|---|
| Ortak Katot Bacağı | GND |
| Kırmızı Bacak | 1K direnç üzerinden D9 |
| Yeşil Bacak | 1K direnç üzerinden D10 |
| Mavi Bacak | 1K direnç üzerinden D6 |
Potansiyometre Bağlantısı
Potansiyometrenin orta bacağı Arduino’nun analog giriş pinine bağlanır. Bu projede potansiyometre değeri A0 pininden okunacaktır.
| Potansiyometre Bacağı | Arduino Bağlantısı |
|---|---|
| Sol Bacak | GND |
| Orta Bacak | A0 |
| Sağ Bacak | 5V |
Arduino Potansiyometre ile RGB LED Renk Kontrol Kodu
Aşağıdaki kod, potansiyometreden gelen değeri okuyarak RGB LED’in rengini değiştirir. Kod ortak katot RGB LED için hazırlanmıştır.
// Potansiyometrenin bağlı olduğu analog giriş pini
const int potPin = A0;
// RGB LED'in bağlı olduğu PWM pinleri
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// LED'in anlık renk değerlerini tutan değişkenler
int currentR = 0;
int currentG = 0;
int currentB = 0;
// Potansiyometre en düşük konumdayken LED'i kapatmak için eşik değeri
const int offThreshold = 20;
void setup() {
// RGB LED pinlerini çıkış olarak ayarla
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// Potansiyometrenin değerini oku (0 - 1023)
int potValue = analogRead(potPin);
// Potansiyometre en düşük seviyedeyse LED'i yavaşça söndür
if (potValue < offThreshold) {
fadeToColor(0, 0, 0);
delay(10);
return;
}
// Potansiyometre değerini 0 - 767 aralığına dönüştür
int color = map(potValue, offThreshold, 1023, 0, 767);
// RGB değişkenlerini oluştur
int r = 0;
int g = 0;
int b = 0;
// Mavi -> Kırmızı geçişi
if (color < 256) {
b = 255 - color;
r = color;
g = 0;
}
// Kırmızı -> Yeşil geçişi
else if (color < 512) {
color -= 256;
r = 255 - color;
g = color;
b = 0;
}
// Yeşil -> Mavi geçişi
else {
color -= 512;
r = 0;
g = 255 - color;
b = color;
}
// Hesaplanan renkleri RGB LED'e gönder
setColor(r, g, b);
delay(10);
}
// RGB LED'e renk değerlerini gönderen fonksiyon
void setColor(int r, int g, int b) {
currentR = r;
currentG = g;
currentB = b;
analogWrite(redPin, currentR);
analogWrite(greenPin, currentG);
analogWrite(bluePin, currentB);
}
// LED'in rengini hedef renge yumuşak şekilde yaklaştıran fonksiyon
void fadeToColor(int targetR, int targetG, int targetB) {
while (currentR != targetR || currentG != targetG || currentB != targetB) {
if (currentR < targetR) currentR++;
else if (currentR > targetR) currentR--;
if (currentG < targetG) currentG++;
else if (currentG > targetG) currentG--;
if (currentB < targetB) currentB++;
else if (currentB > targetB) currentB--;
analogWrite(redPin, currentR);
analogWrite(greenPin, currentG);
analogWrite(bluePin, currentB);
delay(3);
}
}
Kod Nasıl Çalışır?
Kodda potansiyometrenin bağlı olduğu analog giriş pini A0 olarak tanımlanır. RGB LED’in kırmızı, yeşil ve mavi bacakları ise PWM destekli pinlere bağlanır.
const int potPin = A0;
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
Arduino Uno’da D3, D5, D6, D9, D10 ve D11 pinleri PWM desteklidir. Bu nedenle RGB LED renklerini yumuşak şekilde kontrol etmek için D9, D10 ve D6 pinleri kullanılmıştır.
Potansiyometre Değeri Okunuyor
int potValue = analogRead(potPin);
analogRead() fonksiyonu A0 pinindeki gerilimi okur. Arduino Uno’da bu değer 0 ile 1023 arasında olur.
| Potansiyometre Konumu | Yaklaşık Okuma Değeri |
|---|---|
| En düşük konum | 0 |
| Orta konum | Yaklaşık 512 |
| En yüksek konum | 1023 |
Potansiyometre En Düşükteyse LED Yavaşça Sönüyor
if (potValue < offThreshold) {
fadeToColor(0, 0, 0);
delay(10);
return;
}
Potansiyometre en düşük konuma getirildiğinde LED’in kapanması için bir eşik değeri kullanılır. Bu örnekte eşik değeri 20 olarak belirlenmiştir.
Bu değer sayesinde potansiyometre en düşük seviyedeyken RGB LED yumuşak şekilde kararır ve kapalı konumda kalır.
map() Fonksiyonu ile Değer Dönüştürme
int color = map(potValue, offThreshold, 1023, 0, 767);
map() fonksiyonu, potansiyometreden gelen 0-1023 aralığındaki değeri renk geçişleri için kullanılacak 0-767 aralığına dönüştürür.
0-767 aralığı üç ayrı renk geçiş bölgesine ayrılmıştır:
| Değer Aralığı | Renk Geçişi |
|---|---|
| 0 - 255 | Mavi → Kırmızı |
| 256 - 511 | Kırmızı → Yeşil |
| 512 - 767 | Yeşil → Mavi |
RGB Renk Değerleri Hesaplanıyor
int r = 0;
int g = 0;
int b = 0;
RGB LED’de her rengin parlaklık değeri ayrı ayrı kontrol edilir. Kırmızı için r, yeşil için g, mavi için ise b değişkeni kullanılır.
Bu değişkenler 0 ile 255 arasında değer alır. Değer 0 olduğunda ilgili renk sönük, 255 olduğunda ise maksimum parlaklıktadır.
Renkler PWM ile RGB LED’e Gönderiliyor
setColor(r, g, b);
Hesaplanan kırmızı, yeşil ve mavi değerleri setColor() fonksiyonuna gönderilir. Bu fonksiyon içinde analogWrite() kullanılarak RGB LED’in her rengi ayrı ayrı kontrol edilir.
analogWrite(redPin, currentR);
analogWrite(greenPin, currentG);
analogWrite(bluePin, currentB);
Her rengin parlaklığı ayrı ayrı ayarlandığı için RGB LED üzerinde birçok farklı renk tonu oluşturulabilir.
PWM Neden Kullanılıyor?
Arduino Uno’da gerçek analog çıkış bulunmaz. Bunun yerine PWM yöntemi kullanılarak LED’in parlaklığı kontrol edilir.
analogWrite() fonksiyonuna gönderilen değerler 0 ile 255 arasındadır:
| PWM Değeri | LED Durumu |
|---|---|
| 0 | LED kapalı |
| 128 | Yaklaşık %50 parlaklık |
| 255 | Tam parlaklık |
PWM sayesinde LED yalnızca açık veya kapalı olmak yerine farklı parlaklıklarda çalıştırılabilir. RGB LED’de her renk kanalına farklı PWM değeri verilerek farklı renkler elde edilir.
map() Fonksiyonu Neden Kullanılıyor?
analogRead() fonksiyonu 0 ile 1023 arasında değer döndürür. Ancak renk geçişlerini oluşturmak için bu değeri farklı bir aralığa dönüştürmek gerekir.
Bu projede map() fonksiyonu kullanılarak potansiyometre değeri 0 ile 767 arasına çevrilmiştir. Böylece üç farklı renk geçişi eşit şekilde oluşturulabilir.
Common Anode RGB LED Kullanıyorsanız
Bu yazıdaki devre ve kod common cathode, yani ortak katot RGB LED için hazırlanmıştır. Eğer RGB LED’in ortak bacağı GND yerine 5V’a bağlanıyorsa LED’iniz muhtemelen common anode tipindedir.
Common anode RGB LED kullanıyorsanız analogWrite() değerlerini terslemeniz gerekir. Bunun için setColor() fonksiyonunu aşağıdaki gibi değiştirebilirsiniz:
void setColor(int r, int g, int b) {
currentR = r;
currentG = g;
currentB = b;
analogWrite(redPin, 255 - currentR);
analogWrite(greenPin, 255 - currentG);
analogWrite(bluePin, 255 - currentB);
}
Projede Öğrenilen Arduino Fonksiyonları
Bu projede aşağıdaki Arduino fonksiyonlarını ve programlama yapılarını uygulamalı olarak öğrenmiş olursunuz:
- analogRead() ile potansiyometre değeri okuma
- analogWrite() ile PWM çıkışı üretme
- pinMode() ile pinleri çıkış olarak ayarlama
- map() ile değer aralığı dönüştürme
- if - else yapısı ile koşul kontrolü
- while döngüsü ile yumuşak geçiş oluşturma
- delay() ile kısa bekleme süresi verme
LED veya Renkler Doğru Çalışmıyorsa Ne Kontrol Edilmeli?
Devreyi kurduktan sonra RGB LED yanmıyorsa veya renkler beklediğiniz gibi değişmiyorsa aşağıdaki noktaları kontrol edebilirsiniz:
- RGB LED’in ortak bacağının doğru şekilde GND’ye bağlandığından emin olun.
- Common anode RGB LED kullanıyorsanız ortak bacağı 5V’a bağlamanız ve kodu terslemeniz gerekir.
- Kırmızı, yeşil ve mavi bacakların doğru Arduino pinlerine bağlandığını kontrol edin.
- Her renk bacağında direnç kullandığınızdan emin olun.
- Potansiyometrenin orta bacağının A0 pinine bağlı olduğunu kontrol edin.
- Potansiyometrenin diğer iki bacağının 5V ve GND hatlarına bağlı olduğundan emin olun.
- Arduino IDE’de doğru kart ve doğru port seçili olmalıdır.
Sık Sorulan Sorular
Bu projede neden PWM pinleri kullanılıyor?
RGB LED’in renklerini yumuşak şekilde değiştirmek için her renk kanalının parlaklığını ayrı ayrı kontrol etmek gerekir. Bu nedenle PWM destekli pinler kullanılır.
1K direnç yerine 220Ω veya 330Ω direnç kullanılabilir mi?
Evet, kullanılabilir. 220Ω veya 330Ω direnç LED’in daha parlak yanmasını sağlar. 1K direnç ise LED’i daha düşük parlaklıkta ama daha güvenli şekilde çalıştırır.
Potansiyometreyi çevirdiğimde renkler ters yönde değişirse ne yapmalıyım?
Potansiyometrenin sağ ve sol bacaklarını yer değiştirirseniz renk değişim yönü tersine döner. Bu durum devre için bir sorun oluşturmaz.
RGB LED renkleri yanlış yanıyorsa sorun nedir?
RGB LED’in kırmızı, yeşil ve mavi bacak sıralaması kullandığınız LED modeline göre değişebilir. Kırmızı yerine yeşil veya mavi yanıyorsa bağlantı kablolarını veya kod içindeki pin tanımlarını kontrol etmeniz gerekir.
Sonuç
Arduino ile potansiyometre kullanarak RGB LED renk kontrolü, analog girişleri ve PWM çıkışlarını birlikte kullanmayı öğrenmek için oldukça faydalı bir projedir. Potansiyometreden okunan analog değerler kullanılarak RGB LED’in renkleri yumuşak şekilde değiştirilir ve PWM tekniği sayesinde akıcı geçişler elde edilir.
Bu projeyi tamamladıktan sonra aynı mantıkla servo motor kontrolü, DC motor hız ayarı, LED parlaklığı kontrolü ve farklı RGB aydınlatma uygulamaları gibi daha gelişmiş projeler de kolayca geliştirilebilir.
Arduino Projeleri İçin Gerekli Ürünleri İnceleyin
Arduino Uno, RGB LED, potansiyometre, direnç, breadboard ve jumper kablo gibi temel elektronik proje malzemeleriyle kendi Arduino projelerinize kolayca başlayabilirsiniz.
Robomer Ürünlerini İncele