Arduino’da kendimi geliştirmek istiyorum. Bunun için de kod analizi üzerinde kafa yormaya karar verdim. Bunu da rastgele yapmak yerine, öncelikle bana lazım olan projeler üzerinden yapmak daha mantıklı geliyor. Sıfırdan açıklama beklentisi olan arkadaşlara önerim, ledin yanıp sönmesinden başlasınlar. Maalesef vakit sıkıntısından dolayı benim hızlı olmam gerekiyor.

Konuyu tamamlamak beklediğimden uzun sürecek. Bu yüzden birkaç güne yaymam gerekebilir.

 

Servo motor ile çizgi izleyen yapımı kodu:

Yukarıdaki kodu şuradan aldım: https://maker.pro/projects/arduino/make-line-follower-robot

Bu siteden diğer tüm kaynaklara ulaşabilmeniz mümkün. Gelelim kod analizine;

Çizgi İzleyen Kodu Analizi

Servo.h kütüphanesini kullanacağız. Bu kütüphaneyi neden kullandığımızı anlamak için kütüphaneyi incelemek lazım. Öncelikle google’da aratarak bu kütüphaneyi bulalım;

İşte şurada: https://github.com/esp8266/Arduino/blob/master/libraries/Servo/src/Servo.h

Kütüphane bize şu kolaylıkları sağlıyor:

devam edelim;

Arduino’da sınıf tanımlanması yapılmış. (class) . Bu sınıfa uygun left ve right (sol ve sağ) diye 2 nesne oluşturulmuş. (sol servo ve sağ servo)

Yukarıda mid(orta), mn (minimum) ve mx(maksimum) anlamında 3 değişken tanımlanmış. Başlangıç için bunlara sıfır değeri atanmış.

 void setup bir fonksiyondur ve yeni Arduino IDE lerinde siz yazmadan yeni sayafada karşınıza gelir. bu fonksiyon karta elektrik verdiğimizde sadece bir sefer çaılışır ve sırasını loop fonksiyonuna bırakır. Eğer reset butonuna basarsak yani gücü kesip geri verirsek tekrar çalışır. Sadece bir defa çalıştığı için adından da anlaşıldığı üzere kartın kurulum bilgilerini barındırır. Genelde seri bağlantı başlatılması, pinlerin nasıl çalışacağının belirlenmesi gibi sadece başta ve  bir defa yapılması gereken işlemler burada belirtilir. pinlere isim takma yada değişken belirleme işleri ise bu fonksiyon çalışmadan yapılır.”

Servo kütüphanesinde attach kullanımı şu şekildeydi:

left nesnesi 9 nolu pine bağlı, 800-2200 mikro saniye min,max değeri olarak verilmiş. Right ise 10. pine bağlı.  (sol taraftaki servonun bilgi ucu ve sağ taraftaki servonun bilgi ucundan bahsediyorum.)

Şeklinde de yazabilirdik. Bu sefer de min,max değerleri için default değerler geçerli olacaktı.

Serial monitöre yazı yazdıracağız anlamına geliyor. Seri iletişimi 115200 baudrate ile başlat demek.

devam ediyoruz:

Yukarıdaki kodda QTR sensörünün kalibrasyonunu yapmış. J aslında QTR ‘deki IR alıcı-verici sayısı. (6 tane). Bunu analogread yaptığına göre QTR 8A kullanmış. Sizde QTR 8C varsa siz digitalRead kullanmalısınız.

Artık tanımlama ve giriş kısmı bitti. Döngülere geçelim:

Burada neden (0) gibi ifadeler kullandığını anlamadım.

Yukarıdakinin çıktısı şöyle birşey olacak:

Mid: 300 120 340

Yukarıdaki kodda öncelikle çizgi izleyenin ileri gitmesi sağlanmış. Çünkü bir çizgi izleyen için ileri gitmek esastır. Sonrasında 1 msn’lik kısa bir gecikme konulmuş ve sonraki satırlarda da sensörlerden alınan değerler hesaplanara, if yapısı ile birlikte sola veya sağa dönmesi sağlanacak.

Yukarıdaki kodlarda if dallanması içinde, sağa dönmesi için gereken koşullar verilmiş. Ardından da sola dönmesi için gereken koşullar verilmiş. En sondaki if dallanması içinde de, hiçbir sensör çizgiyi algılamazsa robotun durması amaçlanmış.

Açıkçası çizgi izleyen robot yapımında servo motor kullanmak hiç iyi bir fikir değil.  Aracın yönlenmesini önden servolarla yapmak yerine, arka tekerleklerin diferansiyel sistemle kumanda edilmesi çok daha kullanışlı.

 

Buraya bir gecikme koymuş. 10 sn kadar. Sonrasında tekrar kod void loop’dan başlayacak. Sanırım araç çizgiden çıktıktan sonra, kişi tarafından tekrar yola konulması için 10 sn zaman tanınmış. Bunu neden sadece delay(10000) diyerek yapmamış acaba?

Buraya kadar.

Not: Bu analizi yapmamdaki amaç kod yazma mantığını bu şekilde daha iyi kavrayacağımı düşünmem. Yoksa bu konuda uzman olduğum gibi bir izlenim oluşturmak istemiyorum. Yanlış olduğunu düşündüğünüz yerler varsa, yorum kısmından bilgilendirme yaparsanız memnun olurum.