BP–02 · Başlangıç projesi

Potansiyometre ile LED Parlaklığı

Dijital dünyada her şey açık ya da kapalıdır; ama gerçek dünya kademelidir. Bu projede potansiyometreden analog bir değer okuyup PWM tekniğiyle LED'in parlaklığını yumuşak bir şekilde ayarlayacağız.

SeviyeBaşlangıç
Süre30 dk
Malzeme7 çeşit
analogRead()analogWrite()PWMmap()ADCSeri Port Ekranı

Proje hakkında

Potansiyometre, ortasında hareketli bir uç bulunan ayarlanabilir bir dirençtir. Mili çevirdikçe orta bacaktaki voltaj 0V ile 5V arasında değişir. Arduino'nun analog pinleri bu voltajı 0 ile 1023 arasında bir sayıya dönüştürür.

Arduino gerçek anlamda "yarım voltaj" üretemez; bunun yerine pini çok hızlı açıp kapatarak ortalama bir güç elde eder. Bu tekniğe PWM (Darbe Genişlik Modülasyonu) denir. Gözümüz bu hızlı yanıp sönmeyi göremez ve LED'i daha sönük ya da daha parlak algılar.

  • Analog giriş pinlerini ve 10 bitlik ADC'yi
  • PWM'in çalışma mantığını ve ~ işaretli pinleri
  • map() ile bir değer aralığını diğerine dönüştürmeyi
  • Seri Port Ekranında verileri canlı izlemeyi

Malzeme listesi

Projeyi tamamlamak için aşağıdaki 7 çeşit malzemeye ihtiyacınız var. Parçaların çoğu Arduino başlangıç setlerinde hazır olarak bulunur.

Arduino Uno R3 1 adet

Projenin beyni. Nano veya Mega ile de aynı kod çalışır.

Breadboard 1 adet

Lehimsiz devre kurmak için yarım boy (400 delik) yeterlidir.

5 mm LED 1 adet

Parlaklık farkını görmek için beyaz veya mavi LED idealdir.

220 Ω direnç 1 adet

LED'i aşırı akımdan korur. Renk kodu: kırmızı-kırmızı-kahverengi.

10 kΩ potansiyometre 1 adet

Döner tip, 3 bacaklı. 1 kΩ–100 kΩ arası değerler de çalışır.

Jumper kablo (erkek-erkek) 6 adet

USB A-B kablosu 1 adet

Kodu yüklemek ve kartı bilgisayardan beslemek için.

Devre bağlantıları

Bağlantıları USB kablosu takılı değilken yapın. Her satır, bileşenin hangi bacağının Arduino'nun hangi pinine gideceğini gösterir; çizgi rengi önerilen kablo rengidir.

Potansiyometre sol bacak5VUçlardan biri besleme
Potansiyometre orta bacakA0Değişken voltaj çıkışı
Potansiyometre sağ bacakGNDDiğer uç toprak
LED anot (+, uzun bacak)D9 (~)220 Ω direnç üzerinden
LED katot (−, kısa bacak)GND
LED'i mutlaka yanında ~ işareti olan bir pine bağlayın. Arduino Uno'da PWM destekleyen pinler 3, 5, 6, 9, 10 ve 11'dir. Diğer pinlerde analogWrite() sadece tam açık veya tam kapalı çalışır.

Adım adım kurulum

  1. Güç hatlarını kurun

    5V'u breadboard'un + hattına, GND'yi − hattına bağlayın.

  2. Potansiyometreyi takın

    Potansiyometrenin üç bacağını breadboard'da üç ayrı sütuna yerleştirin. Sol bacağı + hattına, sağ bacağı − hattına bağlayın.

  3. Orta bacağı A0'a bağlayın

    Orta bacağın olduğu sütundan Arduino'nun A0 pinine bir kablo çekin. Bu, okuyacağımız değişken voltajdır.

  4. LED devresini kurun

    LED'in kısa bacağını − hattına bağlayın. Uzun bacağı 220 Ω direnç üzerinden D9 pinine götürün.

  5. Kodu yükleyin

    Aşağıdaki kodu Arduino IDE'ye yapıştırın, kartı ve portu seçip yükleyin.

  6. Seri Port Ekranını açın

    Sağ üstteki büyüteç simgesine tıklayın ve hızı 9600 baud yapın. Potansiyometreyi çevirdikçe iki değerin de değiştiğini görün.

  7. Seri Çizici ile grafiği izleyin

    Araçlar › Seri Çizici menüsünü açarsanız parlaklık değerini canlı bir grafik olarak görebilirsiniz.

Arduino kodu

Kodları Arduino IDE'ye yapıştırıp yükleyebilirsiniz. Türkçe karakterler yalnızca yorum satırlarında kullanıldı; Seri Port Ekranına yazdırılan metinlerde bilerek kullanılmadı.

Potansiyometre değerini okuyup LED parlaklığına dönüştüren kod.

pot_led.ino
// Potansiyometre ile LED Parlaklık Kontrolü
// RobotikHocasi.com

const int potPin = A0;   // Potansiyometre orta bacağı
const int ledPin = 9;    // PWM destekli pin (~9)

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 1) Analog değeri oku: 0 - 1023
  int potDegeri = analogRead(potPin);

  // 2) 0-1023 aralığını PWM için 0-255 aralığına dönüştür
  int parlaklik = map(potDegeri, 0, 1023, 0, 255);

  // 3) LED'e PWM sinyali gönder
  analogWrite(ledPin, parlaklik);

  // 4) Değerleri Seri Port Ekranına yazdır
  Serial.print("Pot: ");
  Serial.print(potDegeri);
  Serial.print("  Parlaklik: ");
  Serial.println(parlaklik);

  delay(20);
}

Bonus: Potansiyometre olmadan LED'in yavaşça parlayıp sönmesi (nefes efekti).

nefes_efekti.ino
// Nefes alan LED efekti
const int ledPin = 9;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  for (int i = 0; i <= 255; i++) {   // Yavaşça parla
    analogWrite(ledPin, i);
    delay(6);
  }
  for (int i = 255; i >= 0; i--) {   // Yavaşça sön
    analogWrite(ledPin, i);
    delay(6);
  }
}

Kod açıklaması

analogRead(potPin)

Arduino Uno'nun 10 bitlik analog-dijital dönüştürücüsü (ADC) 0–5V aralığını 1024 basamağa böler. Her basamak yaklaşık 4,9 mV'tur.

map(potDegeri, 0, 1023, 0, 255)

Bir sayıyı bir aralıktan diğerine orantılı olarak taşır. 512 değeri yaklaşık 127'ye dönüşür.

analogWrite(ledPin, parlaklik)

Pine 0–255 arasında görev oranına (duty cycle) sahip bir PWM sinyali gönderir. 127 değeri, pinin zamanın yaklaşık yarısında açık olduğu anlamına gelir.

Serial.print / println

print aynı satırda yazmaya devam eder, println yazdıktan sonra yeni satıra geçer.

Nasıl çalışır?

Potansiyometre aslında bir gerilim bölücüdür. İki ucu arasında sabit bir direnç izi vardır; orta bacak bu iz üzerinde kayan bir fırça gibi hareket eder. Fırça 5V ucuna yaklaştıkça orta bacaktaki voltaj artar, GND ucuna yaklaştıkça azalır.

PWM sinyali saniyede yaklaşık 490 kez (D5 ve D6'da yaklaşık 980 kez) tekrarlanan bir kare dalgadır. analogWrite(9, 64) dediğinizde pin her döngünün yaklaşık %25'inde açık, %75'inde kapalıdır. LED bu hızda yanıp söndüğü için göz bunu %25 parlaklık olarak algılar. Aynı teknik motor hızı kontrolünde de kullanılır.

Sorun giderme

Değerler 0 ile 1023 arasında rastgele zıplıyor
Orta bacak A0'a doğru bağlanmamış ya da kablo gevşek. A0 pini havada kaldığında rastgele değerler okunur.
Parlaklık değişmiyor, LED sadece yanıp sönüyor
LED PWM desteklemeyen bir pine bağlanmış. D9 (~) pinine taşıyın.
Potansiyometreyi sağa çevirince parlaklık azalıyor
Sorun değil; uç bacakların yerini değiştirin ya da kodda map(potDegeri, 0, 1023, 255, 0) yazın.
Potansiyometre ısınıyor
Orta bacak yanlışlıkla 5V veya GND'ye bağlanmış olabilir. Hemen USB'yi çıkarın ve bağlantıları kontrol edin.

Geliştirme fikirleri

Projeyi tamamladıysanız, aşağıdaki fikirlerle bir adım öteye taşıyabilirsiniz.

Işık barı

5 LED kullanarak potansiyometre çevrildikçe sırayla yanan bir seviye göstergesi yapın.

Hız ayarlı yanıp sönme

Parlaklık yerine LED'in yanıp sönme hızını potansiyometreyle ayarlayın.

Motor hızı

Aynı kodla bir transistör üzerinden küçük bir DC motorun hızını kontrol edin.

Logaritmik parlaklık

Göz parlaklığı doğrusal algılamaz. Değerin karesini alarak daha doğal bir geçiş elde edin.

Sık sorulan sorular

Neden analogRead 1023'e, analogWrite 255'e kadar?
ADC 10 bit (2¹⁰ = 1024 değer), PWM ise 8 bit (2⁸ = 256 değer) çözünürlüğe sahiptir. map() bu iki farklı ölçeği birbirine bağlar.
map() yerine 4'e bölebilir miyim?
Evet, potDegeri / 4 neredeyse aynı sonucu verir. map() ise farklı aralıklar için daha okunaklı ve esnektir.
Analog pinleri dijital olarak kullanabilir miyim?
Evet. A0–A5 pinleri digitalRead ve digitalWrite ile normal dijital pin gibi de çalışır.

Bir sonraki projeye hazır mısınız?

Başlangıç serisindeki 10 projeyi sırayla tamamladığınızda sensör, motor ve ekran kullanımının temellerini öğrenmiş olursunuz.

Başlangıç projelerine dön