Blocks ile sür: robotun ilk hareketi
Şimdiye kadar robotunu kurdun ve kablolarını bağladın. Ama robot hala kıpırdamadı. Bu ders o anın dersi: bu sayfanın sonunda robotun ilk kez kendi başına ileri gidecek, dönecek, senin verdiğin komutla hareket edecek. Üstelik tek satır yazı yazmadan. Her şeyi renkli blokları sürükleyip birbirine takarak yapacaksın.
Blocks, komutların hazır tuğlalar halinde durduğu bir ortam. Sen bu tuğlaları lego gibi üst üste dizersin, robot da o sırayla çalışır. Yanlış yazım, unutulan noktalı virgül yok; sadece doğru tuğlayı doğru yere takma işi var.
- İki motoru bloklarla tanımlamak ve robota "sol motor şurada, sağ motor şurada" demek.
- Kumandanın çubuk hareketini motora bağlayıp robotu ilk kez sürmek.
- Askıdayken yönü kontrol edip sonra güvenle yere indirmek.
- Arcade ve tank sürüşü değiştirip aralarındaki farkı kendi elinle görmek.
Kanca: yazı robotu nasıl canlandırır? (10 dk)
Videodaki robot dün senin robotunun tıpkısıydı: kurulu ama sessiz. Şimdi hareket ediyor. Aradaki tek fark birinin ona "ne yapacağını" söylemiş olması.
Bir düşün: robotun içinde motor var, motorun sürücüsü var, pil var. Hepsi hazır. Peki motor kendi başına neden dönmüyor? Çünkü hiçbiri ne zaman, ne kadar, ne yöne döneceğini bilmiyor. Bu kararı veren şey program: robota adım adım ne yapacağını söyleyen komut dizisi.
Bugün o komutları sen vereceksin. Ama önce kısa bir tahmin: senin robotunun iki motoru var, biri solda biri sağda. Robotun ileri gitmesi için iki motor nasıl dönmeli? Ya sadece sağa dönmesini istersen? Cevabı aklında tut; birazdan bloklarla test edeceğiz.
Kur ve sür: robotu ilk kez hareket ettir (20 dk)
Bilgisayarında Blocks ortamını aç. Karşında blokların durduğu bir kutu (araç kutusu) ve blokları dizeceğin boş bir çalışma alanı var.
1. İki motoru tanımla
Robotun sol ve sağ motorunun hangi pinlere bağlı olduğunu Modül 02'nin elektronik dersinden biliyorsun: sol motor 16 ve 17, sağ motor 18 ve 19. Robota bunu söylemen gerekiyor.
Araç kutusundan motor_define bloğunu al ve çalışma alanına bırak. Bu blok tek bir motora isim ve pin verir. İçine motorun adını (sol) ve iki pin numarasını (16, 17) yaz.
Sonra bir motor_define bloğu daha al: bu sefer sag, 18, 19.
Artık robot iki motorunu tanıyor. Ama henüz onlara ne yapacaklarını söylemedin.
2. Sürüş bloğunu sürüş döngüsüne koy
Robotun kumandayı sürekli dinlemesi lazım: çubuğu her ittiğinde tepki vermeli. Bunun için teleop_loop bloğunu bul. Bu blok saniyede yaklaşık elli kez tekrar tekrar çalışır; içine ne koyarsan robot onu durmadan yapar. (Teleop, robotu kumandayla sürdüğün mod demek.)
teleop_loop'un içine araç kutusundan drive_arcade bloğunu sürükle. Bu hazır blok senin yerine düşünür: ona "ne kadar ileri" ve "ne kadar dön" dersen, sol ve sağ motora gitmesi gereken hızı kendi hesaplar. Az önce kafanda kurduğun "ileri giderken iki motor birlikte, dönerken biri fazla" mantığını bu blok içinde taşıyor.
drive_arcade bloğunun iki boşluğu var: ileri/geri ve dönüş. Bunları kumandanın çubuklarına bağlayacaksın.
3. Joystick eksenlerini tak
Araç kutusunun joystick bölümünden eksen bloklarını al. Kumandanın her çubuğu iki yönde okunur ve sana -1 ile +1 arası bir sayı verir: çubuğu tam ittiğinde +1, tam çektiğinde -1, ortadayken 0.
- Sol çubuk dikey eksenini drive_arcade'in ileri/geri boşluğuna tak.
- Sağ çubuk yatay eksenini drive_arcade'in dönüş boşluğuna tak.
Blokların tamamı şöyle bir hikaye anlatıyor: "Sol ve sağ motor şu pinlerde. Sürüş boyunca sürekli: sol çubuğun dikeyini ileri, sağ çubuğun yatayını dönüş olarak al ve arcade sürüşü uygula."
4. Robota gönder ve bağlan
Bloklarını robota yükle. Şimdi robotla kumandan arasında köprü kuracaksın:
- Robotu çalıştır. Robot kendi WiFi ağını açar (kablosuz bağlantı noktası; adı bloklarda ya da kurulumda verilir).
- Telefonunu bu ağa bağla.
- Telefonun tarayıcısına
http://192.168.4.1yaz. Başında https değil, http olacak. Karşına Driver Station çıkar: robotu yönettiğin kontrol paneli. - Kumandayı telefona bağla ve bir tuşuna bas. Tarayıcı kumandayı ancak bir tuşa basınca tanır.
- Driver Station'da Init'e, sonra Start'a bas.
Yön yanlışsa robot masadan kaçmasın.
5. Önce askıda, sonra yerde
Robot yükseltideyken sol çubuğu yavaşça ileri it. Tekerler ileri yönde dönmeli. Şimdi az önceki tahminini test et: sağ çubuğu yana it, robot dönmeye çalışmalı (tekerler ters yönlerde dönerek).
Bir teker ters yönde dönüyorsa panik yok. O motorun motor_define bloğundaki iki pini yer değiştir: 16 ve 17 yazan yeri 17 ve 16 yap. Kablo sökmeden, sadece bloktaki iki sayının yerini değiştirerek motorun yönünü düzeltmiş olursun. Yükle ve tekrar dene.
Yön doğruysa robotu yükseltiden indir, açık bir yere koy ve sol çubuğu nazikçe ileri it.
İşte bu. Robotun ilk kez kendi tekerleriyle yol aldı ve bunu sen yazdın.
Ne yaptın: blokların adı ve işi (7 dk)
Robot artık gidiyor; şimdi az önce dizdiğin şeyin adını koyalım. Kavramı sona bıraktık çünkü artık her birinin ne yaptığını gözünle gördün.
| Blok | Ne işe yarar |
|---|---|
| motor_define | Bir motora isim verir ve hangi pinlere bağlı olduğunu robota söyler. Pin sırası motorun dönüş yönünü belirler. |
| teleop_loop | Sürüş boyunca saniyede ~50 kez tekrarlanan döngü. Kumandanın anlık dinlendiği yer. |
| drive_arcade | Hazır sürüş bloğu. "İleri" ve "dönüş" ister; sol ve sağ motor hızını kendi hesaplar. |
| joystick eksen | Bir çubuğun bir yöndeki konumunu -1 ile +1 arası sayıya çevirir. |
Dikkat et: sen motora "255 hızında dön" gibi bir sayı vermedin. drive_arcade bloğuna sadece "çubuk ne diyorsa o kadar" dedin. Çubuk yarıya kadar itiliyse motor da yarı güçte döner. Bu yüzden sürüş yumuşak: robot çubuğu ne kadar iterse o kadar hızlanır.
teleop_loop neden döngü? Çünkü kumanda sürekli değişir. Çubuğu bir ileri bir geri oynatıyorsun. Robot bunu yakalamak için çubuğu durmadan, saniyede onlarca kez okumak zorunda. Döngü olmasaydı robot çubuğu bir kez okur, sonra sağır kalırdı.
Değiştir ve karşılaştır (15 dk)
Robot sürüyor; şimdi sürüşün karakterini değiştireceksin. Her denemeden sonra yükle, yükseltide kontrol et, sonra yerde dene.
Deneme 1: Arcade yerine tank.
drive_arcade bloğunu çıkar, yerine drive_tank bloğunu koy. Bu blok farklı düşünür: iki çubuğun her biri kendi tarafındaki motoru sürer. Sol çubuk sol tekeri, sağ çubuk sağ tekeri.
- drive_tank'ın sol girişine sol çubuğun dikey eksenini,
- sağ girişine sağ çubuğun dikey eksenini tak.
Sür ve hisset: iki çubuğu birlikte ileri itince robot düz gider. Sadece sol çubuğu itince robot sağa kıvrılır. Bir ekskavatör ya da tank böyle sürülür.
Şimdi kendine sor: Arcade mı tank mı sana daha doğal geldi? Doğru cevap yok. Arcade tek çubukla sürmek isteyene kolay gelir; tank her tekeri ayrı yönetmek isteyene. Yarışmalarda ikisini de kullanan takımlar var.
Deneme 2: Hızı sınırla.
Robot senin için fazla hızlıysa yavaşlatabilirsin. drive bloğunun bir eksen girişine, doğrudan eksen bloğu yerine bir matematik çarpma bloğu koy: eksen bloğunu 0.5 ile çarp.
Artık çubuğu tam itsen bile robot en fazla yarı hızda gider. Neden işe yaradı? Çünkü çubuk +1 verse bile 0.5 ile çarpınca motora 0.5 gidiyor. 0.3 yaparsan daha da yavaş, 0.8 yaparsan biraz hızlı. Kalabalık bir odada 0.4, geniş bir alanda 1.0 mantıklı. Bu senin robotunun "sürüş modu" ayarı.
Pekiştirme ve kontrol (6 dk)
Kendini yokla. Cevapları yüksek sesle söyle ya da yanındakine anlat:
- İki motor_define bloğu olmasaydı robot ne yapardı?
- drive_arcade ile drive_tank arasındaki fark nedir? Hangi çubuk neyi sürer?
- Bir tekerin ters döndüğünü fark ettin. Kablo sökmeden nasıl düzeltirsin?
- Robotu yavaşlatmak için eksen bloğunu kaçla çarpardın?
Günlük hayat bağı: Arcade sürüş aslında oyun kollarının çoğunda var: bir çubuk seni ileri/geri, bir çubuk sağa/sola döndürür. Bir vinç operatörü ya da bir insansı robotu uzaktan yöneten mühendis de tam olarak senin bugün kurduğun mantığı kullanır. Sen kumandanın ham sayısını alıp iki motora paylaştırdın; bu, uzaktan kumandalı her aracın kalbindeki fikir.
Erken bitirene ek görev
Hızlı bitirdiysen boş durma, bunları dene:
- Turbo yerine kaplumbağa. Hız çarpanını
0.3yap ve robotu dar bir parkurdan (kitaplarla kur) çarpmadan geçirmeye çalış. Sonra çarpanı1.0yapıp aynı parkuru dene. Hangisinde daha kontrollüsün? - Zıt tank. drive_tank kullanırken bir çubuğun eksenini
-1ile çarp. Robot şimdi nasıl davranıyor? Neden böyle olduğunu açıkla. - Kör sürüş yarışı. Bir arkadaşın robotun önüne otursun ve sana sadece "sağ, sol, düz" desin; sen ekrana değil sadece onun sesine göre sür. İyi bir sürücü robotun tepkisini önceden tahmin eder.