Çizgi takip sensörü test kodu.
Çigi takip eden robot kodu.
Sorular:
Koddaki speed değerini en düşük kaç yapabiliriz, kodu değiştirip deneyerek bulalım.
Daha keskin dönüşler yapmasını nasıl sağlayabiliriz? Yöntem1: Dönüşlerdeki speed değerini düşük tut. Yöntem2: Dönüşlerde dönüş miktarını azaltmak için daha düşük hızla ters yöne de dön.
Speed değerini arttırınca ne oluyor, kodu değiştirip deneyerek bulalım.
Robot hangi durumlarda siren sesi çıkarır?
Robotu beyaz çizgi takip eder hale nasıl getiririz?
Robot montajı, önemli not: Çizgi takip sensörlerinden çıkan kabloları dMoto kartına takarken sensörün VCC pinine takılı kablo dMoto 5V pinine, GND kablosu GND'ye, DO kablosu da A0/1/2 pinlerine takılmalı. Buna dikkat edilmezse sensör yanabilir:
Bir robot sensör, beyin (yazılım), güç kaynağı (pil) ve motorlardan oluşur. Bu dersimizde sensörlere giriş yapacağız.
Gece lambası: LDR ışık parlaklığını algılıyor. Işık azaldıkça LED parlaklığı artacak şekilde kodumuzu yazıyoruz. Not: LDR A6/A7, dMoto kartının üstüne ters yazılmış, A7 yazan yer aslında A6!
Mesafe ölçer: Bir cisim yaklaştıkça LED parlaklığı artacak. Çalışma prensibi: Sensör ses yayıp sesin yansımasını dinliyor. Yansıma geldiğinde ne kadar zaman geçtiğini hesaplıyor. Bu zamanı sesin hızı ile çarparsak sesin ne kadar yol gittiğini buluruz. Örneğin bir araba saatte 30km hızla yarım saat giderse 15km yol gider. Sesin havadaki hızı yaklaşık 340m/s (0.034cm/us), bir saniyede 340m gidiyor. Eğer sesin yansıma süresi 0.5 saniye olsa sesin gittiği toplam yol 170m olur. Sesin yansıdığı nesnenin uzaklığını bulmak için bu yolu ikiye bölmemiz gerekir, 170/2=85m cismin uzaklığı olur. Kod.
Soru: Mesafe sensörünü araba park sensörüne nasıl dönüştürebiliriz? LED'in parlaklığının yanında buzzer'dan ses çıkarmalıyız. Cisme yaklaştıkça buzzer sesi tizleşmeli. Daha önce yazdığımız buzzer koduna bakabiliriz.
Şu ana kadar buton/LED aç/kapa işlemlerini digitalRead/Write (HIGH, LOW) ile yaptık. Eğer LEDin parlaklığını ayarlamak gibi işlemler yapmak istersek analogRead/Write fonksiyonlarını kullanmamız gerekir. Digital/Analog read ile dış dünyada neler olduğunu (butona basılma, sıcaklık ölçme) anlar, write ile dış dünyada iş yapar (LEDi yakma, motoru çalıştırma). Robot yapmak isteyenin bu fonksiyonların nasıl çalıştığını anlaması önemli.
analogWrite(ledPin, brightness) --> LED pinine 245 değeri yazılır, LED parlaklığı azalır.
delay(30): Nano 30ms (0.03s) bekler
Bu şekilde loop tekrar eder ve brightness 0 olana kadar azalır.
Brightness = 0 olup loop'un başına dönülür.
Brightness = 0, change = -5.
brightness <= 0 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Increasing yazılır, change = 5 olur.
brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
brightness = brightness + change --> brightness = 0 + 5 = 5 olur. LED parlaklığı artar.
analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
delay(30): Nano 30ms (0.03s) bekler
Bundan sonrası adım 11 ile aynı. Nano'nun eletriği kesilinceye kadar LED parlaklığı artıp azalarak böyle sürer gider...
Sorular:
if (brightness <= 0) satırındaki "0" yerine "150" yazarsak ne olur?
delay(30) satırını silersek ne olur?
delay(200) yaparsak ne olur?
change değerini 1 yaparsak ne olur, 20 yaparsak ne olur?
Fade + pot. Kod. LED'e 0..255 arasında değer yollanır, analogRead() 0..1024 arasında değer okur, bu değeri LED'in aralığına çekmemiz gerekir. map(val, 0, 1023, 0, 255): 0..1023 arasındaki val değerini 0..255 arasında bir değere çevirir. Örneğin val 512 ise map() fonksiyonu 128 değerini döndürür.