Bir cümlelik özet
Bir robot, aynı üç adımı sürekli tekrar ederek çalışır: sensörle algılar, koşula bakarak karar verir ve motorlarla hareket eder — sonra baştan başlar.
Neden önemli?
Bir robotu bir masa oyuncağından ayıran şey, çevresini fark edip ona göre davranabilmesidir. Işıkları yanıp sönen bir kutu her zaman aynı şeyi yapar. Robot ise duvara yaklaştığında durur, çizgiyi görünce döner, engel kalkınca yeniden ilerler.
Bu davranışın arkasında tek bir fikir vardır: algıla–karar ver–hareket et döngüsü (İngilizcesi *sense–decide–act*). Robot bu üç adımı bir kez değil, saniyede belki yüzlerce kez tekrarlar. Döngü ne kadar hızlı ve düzenli dönerse robot çevreye o kadar akıcı tepki verir.
Bu ders, önceki modüllerde öğrendiğin iki fikri birleştirir. Algoritma modülünden koşul (eğer ... ise) ve tekrar (döngü) yapılarını hatırlıyorsun. Elektronik ve sensör modüllerinden bir mesafe sensörünün nasıl veri verdiğini biliyorsun. Robotik, bu parçaları tek bir çalışan sistemde bir araya getirmektir.
Döngünün üç adımı
Robotun beynindeki temel akış her zaman aynı sırayla ilerler. Her adımı ayrı ayrı tanıyalım.
1. Algıla (sensörü oku)
Robot önce bir soru sorar: "Şu an çevrede ne oluyor?" Cevabı sensörlerden gelir. Bu bir sayı olabilir: mesafe sensöründen gelen "18 santimetre", ışık sensöründen gelen bir parlaklık değeri ya da bir düğmenin basılı olup olmadığı bilgisi.
Bu adımda robot hiçbir karar vermez. Sadece bir ölçüm alır ve bir değişkende saklar. Tıpkı sen yola çıkmadan önce pencereden dışarı bakıp havayı gözlemlemen gibi.
2. Karar ver (koşula bak)
Robot elindeki ölçümü bir kuralla karşılaştırır. Burada algoritma modülünden bildiğin koşul devreye girer:
Eğer mesafe 15 santimetreden küçükse
"çok yakın" kararını ver
Değilse
"yol açık" kararını ver
Karar adımı ölçümü bir eyleme çevirir. Sensör "18" dediğinde robot bunun ne anlama geldiğini bilmez; anlamı veren, senin yazdığın koşuldur. Aynı ölçüm, farklı bir kuralda farklı karara yol açabilir.
3. Hareket et (motoru sür)
Karar verildikten sonra robot bir şey yapar: motorları ileri döndürür, durur, geri gider ya da yön değiştirir. Bir LED yakmak veya sesli uyarı vermek de birer harekettir.
Bu adımda önceki iki adımın sonucu fiziksel dünyaya yansır. Robotun tekerlekleri döner, çevre değişir — ve bir sonraki turda sensör bu yeni durumu tekrar ölçer.
Ve tekrar: döngü hiç durmaz
Üç adım bittiğinde robot baştan başlar. İşte bu yüzden buna döngü diyoruz. Robot kapatılana kadar algıla–karar–hareket sırası tekrar tekrar döner.
Sonsuza kadar tekrarla:
1. Sensörü oku
2. Koşula göre karar ver
3. Motoru sür
Algoritma dersinden hatırla: sonsuz döngü, bilerek kullanıldığında ve güvenli bir durdurma yöntemi (kapatma düğmesi) olduğunda uygundur. Robotlarda ana döngü genellikle bilerek sonsuzdur; robotu güç düğmesinden kapatarak durdururuz.
Somut örnekler
Örnek 1: Duvara çarpmayan robot
Bir robotun önünde mesafe sensörü var. Amaç basit: ilerle, ama bir engele çok yaklaşınca dur.
Önce sözde kodla mantığı yazalım:
Sonsuza kadar tekrarla:
mesafe = ön sensörü oku
Eğer mesafe 15 santimetreden küçükse
motorları durdur
kırmızı LED'i yak
Değilse
ileri git
Aynı mantığı kısa bir Arduino (C++) döngüsüyle yazabiliriz. Buradaki loop() fonksiyonu zaten tekrar tekrar çalışır — Arduino'nun kendi döngüsü, bizim algıla–karar–hareket turumuzdur:
void loop() {
int mesafe = mesafeOku(); // ALGILA: sensörden cm değeri
if (mesafe < 15) { // KARAR: engel yakın mı?
dur(); // HAREKET: motorları durdur
digitalWrite(LED, HIGH); // kırmızı uyarı
} else {
ileriGit(); // HAREKET: yola devam
digitalWrite(LED, LOW);
}
}
Dikkat et: mesafeOku, dur ve ileriGit bizim daha önce yazdığımız yardımcı fonksiyonlardır. Kodun okunması, sözde koddaki üç adımla birebir aynıdır. Dil değişse de mantık aynı kalır — tıpkı algoritma dersindeki tek/çift örneğinde olduğu gibi.
Örnek 2: Çizgi izleyen robot
Şimdi biraz daha akıllı bir davranış. Altında iki ışık sensörü olan bir robot, yerdeki siyah çizgiyi takip etsin. Sol sensör çizgiyi görürse robot fazla sola kaymış demektir; sağa düzeltmelidir.
Sonsuza kadar tekrarla:
sol = sol sensörü oku
sag = sağ sensörü oku
Eğer sol çizgiyi görüyorsa
sağa doğru düzelt
Değilse eğer sag çizgiyi görüyorsa
sola doğru düzelt
Değilse
düz ilerle
Burada aynı algıla–karar–hareket döngüsü var; sadece iki sensör okuyoruz ve kararda birden fazla koşul (değilse eğer) kullanıyoruz. Robot çizginin üstünde küçük düzeltmeler yaparak ilerler. Döngü çok hızlı döndüğü için gözümüze akıcı bir takip gibi görünür.
İki örnekte de yapı aynıdır: oku, karşılaştır, hareket et, tekrarla. Değişen tek şey hangi sensörü okuduğun ve koşulun ne olduğudur.
Mini uygulama
Kağıt üzerinde bir robot davranışı tasarla — kod yazmana gerek yok.
Görev: Bir robot, önündeki mesafe sensörüyle bir masanın kenarına kadar ilerlesin. Kenara 10 santimetre kalınca dursun ve mavi LED'i yaksın. Kenar temizlenirse (mesafe yeniden büyürse) tekrar ilerlesin.
Sözde kodu döngü olarak yaz. Şu üç adımın her turda göründüğünden emin ol:
- Algıla: hangi sensörü okuyorsun ve değeri nereye kaydediyorsun?
- Karar: koşulun ne? Hem "eğer" hem de "değilse" durumunu düşün.
- Hareket: her kararda motor ve LED ne yapıyor?
Bitince kendine sor: Robotu bir uçurumun kenarına koysam bu mantık güvenli mi? Yoksa mesafe sensörünü aşağı bakacak şekilde mi çevirmeliyim?
Sık yapılan hatalar
Döngüyü unutmak
Sensörü sadece bir kez okuyup gerisini tek seferlik yazmak. O zaman robot ilk ölçümde takılır ve çevre değişse bile tepki vermez. Üç adım her zaman bir döngü içinde olmalı.
Karar adımını atlamak
Sensörü okuyup doğrudan motoru sürmek, arada koşul olmadan. Bu durumda robot "algılar" ama "düşünmez" — ölçüm hiçbir işe yaramaz. Okuma ile hareket arasında mutlaka bir kural olmalı.
"Değilse" durumunu düşünmemek
"Eğer yakınsa dur" yazıp yolun açık olduğu durumu unutmak. O zaman robot bir kez durunca bir daha hareket edemez. İyi bir koşul her iki sonucu da ele alır.
Döngüyü bekletmeden çok hızlı döndürmek
Bazı sensörler ölçüm için kısa bir süreye ihtiyaç duyar. Döngü hiç beklemeden çok hızlı dönerse okumalar hatalı gelebilir. Genellikle her tura küçük bir bekleme (gecikme) eklenir.
Motoru mantıkla aynı güçten beslemeye çalışmak
Motorlar Arduino'nun kontrol pininden doğrudan beslenemez; çektikleri akım çok yüksektir. Bunun neden tehlikeli olduğunu güvenlik notunda açıklıyoruz.
Güvenlik notu
Hareket eden bir robot, ekrandaki bir programdan farklıdır — gerçekten çarpar, düşer ve sıkıştırır. Bu yüzden test ederken şunlara dikkat et:
- Güvenli bir alan aç. Robotu geniş, boş bir masada veya yerde test et. Kenara yakınsa düşebilir; önce yavaş hızda dene.
- Parmak, saç ve kabloları uzak tut. Dönen tekerlekler ve dişliler saçı veya kabloyu kolayca sıkıştırır. Robot çalışırken elini tekerleklere yaklaştırma.
- Motor sürücü ve ayrı pil kullan. Motorlar Arduino'nun kontrol pininden çok daha fazla akım çeker. Bu yüzden motorları bir motor sürücü (motor driver) üzerinden, ayrı bir düşük gerilimli pil takımıyla besleriz. Arduino ile pil takımının eksi uçları (GND) ortak bağlanmalıdır; yoksa sinyaller düzgün çalışmaz.
- Asla şebeke elektriği kullanma. Robot projelerinde yalnızca düşük gerilimli piller kullanılır. Prizden gelen elektrik tehlikelidir.
- Yetişkin gözetimi. Motor, pil ve kesici alet içeren her uygulamada bir yetişkinden yardım iste. İlk testi acil durumda robotu hemen kapatabileceğin şekilde yap.
Ders özeti
- Robotlar algıla–karar–hareket (*sense–decide–act*) döngüsünü sürekli tekrar ederek çalışır.
- Algıla adımında sensör okunur ve değer bir değişkende saklanır; henüz karar verilmez.
- Karar adımında ölçüm bir koşulla (
eğer ... ise) karşılaştırılır ve bir eyleme çevrilir. - Hareket adımında motorlar sürülür veya LED gibi çıkışlar değiştirilir; sonra döngü baştan başlar.
- Motorlar ayrı pil ve motor sürücüyle beslenmeli, ortak GND kullanılmalı ve robot güvenli bir alanda yavaş test edilmelidir.
Kontrol soruları
- Algıla–karar–hareket döngüsünün üç adımı nedir ve hangi sırayla çalışır?
- "Algıla" adımında robot bir karar verir mi? Bu adımda ne olur?
- Aşağıdaki sözde kodda karar adımını gösteren satır hangisidir?
mesafe = ön sensörü oku
Eğer mesafe 15'ten küçükse
dur
- Arduino'da robotun ana davranışını genellikle hangi fonksiyonun içine yazarız ve bu fonksiyon neden döngü için uygundur?
- Motorları neden Arduino'nun kontrol pininden değil, ayrı bir pil ve motor sürücüden besleriz?
Cevaplar
- Üç adım algıla, karar ver ve hareket et sırasıyla çalışır. Robot önce sensörü okur, sonra koşula bakarak karar verir, sonra motoru sürer — ve tekrar başa döner.
- Hayır, karar verilmez. "Algıla" adımında robot yalnızca sensörden bir ölçüm alır ve onu bir değişkende saklar. Kararı bir sonraki adım verir.
- Karar adımı
Eğer mesafe 15'ten küçüksesatırıdır. İlk satır algılama (okuma),durise harekettir. - Ana davranışı
loop()fonksiyonunun içine yazarız.loop(), Arduino tarafından robot açık olduğu sürece tekrar tekrar çağrılır; bu yüzden algıla–karar–hareket turu için doğal bir döngü sağlar. - Motorlar Arduino'nun kontrol pininin verebileceğinden çok daha fazla akım çeker. Bu akımı doğrudan pinden çekmek Arduino'ya zarar verir. Motor sürücü, ayrı pilden gelen gücü güvenli biçimde motorlara aktarır; Arduino yalnızca kontrol sinyali gönderir. İki devrenin ortak GND'ye bağlanması gerekir.
Kaynak ve doğrulama notu
“Algılama–Karar–Hareket Döngüsü” dersi için doğrulama odağı Döngünün üç adımı ile 2. Karar ver (koşula bak) arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Robot davranışı yalnız kodla açıklanamaz; mekanik yapı, güç sistemi, sensör konumu ve zemin koşulları birlikte değerlendirilmelidir. Test sonuçları aynı parkurda birkaç tekrar yapılarak kaydedilmelidir.
Sonraki ders
Şasi ve Mekanik Tasarım: Robotun gövdesini, tekerleklerini ve dişlilerini planlamak — sağlam ve dengeli bir robotun nasıl kurulduğu.