Arduino ile KARA ŞİMŞEK
Güncelleme 20/03/2020
Kara Şimşek (İngilizce adı: Knight Rider), 1982-1986 yılları arasında ABD’de yayınlanan ve Türkiye dahil Dünya’nın birçok ülkesinde de yayınlanarak popüler olmuş televizyon dizisi. TRT tek kanallıyken ekrana gelen dizi 90 bölüm sürmüştür. Dizide kendi kendine hareket edebilen, konuşabilen yapay zekalı otomobil KITT ile sahibi Michael Knight’ın başından geçen olaylar işlenmektedir.Bu otomobilin ön tarafında farların arasında ileri-geri sürekli olarak hareket eden ışıklar bulunmaktaydı. Bu uygulamada 8 tane LED kullanarak KITT’in ışıklarının küçük bir modelini yapacağız.
Kara şimşek uygulamasını yapmak için 8 tane LED’i 220R dirençlerle birlikte Arduinonun 2, 3, 4, 5, 6, 7, 8, 9 nolu pinlerine bağladık.Yazdığımız Arduino programı sayesinde LED’lerin sırayla kayarak yanması, ileri-geri hareket etmesi sağlanacaktır.
Devre Şeması:
Arduino Programı:
/* "KARA ŞİMŞEK" Arduinonun 2,3,4,5,6,7,8,9 nolu pinlerine bağlı LED'leri sırayla kaydırarak yakan, ileri-geri hareket ettiren program. diyot.net */ const int LED1= 2; //LED bağlı pinleri isimlendir. const int LED2= 3; const int LED3= 4; const int LED4= 5; const int LED5= 6; const int LED6= 7; const int LED7= 8; const int LED8= 9; void setup () { pinMode(LED1, OUTPUT); //LED bağlı pinleri çıkış yap. pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); } void loop() { digitalWrite(LED1,HIGH); //LED1'i 40msn yak,40msn söndür. delay(40); digitalWrite(LED1,LOW); delay(40); digitalWrite(LED2,HIGH); //LED2'yi 40msn yak,40msn söndür. delay(40); digitalWrite(LED2,LOW); delay(40); digitalWrite(LED3,HIGH); //LED3'ü 40msn yak,40msn söndür. delay(40); digitalWrite(LED3,LOW); delay(40); digitalWrite(LED4,HIGH); //LED4'ü 40msn yak,40msn söndür. delay(40); digitalWrite(LED4,LOW); delay(40); digitalWrite(LED5,HIGH); //LED5'i 40msn yak,40msn söndür. delay(40); digitalWrite(LED5,LOW); delay(40); digitalWrite(LED6,HIGH); //LED6'yı 40msn yak,40msn söndür. delay(40); digitalWrite(LED6,LOW); delay(40); digitalWrite(LED7,HIGH); //LED7'yi 40msn yak,40msn söndür. delay(40); digitalWrite(LED7,LOW); delay(40); digitalWrite(LED8,HIGH); //LED8'i 40msn yak,40msn söndür. delay(40); digitalWrite(LED8,LOW); delay(40); digitalWrite(LED7,HIGH); // Geriye doğru LED'leri yak-söndür. delay(40); digitalWrite(LED7,LOW); delay(40); digitalWrite(LED6,HIGH); delay(40); digitalWrite(LED6,LOW); delay(40); digitalWrite(LED5,HIGH); delay(40); digitalWrite(LED5,LOW); delay(40); digitalWrite(LED4,HIGH); delay(40); digitalWrite(LED4,LOW); delay(40); digitalWrite(LED3,HIGH); delay(40); digitalWrite(LED3,LOW); delay(40); digitalWrite(LED2,HIGH); delay(40); digitalWrite(LED2,LOW); delay(40); digitalWrite(LED1,HIGH); delay(40); digitalWrite(LED1,LOW); delay(40); }
Arduino programında en başta const int yazarak Arduinonun LED bağladığımız pinlerine LED1, LED2, LED3, LED4, LED5, LED6, LED7 isimlerini verdik. Veri tipi const int yazıldığında yazılan ifadenin karşılık geldiği değer sabit olur asla değişmez. Sadece int yazılırsa ileride bu değeri değiştirebiliriz. LED bağladığımız pinleri değiştirmeyeceğimiz için const int veri tipini kullandık.
void setup() kısmında LED bağlı olan pinleri pinMode komutuyla çıkış olarak ayarladık.
void loop() kısmında LED bağlı pinlere sırayla digitalWrite komutuyla enerji verdik, delay komutuyla 40msn bekleme yaptık, tekrar digitalWrite komutuyla enerjisini kestik, delay komutuyla 40msn daha bekleme yaptık. Böylece LED1’den LED8’e kadar LED’lerin sırayla kayarak yanmasını sağladık. Sonra geriye doğru (LED8’den LED1’e doğru) aynı işlemleri tekrarladık. void loop() kısmında yapılan işlemler sürekli olarak tekrarlandığından dolayı 8 LED ile KITT’in ışıklarının küçük bir modelini yapmış olduk.
Yazdığımız Arduino programında “dizi” kullanarak komut sayısını azaltabiliriz. Arduinoya aynı işlemi daha kısa bir programla şöyle yaptırabiliriz.
Arduino Programı:
/* "KARA ŞİMŞEK" Arduinonun 2,3,4,5,6,7,8,9 nolu pinlerine bağlı LED'leri sırayla kaydırarak yakan, ileri-geri hareket ettiren program. diyot.net */ const int LEDler[] = {2,3,4,5,6,7,8,9}; /* LEDler adında bir dizi oluşturduk. Bu sayede her pini ayrı ayrı yazmaya gerek kalmaz */ void setup () { for(int i=0; i<8 ;i++) { /* LED bağlı pinleri çıkış olarak ayarlamak için tek tek yazmak yerine for döngüsü kullandık */ pinMode(LEDler[i], OUTPUT); } } void loop() { // LED'leri sırayla 40 milisaniye yak-söndür. for(int i=0; i<8; i++){ digitalWrite(LEDler[i],HIGH); delay(40); digitalWrite(LEDler[i],LOW); } // LED'leri diğer yönde sırayla 40 msn yak-söndür. for(int j=7;j>-1; j--){ digitalWrite(LEDler[j],HIGH); delay(40); digitalWrite(LEDler[j], LOW); } }
Bu programda LED bağlı pinler bir dizi içine kaydedilerek sırayla pinlere enerji gönderilir.
Dizi kullanılmazsa void setup() kısmında pinleri çıkış olarak ayarlarken 8 tane pinMode komutu yazmak gerekiyordu ve void loop() kısmında her bir LED’i hem yakmak için hem de söndürmek için ayrı ayrı digitalWrite komutunu yazmak gerekiyordu. Bir de bekleme yapmak için delay komutları yazılması gerekiyordu. Bu komut kalabalığından kurtulmak için dizi kullanılabilir. Tercih sizin 🙂
Programda en başta LEDler adında bir dizi oluşturduk.
void setup() kısmında for döngüsü ile dizi içindeki pinleri tek bir pinMode komutuyla çıkış olarak ayarladık.
void loop() kısmında birinci for döngüsü ile dizi içindeki pinlere sırayla 2.pinden 9.pine kadar 40msn enerji verip enerjilerini kestik. İkinci for döngüsüyle dizi içindeki pinlere diğer yönde 9.pinden 2.pine kadar 40msn enerji verip enerjilerini kestik. Bu işlemler void loop() kısmında yapıldığından dolayı bir döngü içinde sürekli olarak tekrarlanır.