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.
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.
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.
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.
Ö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.
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.
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.
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);
}
}
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.
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.
Kodu Nasıl Okumalıyız?
Yeni başlayanlar için kısa açıklama.
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ı
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.
Video
Mevcut uygulama videosu.
Resmî Kaynaklar
Konuyu daha ileri taşımak için.