Arduino Ders 7: Potansiyometre ile Hız Ayarlı Led Kontrolü

Arduino Uygulaması

Kara Şimşek Devresi ve Potansiyometre ile Hız Kontrolü

Potansiyometre kullanarak kara şimşek devresindeki LED’lerin yanma hızını değiştirmeyi öğreneceğiz.

Arduino kara şimşek potansiyometre uygulaması

Arduino geliştirme kartında karaşimşek devresini anlatacağım. Kara şimşek devresine biraz değişiklik katalım dedik ve potansiyometre ile ışıkların yanma hızını değiştirdik.

  • Arduino Uno
  • 10K Potansiyometre
  • 7 adet LED
  • 7 adet direnç

Her LED için ayrı seri direnç kullanılmalıdır. LED’ler Arduino pinlerinden doğrudan yüksek akım çekmemelidir.

Potansiyometrenin orta bacağı Arduino’nun A0 analog girişine bağlanır. Diğer iki bacak 5V ve GND hatlarına bağlanır. LED’ler 4, 5, 6, 7, 8, 9 ve 10 numaralı dijital pinlere bağlanır.

Arduino kara şimşek potansiyometre devre şeması

Potansiyometreden analogRead() ile 0–1023 aralığında değer okunur. Bu değer map() fonksiyonu ile 30–1000 milisaniye aralığına çevrilir. Elde edilen süre, LED’lerin yanık kalma süresini belirler.

Potansiyometre çevrildikçe bekleme süresi değişir ve kara şimşek efektinin hızı artar veya azalır.

Aşağıdaki kod, verdiğin orijinal yapıyı korur. LED’ler 4’ten 10’a doğru yanar, ardından 9’dan 5’e doğru geri döner.

int led1=4;
int led2=5;
int led3=6;
int led4=7;
int led5=8;
int led6=9;
int led7=10;
int sure;
int pot=A0;


void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
}

void loop() {
sure=analogRead(pot);
sure=map(sure, 0, 1023, 30, 1000);
delay(10);
ledler(sure);

}

void ledler(int sure){
digitalWrite(led1,HIGH);
delay(sure);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(sure);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay(sure);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
delay(sure);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
delay(sure);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
delay(sure);
digitalWrite(led6,LOW);
digitalWrite(led7,HIGH);
delay(sure);
digitalWrite(led7,LOW);
digitalWrite(led6,HIGH);
delay(sure);
digitalWrite(led6,LOW);
digitalWrite(led5,HIGH);
delay(sure);
digitalWrite(led5,LOW);
digitalWrite(led4,HIGH);
delay(sure);
digitalWrite(led4,LOW);
digitalWrite(led3,HIGH);
delay(sure);
digitalWrite(led3,LOW);
digitalWrite(led2,HIGH);
delay(sure);
digitalWrite(led2,LOW);
}

Aynı işlemi daha kısa, okunabilir ve geliştirilebilir hale getirmek için LED pinlerini diziye alabiliriz. Bu yöntem, LED sayısını artırmak istediğinizde kodu daha kolay düzenlemenizi sağlar.

int ledler[] = {4, 5, 6, 7, 8, 9, 10};
int ledSayisi = 7;
int pot = A0;
int sure;

void setup() {
  for (int i = 0; i < ledSayisi; i++) {
    pinMode(ledler[i], OUTPUT);
  }
}

void loop() {
  sure = analogRead(pot);
  sure = map(sure, 0, 1023, 30, 1000);

  karaSimsek(sure);
}

void karaSimsek(int sure) {
  for (int i = 0; i < ledSayisi; i++) {
    digitalWrite(ledler[i], HIGH);
    delay(sure);
    digitalWrite(ledler[i], LOW);
  }

  for (int i = ledSayisi - 2; i > 0; i--) {
    digitalWrite(ledler[i], HIGH);
    delay(sure);
    digitalWrite(ledler[i], LOW);
  }
}

Bu versiyon aynı şablon içinde eklenmiş düzenlenmiş koddur. Orijinal kodun mantığı korunur; sadece tekrar eden satırlar döngü ile sadeleştirilir.

Yorum Gönder

Daha yeni Daha eski