Ana Sayfa · Akademi · Robotik ve Kodlama · Robotik Sistemler · Proje: Engel Kaçan Robot

Proje: Engel Kaçan Robot

Mesafe sensörü, iki motor ve sürücüyle engelden kaçan otonom bir robot yap.

PROJE PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Bu projede ultrasonik sensör, iki motor ve bir motor sürücü kullanarak önündeki engeli fark eden, duran, dönen ve boş yöne ilerleyen küçük bir otonom robot kuruyoruz.

Üretilecek kanıt

Robotu tekerlekleri havada olacak şekilde tut ve gücü ver. Elini sensörün önüne getir: motorların yönü değişiyor mu? Değişmiyorsa önce burada test et. Basit bir test parkuru kur: yere iki karton kutuyu engel olarak koy, aralarında robotun geçebileceği kadar boşluk bırak. Robotu yere bırak ve düşük hızda çalıştır. Bir engele yaklaşınca durup dönüyor mu? Eşik…

Kontrol tuzağı

İlk denememde robot engele yaklaşınca durdu ama sonra yine ileri gidip çarptı. Beklenen davranış: dur, dön, sonra açık yöne git. Adım adım baktım: Beklenen: engelde dur -> dön -> yeni yönde ilerle Gerçek: engelde durdu -> hemen tekrar ileri gitti Sorun, don() fonksiyonundan sonra dönüş için yeterli süre vermememdi.…

Sonraki bağlantı

Proje: Çizgi İzleyen Robot

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre45–75 dk
Ön koşulArıza Analizi
İçerikProje rehberi · 1.667 kelime
Son güncelleme

Bir cümlelik özet

Bu projede ultrasonik sensör, iki motor ve bir motor sürücü kullanarak önündeki engeli fark eden, duran, dönen ve boş yöne ilerleyen küçük bir otonom robot kuruyoruz.

Neden önemli?

Şimdiye kadar sensörleri, motorları ve Arduino'yu ayrı ayrı öğrendik. Bu ders hepsini tek bir çalışan makinede birleştiriyor. Robot artık bir insan onu yönlendirmeden kendi kararını verir: "Önümde bir şey var mı? Varsa dur ve başka yöne bak."

Bu, otonom sistemlerin temel fikridir. Robot süpürgeler, park sensörlü arabalar ve depo robotları hep aynı üç adımı çalıştırır: algıla, karar ver, hareket et (sense–decide–act). Bu projeyi kurduğunda bu döngüyü kendi ellerinle görürsün. Bir sonraki adımda bu robotu çizgi izleyen bir robota çevirmek de kolaylaşır.

Robotun mantığı: algıla, karar ver, hareket et

Robotumuz sürekli tekrar eden basit bir döngü çalıştırır. Önce mesafeyi ölçer, sonra bir eşik değeriyle karşılaştırır, sonra motorlara komut verir.

Sözde kod

Kod yazmadan önce mantığı günlük dille yazalım. Bu, kafamızdaki planı netleştirir.

Sürekli tekrarla:
  mesafeyi ölç
  Eğer mesafe eşikten küçükse
    ileri gitmeyi durdur
    biraz geri git
    yön değiştir (dön)
  Değilse
    ileri git

Buradaki eşik (threshold), robotun "artık çok yakın" dediği sınır mesafedir. Biz başlangıçta 20 santimetre seçeceğiz. Çok küçük seçersen robot engele çarpmadan duramaz; çok büyük seçersen robot her şeyden kaçar ve hiç ilerleyemez.

İki örnek durum

Örnek 1 — Önü açık: Sensör 60 cm ölçüyor. 60, eşikten (20) büyük olduğu için robot düz ilerler.

Örnek 2 — Önünde duvar: Sensör 12 cm ölçüyor. 12, eşikten küçük olduğu için robot durur, biraz geri gider ve sağa döner. Sonra tekrar ölçer. Yeni yön açıksa ilerlemeye devam eder.

Malzeme ve bağlantı

Malzeme listesi

Neden ayrı bir motor sürücü ve ayrı pil?

Motorlar, Arduino pinlerinin verebileceğinden çok daha fazla akım çeker. Motoru doğrudan Arduino'ya bağlarsan kartı bozabilirsin. Bu yüzden araya motor sürücü (L298N) koyarız: Arduino sürücüye "ileri git" gibi zayıf bir sinyal verir, sürücü de ayrı pil yuvasından gelen gücü motora aktarır.

Önemli bir kural: Arduino ile pil yuvasının eksi uçları (GND) ortak bağlanmalıdır. Ortak toprak (common ground) olmazsa sürücü Arduino'nun sinyalini doğru okuyamaz.

Bağlantı özeti

Bağlantı özeti tablosu
ParçaBağlantı
HC-SR04 VCCArduino 5V
HC-SR04 GNDArduino GND
HC-SR04 TrigArduino pin 9
HC-SR04 EchoArduino pin 10
L298N IN1 / IN2Arduino pin 5 / 6 (sol motor)
L298N IN3 / IN4Arduino pin 7 / 8 (sağ motor)
L298N motor gücüAyrı pil yuvası (+)
Ortak GNDArduino GND + pil (−) birlikte

Arduino kodu (fonksiyonlara bölünmüş)

Kodu küçük parçalara ayırdık. Böylece her parçayı ayrı ayrı test edip anlayabiliriz.

1. Pinler ve kurulum

// Ultrasonik sensör pinleri
const int trig = 9;
const int echo = 10;

// Motor sürücü pinleri
const int in1 = 5, in2 = 6;   // sol motor
const int in3 = 7, in4 = 8;   // sağ motor

const int esik = 20;          // engel eşiği (cm)

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(in1, OUTPUT); pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);
}

2. Mesafeyi ölçen fonksiyon

// Sensörden cm cinsinden mesafe döndürür
long mesafeOlc() {
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  long sure = pulseIn(echo, HIGH);
  return sure * 0.034 / 2;   // sesin hızıyla mesafeye çevir
}

3. Hareket fonksiyonları

void ileri() {
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}
void dur() {
  digitalWrite(in1, LOW); digitalWrite(in2, LOW);
  digitalWrite(in3, LOW); digitalWrite(in4, LOW);
}
void don() {                 // yerinde sağa dön
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);  digitalWrite(in4, HIGH);
}

4. Ana döngü

void loop() {
  long mesafe = mesafeOlc();
  if (mesafe < esik) {       // engel yakın
    dur();
    delay(200);
    don();
    delay(400);              // kısa bir dönüş
  } else {
    ileri();                 // yol açık
  }
  delay(50);
}

Dikkat et: loop() içindeki mantık, en başta yazdığımız sözde kodla birebir aynı. Kod dili değişse de karar mantığı aynı kaldı.

Mini uygulama

  1. Robotu tekerlekleri havada olacak şekilde tut ve gücü ver. Elini sensörün önüne getir: motorların yönü değişiyor mu? Değişmiyorsa önce burada test et.
  2. Basit bir test parkuru kur: yere iki karton kutuyu engel olarak koy, aralarında robotun geçebileceği kadar boşluk bırak.
  3. Robotu yere bırak ve düşük hızda çalıştır. Bir engele yaklaşınca durup dönüyor mu?
  4. Eşik değerini kodda 20'den 30'a çıkar. Robot artık engellere daha erken mi tepki veriyor? Farkı gözlemle.

Bir hata ve düzeltmesi

İlk denememde robot engele yaklaşınca durdu ama sonra yine ileri gidip çarptı. Beklenen davranış: dur, dön, sonra açık yöne git.

Adım adım baktım:

Beklenen: engelde dur -> dön -> yeni yönde ilerle
Gerçek:   engelde durdu -> hemen tekrar ileri gitti

Sorun, don() fonksiyonundan sonra dönüş için yeterli süre vermememdi. delay(400) satırını unutmuştum, bu yüzden robot dönmeye başlar başlamaz döngü baştan çalışıp yeniden "ileri" komutu veriyordu. don() sonrasına delay(400) eklediğimde robot gerçekten yön değiştirip açık tarafa gitmeye başladı. Küçük bir eksik satır, bütün davranışı bozabiliyor.

Geliştirme fikirleri

Projeyi güçlendirme planı

Proje: Engel Kaçan Robot için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında belirli açı aralığında nesne taşıyan küçük robot kol bağlamını kullanarak algıla–karar ver–hareket et diyagramı, güvenli robot davranışı ve test parkuru kaydı oluştur. Dersin hedefi “Mesafe sensörü, iki motor ve sürücüyle engelden kaçan otonom bir robot yap” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.

1. Proje özeti ve kapsam

Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Robotun mantığı: algıla, karar ver, hareket et ile İki örnek durum arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.

2. Kabul ölçütleri

“Proje: Engel Kaçan Robot” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.

3. Test matrisi

3. Test matrisi tablosu
TestKoşulBeklenenGerçek sonuçSonraki karar
NormalStandart giriş ve tam bağlantıTemel görev tamamlanırTest sırasında doldurKoru veya küçük iyileştirme yap
SınırEn düşük ya da en yüksek kabul edilen değerSistem kararlı kalırTest sırasında doldurEşiği veya kuralı gözden geçir
HataEksik, yanlış ya da beklenmeyen girişGüvenli ve anlaşılır tepkiTest sırasında doldurHata yönetimi ekle
TekrarAynı koşulda en az üç denemeBenzer sonuçlarTest sırasında doldurTutarsızlığın kaynağını araştır

4. Sürüm günlüğü

“Proje: Engel Kaçan Robot” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Robotun mantığı: algıla, karar ver, hareket et veya İki örnek durum ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.

5. Sunum ve öz değerlendirme

“Proje: Engel Kaçan Robot” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, belirli açı aralığında nesne taşıyan küçük robot kol için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.

Sık yapılan hatalar

Ortak toprağı unutmak

Arduino ve pil yuvasının GND uçları birbirine bağlı değilse motorlar hiç dönmez veya rastgele davranır. En sık yapılan hata budur.

Motoru doğrudan Arduino'ya bağlamak

Arduino pinleri motoru çeviremez ve zorlanınca bozulur. Motor her zaman sürücü üzerinden ve ayrı pilden beslenmelidir.

Eşik değerini yanlış seçmek

Çok küçük eşikte robot durmadan çarpar; çok büyük eşikte her şeyden kaçar. 15–25 cm arası iyi bir başlangıçtır.

Tekerlekleri havadayken test etmemek

Kodu doğrudan yerde denemek, robot masadan düşerse zarar verir. Önce tekerlekler havadayken sinyalleri kontrol et.

Güvenlik notu

Hareket eden bir robot ısırabilir, düşebilir veya bir şeye çarpabilir. Uygulamadan önce şunlara dikkat et:

Ders özeti

Kontrol soruları

  1. Robotun tekrar tekrar çalıştırdığı üç temel adım nedir?
  2. "Eşik değeri" ne işe yarar ve çok küçük seçilirse ne olur?
  3. Motoru neden doğrudan Arduino'ya değil de bir motor sürücüye bağlarız?
  4. Ortak toprak (common ground) bağlanmazsa ne olabilir?
  5. İlk testi neden robot tekerlekleri havadayken yapmak iyi bir fikirdir?

Cevaplar

  1. Algıla (mesafeyi ölç), karar ver (eşikle karşılaştır) ve hareket et (motorlara komut ver).
  2. Eşik, robotun "engel çok yakın" saydığı sınır mesafedir. Çok küçük seçilirse robot durmaya vakit bulamadan çarpar.
  3. Motorlar Arduino pinlerinin verebileceğinden çok daha fazla akım çeker; doğrudan bağlamak kartı bozar. Sürücü, ayrı pilden gelen gücü motora aktarır.
  4. Sürücü, Arduino'nun sinyalini doğru okuyamaz; motorlar hiç dönmez veya rastgele davranır.
  5. Tekerlekler havadayken robot düşmez veya kaçmaz; sinyalleri ve motor yönlerini güvenle kontrol edebilirsin.

Kaynak ve doğrulama notu

“Proje: Engel Kaçan Robot” dersi için doğrulama odağı Robotun mantığı: algıla, karar ver, hareket et ile İki örnek durum 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

Proje: Çizgi İzleyen Robot

Quiz’i BaşlatRobotik Sistemler bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.