Thursday, February 27, 2020

Robotik Ders 8 - Çizgi İzleyen Robot


Çizgi takip sensörü test kodu.
Çigi takip eden robot kodu.
Sorular:
  1. Koddaki speed değerini en düşük kaç yapabiliriz, kodu değiştirip deneyerek bulalım.
  2. 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.
  3. Speed değerini arttırınca ne oluyor, kodu değiştirip deneyerek bulalım.
  4. Robot hangi durumlarda siren sesi çıkarır?
  5. Robotu beyaz çizgi takip eder hale nasıl getiririz?

Wednesday, February 26, 2020

Robotik Ders 7 - Işık Takip Eden Robot

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:




Robotu birleştirdikten sonra yapılacak testler:



LDR test kodu.

Motor test kodu.

LDR ve motor test kodu (ışığa yönelen robot).

Sorular:
  1. Sağ ve sol LDR fener tutmadığımızda dahi neden farklı değerler okuyor?
  2. Koddaki if(valDiff > 80) koşulunu kaldırırsak ne olur?
  3. Robotu ışığı takip etmek yerine ışıktan kaçınır hale nasıl getiririz?

Wednesday, February 12, 2020

Robotik Ders 6 - Sensör

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.

Thursday, February 6, 2020

Robotik Ders 5 - Analog

Bu ders için gerekli parçalar:
  1. dMoto + Arduino Nano + Mini USB kablo
  2. Breadboard
  3. LED
  4. Potansiyometre
  5. 330R direnç
  6. Bir tane erkek-dişi jumper kablo
  7. Beş tane erkek-erkek jumper kablo

Ş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.
  • Digital: 0V = 0 (LOW), 5V = 1 (HIGH), 2V = 0 (LOW), 3V = 1 (HIGH)
  • Nanonun analog pinleriyle kullanılabilir (read: A0...A7, write: 3, 5, 6, 9, 10, 11).
Fade.
Kodun kağıt üstünde çalıştırılması:
  1. İlk başta brightness = 0, change = 5
  2. brightness <= 0 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Increasing yazılır, change = 5 olur.
  3. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  4. brightness = brightness + change --> brightness = 0 + 5 = 5 olur.
  5. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  6. delay(30): Nano 30ms (0.03s) bekler
  7. Loop'un başına dönülür. Şimdi brightness = 5, change = 5
  8. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  9. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  10. brightness = brightness + change --> brightness = 5 + 5 = 10 olur.  
  11. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  12. delay(30): Nano 30ms (0.03s) bekler
  13. Bu şekilde loop tekrar eder ve brightness 255 olana kadar artar.
  14. Brightness = 255 olup loop'un başına dönülür.
  15. Brightness = 255, change = 5.
  16. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  17. Brightness 255 olduğunda brightness >= 255 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Decreasing yazılır, change = -5 olur.
  18. brighness = brightness + change --> brightness = 255 + (-5) = 255 - 5 = 250 olur.
  19. analogWrite(ledPin, brightness) --> LED pinine 250 değeri yazılır, LED parlaklığı azalır.
  20. delay(30): Nano 30ms (0.03s) bekler
  21. Loop'un başına dönülür. Şimdi brightness = 250, change = -5
  22. brightness <= 0 yanlış olduğundan bu if bloğuna girilmez.
  23. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  24. brightness = brightness + change --> brightness = 250 + (-5) = 250 - 5 = 245 olur. 
  25. analogWrite(ledPin, brightness) --> LED pinine 245 değeri yazılır, LED parlaklığı azalır.
  26. delay(30): Nano 30ms (0.03s) bekler
  27. Bu şekilde loop tekrar eder ve brightness 0 olana kadar azalır.
  28. Brightness = 0 olup loop'un başına dönülür.
  29. Brightness = 0, change = -5.
  30. brightness <= 0 doğru olduğundan bu if bloğuna girilir, Serial Monitor'e Increasing yazılır, change = 5 olur.
  31. brightnes >= 255 yanlış olduğundan bu if bloğuna girilmez.
  32. brightness = brightness + change --> brightness = 0 + 5 = 5 olur. LED parlaklığı artar.
  33. analogWrite(ledPin, brightness) --> LED pinine 5 değeri yazılır, LED parlaklığı artar.
  34. delay(30): Nano 30ms (0.03s) bekler
  35. Bundan sonrası adım 11 ile aynı. Nano'nun eletriği kesilinceye kadar LED parlaklığı artıp azalarak böyle sürer gider...
Sorular:
  1. if (brightness <= 0) satırındaki "0" yerine "150" yazarsak ne olur?
  2. delay(30) satırını silersek ne olur? 
  3. delay(200) yaparsak ne olur?
  4. 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.