Merhaba arkadaşlar, bu uygulamamızda arduino ile hız ayarlı yürüyen led uygulaması yapacağız. Yürüyen led uygulaması, ledlerin sırayla yanıp söndüğü (karaşimşek) bir uygulamadır.
Malzeme Listesi
- Arduino
- Breadboard
- 6 Adet Led ( İstediğiniz renk kullanabilirsiniz.)
- 6 Adet 330 Ohm Direnç ( Turuncu-Turuncu-Kahverengi)
- Potansiyometre
- 16 Adet Erkek Erkek Jumper Kablo
Malzeme listesindeki malzemeleri kullanarak devremizi aşağıdaki şemaya uygun olarak kuralım. Devremizi kurarken ledlerin kutuplarına ve direnç değerlerimize dikkat etmeliyiz. Dirençler kutupsuz olduğu için ters veya düz takmanız fark etmeyecektir. Potansiyometrenin orta pinini A0 Pinine, sağ ve sol pinlerini ise gnd ve 5v pinlerine bağlıyoruz. Potansiyometre sayesinde hız ayarı yapabileceğiz.
Daha önce yaptığımız yürüyen ışık uygulamasına potansiyometre ekleyerek, ledlerin geçiş hızlarını bu potansiyometre ile kontrol edeceğiz. Potansiyometrenin orta pinini A0 analog girişe bağlayarak potansiyometredeki değerleri 0-1023 olarak okuyacağız.
Arduino ile Hız Ayarlı Yürüyen Led Uygulaması Kodları
İlk önce ledlerin pin numaralarını çıkış olarak tanımlayacağız. 6 adet ledimiz olduğu için bunları int Led1=2; int Led2=3; gibi tanımlayabiliriz ama daha kısa ve anlaşılır olması için ledler isminde bir dizi(liste) tanımlıyoruz ve bu diziye ledlerimizin pin numaralarını giriyoruz. Potansiyometreden okuduğumuz değeri saklamak için ise potDeger isminde int bir değişken oluşturuyoruz.
Setup fonksiyonunda bu ledleri çıkış olarak tanımlamamız gerektiği için for döngüsü ile bu tanımlama işlemini yapıyoruz. İ değişkenimiz 0 dan başlıyor ve 6 ya kadar gidiyor. Ama burada 6 dahil olmuyor. Dizimizin elemanlarına erişmek için ledler [indis] şeklinde kullanmalıyız.
Loop fonksiyonunda ise bu ledlere sırası ile enerji verip, bir süre bekleyip, enerjiyi kesmemiz gerekiyor. Potansiyometre değerimizi okumak için analogRead(A0); kodunu kullanıyoruz ve okuduğumuz değeri potDeger değişkenine atıyoruz. Daha sonra okuduğumuz değerin aralıklarını değiştirmek için map fonksiyonundan yardım alıyoruz. map (potDeger, 0, 1023, 50, 3000); burada ilk parametreye değerimizi saklayan değişkeni giriyoruz, ikinci parametreye değerimizin minimum, üçüncü parametreye değerimizin maksimum değerini giriyoruz. Dört ve beşinci parametreye ise yeni aralık değerlerimizi minimum ve maksimum değerlerini gireceğiz. Ben minimum 50ms, maksimum 3000ms (3sn) olarak ayarladım. Siz değiştirebilirsiniz. Bu fonksiyon ile kısaca okuduğumuz 0-1023 değerini 50-3000 aralığına denk gelecek şekilde değiştiriyoruz. Bu fonksiyondan döndürülen yeni değeri potDeger değişkenimize aktarıyoruz.
Daha sonra digitalWrite(ledPinleri[i],HIGH); kodu ile ledimize enerji veriyoruz. delay(potDeger); kodu ile okuduğumuz değer kadar bekliyoruz. Bekleme işlemi bittikten sonra ledimizi LOW ile kapatıyoruz, tekrar döngünün başa dönüyor ve böyle devam ediyor.
Burada neden potansiyometreden değer okuma ve map ile aralığını değiştirme kodlarını for döngüsünün içerisine yazdığımı anlatmak istiyorum. Eğer for dışında olsaydı değeri değiştirdiğimiz zaman hemen geçerli olmayacaktı. For döngüsünden çıkınca yani 1 kere ledler sıra ile yanınca yeni potansiyometre değerimize göre ledlerin yanma hızı geçerli olacaktır. For döngüsünün içinde değer okuma yaptığımız için sadece 1 led yanıp söndükten sonra yeni hız değerimiz geçerli olacaktır.
Örnek olarak potansiyometre değerimizi for döngüsünün dışında okusaydık ve o an potansiyometre 1023 yani map ile 3000 değerine sahip olacaktı. For döngümüz 6 led olduğu için 3×6= 18 sn sürecekti. Değeri o an değiştirsek bile geçerli olması için fordan çıkmasını bekleyecektik. For döngüsünün içinde okuduğumuz için 18 saniye yerine sadece 3 sn beklememiz gerekiyor.
int ledler[] = {2,3,4,5,6,7};
int potDeger;
void setup() {
for(int i=0;i<6;i++){
pinMode(ledler[i],OUTPUT);
}
}
void loop() {
for(int i=0;i<6;i++){
potDeger = analogRead(A0);
potDeger = map (potDeger, 0, 1023, 50, 3000);
digitalWrite(ledler[i],HIGH);
delay(potDeger);
digitalWrite(ledler[i],LOW);
}
}
Kodları yazdıktan sonra arduinomuzu bilgisayara bağlayıp yükleme işlemini yapabiliriz.