Arduino Ders 4: Kara Şimşek Yapımı

Arduino Etkinliği · Kontrol Yapıları

Kara Şimşek (Knight Rider) LED Efekti

Beş LED'i sırayla yakıp söndürerek ışığın soldan sağa ve yeniden sola hareket ettiği klasik Knight Rider efektini oluşturacağız. Bu etkinlikte aynı zamanda for döngüsü, diziler ve tekrarlayan kodları sadeleştirme mantığını öğreneceğiz.

Arduino Kara Şimşek Knight Rider LED uygulaması
SeviyeBaşlangıç
Öğrenilecek Konufor döngüsü ve diziler
Devre5 LED + 5 seri direnç
01

Gerekli Malzemeler

Temel bir Arduino başlangıç devresi.

  • 1 adet Arduino Uno veya uyumlu kart
  • 1 adet breadboard
  • 5 adet LED
  • 5 adet 220 Ω veya 330 Ω direnç
  • Jumper kablolar
  • USB veri kablosu

Her LED için ayrı seri direnç kullanın. Arduino Uno Rev3'te bir dijital I/O pini için önerilen akım 20 mA'dır. Bu uygulamada LED'ler aynı anda değil, sırayla yakıldığı için toplam yük de düşük kalır.

02

Devre Bağlantısı

LED'leri D3–D7 pinlerine bağlayacağız.

LED'lerin anot (uzun) bacaklarını sırasıyla D3, D4, D5, D6 ve D7 dijital pinlerine bağlayın. Her LED'in devresine ayrı bir seri direnç ekleyin ve LED'lerin katot (kısa) bacaklarını GND hattında birleştirin.

Direnç LED'in anot veya katot tarafında olabilir; elektriksel olarak önemli olan LED ile seri bağlı olmasıdır.

Arduino Knight Rider LED devre bağlantısı

Dikkat: LED'leri dirençsiz doğrudan Arduino pinine bağlamayın. Çok sayıda LED'i aynı anda yakacağınız daha büyük projelerde yalnızca pin başına akımı değil, kartın toplam akım sınırlarını da dikkate almak gerekir.

03

Önce Mantığı Görelim

Döngü kullanmadan temel çalışma.

Başlangıçta her pini tek tek tanımlayıp LED'leri sırayla yakmak mümkündür. Bu yöntem çalışır; fakat LED sayısı arttıkça aynı kod satırlarını tekrar tekrar yazmak gerekir.

Temel sürümArduino / C++
void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop() {
  digitalWrite(3, HIGH);
  delay(100);
  digitalWrite(3, LOW);

  digitalWrite(4, HIGH);
  delay(100);
  digitalWrite(4, LOW);

  digitalWrite(5, HIGH);
  delay(100);
  digitalWrite(5, LOW);

  digitalWrite(6, HIGH);
  delay(100);
  digitalWrite(6, LOW);

  digitalWrite(7, HIGH);
  delay(100);
  digitalWrite(7, LOW);
}

Bu sürüm yalnızca tek yönde ilerler. Öğretici olması açısından faydalıdır, ancak “Kara Şimşek” görünümü için ışığın geri dönmesini de sağlamamız gerekir.

04

for Döngüsü ve Dizi

Aynı işi daha kısa ve ölçeklenebilir yazalım.

Arduino'nun resmî yerleşik örneklerinde bu konu “For Loop Iteration (aka The Knight Rider)” adıyla yer alır. Buradaki temel fikir, LED pinlerini bir dizide tutmak ve aynı işlemi for döngüsü ile her pin için sırayla tekrarlamaktır.

Tek yönlü for döngüsüArduino / C++
const byte ledPins[] = {3, 4, 5, 6, 7};
const byte ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
const unsigned int waitMs = 100;

void setup() {
  for (byte i = 0; i < ledCount; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (byte i = 0; i < ledCount; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(waitMs);
    digitalWrite(ledPins[i], LOW);
  }
}
ledPins[]Kullanacağımız pin numaralarını tek yerde tutar.
ledCountDizide kaç LED olduğunu otomatik hesaplar.
forAynı komutları her LED için sırayla çalıştırır.
waitMsEfektin hızını tek değişkenden ayarlamamızı sağlar.
05

Gerçek Kara Şimşek Efekti

Soldan sağa, sonra sağdan sola.

Aşağıdaki sürüm önce LED'leri D3'ten D7'ye doğru ilerletir; ardından uçtaki LED'i ikinci kez bekletmeden D6'dan D4'e doğru geri döner. Böylece animasyon daha akıcı görünür.

Önerilen nihai kodArduino / C++
const byte ledPins[] = {3, 4, 5, 6, 7};
const byte ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
const unsigned int waitMs = 100;

void setup() {
  for (byte i = 0; i < ledCount; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  // Soldan sağa
  for (byte i = 0; i < ledCount; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(waitMs);
    digitalWrite(ledPins[i], LOW);
  }

  // Sağdan sola - uç LED'leri tekrar bekletmeden
  for (int i = ledCount - 2; i > 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(waitMs);
    digitalWrite(ledPins[i], LOW);
  }
}

Hızı değiştirmek için yalnızca waitMs değerini değiştirmeniz yeterlidir. Örneğin 50 daha hızlı, 200 ise daha yavaş bir efekt oluşturur.

06

Kodu Nasıl Okumalıyız?

Yeni başlayanlar için kısa açıklama.

setup()Kart açıldığında bir kez çalışır; pinleri OUTPUT olarak hazırlarız.
loop()Kart açık kaldığı sürece sürekli tekrar eder.
digitalWrite()Bir dijital pini HIGH veya LOW seviyesine getirir.
delay()Belirtilen milisaniye kadar programı bekletir.
DiziBenzer verileri tek değişken grubu altında saklamamızı sağlar.
for döngüsüAynı işlemi belirli sayıda kontrollü biçimde tekrarlar.
07

Sık Yapılan Hatalar

Devre çalışmıyorsa önce bunları kontrol edin.

  • LED'in anot ve katot yönlerinin ters bağlanması
  • LED'e seri direnç bağlanmaması
  • Koddaki pinlerle devrede kullanılan pinlerin farklı olması
  • Arduino IDE'de yanlış kart veya port seçilmesi
  • GND hattının ortak bağlanmaması
  • USB kablosunun yalnızca şarj kablosu olması
08

Mini Görevler

Öğrendiğin kodu değiştirerek dene.

  • Efekti iki kat daha hızlı çalıştır.
  • Beş yerine sekiz LED kullanacak şekilde kodu genişlet.
  • İki LED'in aynı anda hareket ettiği bir efekt tasarla.
  • Bir potansiyometre ile hız kontrolü eklemeyi dene.
09

Video

Mevcut uygulama videosu.

10

Resmî Kaynaklar

Konuyu daha ileri taşımak için.

Yorum Gönder

Daha yeni Daha eski