Ana Sayfa · Akademi · Robotik ve Kodlama · Robotik Sistemler · Proje: Çizgi İzleyen Robot

Proje: Çizgi İzleyen Robot

İki çizgi sensörü, iki motor ve sürücüyle bir çizgiyi takip eden bir robot yap.

PROJE PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Bu projede iki çizgi sensörü, iki motor ve bir motor sürücüsü kullanarak yerdeki bir çizgiyi kendi başına takip eden gerçek bir robot kuruyorum; sensörlerin sol–sağ okumasına göre motor hızlarını ayarlıyorum.

Üretilecek kanıt

Robotu kendi fikrinle geliştir. Şunlardan birini dene: HIZLI ve YAVAS değerlerini değiştirip robotu daha yumuşak mı yoksa daha keskin mi döndürdüğünü gözlemle. Yukarıdaki "kayıp durum" mantığını gerçek koda ekle: son dönüş yönünü bir değişkende tut ve çizgi kaybolunca o yöne ara. Parkura bir kavşak ekle ve robotun kavşakta ne yaptığını not al; istersen…

Kontrol tuzağı

Önce robotu tekerlekleri havada, elinde tutarak dene. Sonra siyah bant veya kalın kalemle beyaz bir kâğıda basit bir parkur çiz: düz bir çizgi, sonra yumuşak bir viraj. # Test Beklenen sonuç 1 Düz çizgi üzerine koy Robot düz ilerler 2 Robotu hafif sağa kaydır Sol sensör çizgiyi görür, sola düzeltir 3 Yumuşak virajı…

Sonraki bağlantı

Veri ve Yapay Zekâya Giriş modülü: Robotların topladığı sensör verilerini toplamayı, anlamayı ve bir bilgisayarın bu verilerden nasıl "öğrendiğini" keşfetmeye başlıyoruz.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre45–75 dk
Ön koşulProje: Engel Kaçan Robot
İçerikProje rehberi · 1.673 kelime
Son güncelleme

Bir cümlelik özet

Bu projede iki çizgi sensörü, iki motor ve bir motor sürücüsü kullanarak yerdeki bir çizgiyi kendi başına takip eden gerçek bir robot kuruyorum; sensörlerin sol–sağ okumasına göre motor hızlarını ayarlıyorum.

Neden önemli?

Önceki projede robot bir engeli görüp ondan kaçıyordu. Şimdi işi tersine çeviriyoruz: robot bir şeyden kaçmayacak, çizilmiş bir yolu takip edecek. Bu, aynı "algıla–karar ver–uygula" döngüsünün bir başka yüzüdür.

Çizgi izleme, robotik dünyasının en klasik projesidir. Ama sadece yarışmalarda değil: depolarda raflar arasında dolaşan taşıma araçları ve fabrika bantları da yerdeki işaretleri benzer mantıkla izler. Küçük bir robotta çalışan fikir, büyük sistemlerde de aynıdır.

Bu proje modülün özünü tek bir cihazda birleştirir. Sensörler çizgiyi algılar, program bir koşulla karar verir, motorlar bu kararı harekete çevirir. Elektronik, kod ve mekanik burada aynı anda çalışır. Ben ilk kurduğumda robot düz bir çizgide bile sağa kaçıyordu; nedenini bulup düzeltmek projenin en öğretici kısmıydı.

Malzeme, bağlantı ve güç

Malzeme listesi

Basit bir çizgi izleyen robot için gerekenler:

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

Motorlar, Arduino'nun pinlerinden çok daha fazla akım çeker. Motoru doğrudan bir Arduino pinine bağlarsan pin zarar görür, hatta kart bozulur. Bu yüzden araya bir motor sürücü koyarız: Arduino sürücüye "şu hızda dön" diye küçük bir sinyal gönderir, gücü ise sürücü ayrı pilden çeker.

Bir kapı zilini düşün: parmağınla küçük bir düğmeye basarsın ama sesi çıkaran güç duvardaki hattan gelir. Motor sürücü de böyle bir aracıdır.

İki kural çok önemlidir:

Asla şebeke (priz) elektriği kullanma. Bu proje yalnız düşük gerilimli pillerle yapılır.

Sensörleri kalibre et

Kod yazmadan önce sensörlerin gerçekte ne söylediğini ölçmeliyiz. Kalibrasyon, "sensör hangi durumda 1, hangi durumda 0 veriyor?" sorusunun cevabıdır.

Serial ile oku

Küçük bir test koduyla sensör değerlerini ekrana yazdır:

const int SOL_SENSOR = 2;
const int SAG_SENSOR = 3;

void setup() {
  Serial.begin(9600);
  pinMode(SOL_SENSOR, INPUT);
  pinMode(SAG_SENSOR, INPUT);
}

void loop() {
  Serial.print(digitalRead(SOL_SENSOR));
  Serial.print("  ");
  Serial.println(digitalRead(SAG_SENSOR));
  delay(200);
}

Sensörü siyah çizginin üzerine, sonra beyaz zemine tut. Değerlerin nasıl değiştiğini not al. Bazı modüllerde çizgi 1, bazılarında 0 verir. Bu projede "çizgi = 1" kabul ediyoruz; senin modülün tersse kodda karşılaştırmaları değiştirmen yeter.

Sensör yüksekliği ve konumu

Sensörler zemine çok yakın (yaklaşık 3–8 mm) ve çizginin iki yanına bakacak şekilde takılır. Çok yüksekte olurlarsa çizgiyi ayırt edemez, çok alçakta olurlarsa yere sürter. Modüldeki küçük ayar vidasıyla (varsa) eşiği, siyah ile beyaz net ayrılana kadar ayarla.

Robotu programla

Robotun iki tekerleği ayrı motorlarla döner. Direksiyon yoktur; dönmek için iki tekerleği farklı hızlarda sürersin. Buna diferansiyel sürüş denir.

Sözde kod

Sürekli tekrarla
  sol = sol sensörü oku
  sağ = sağ sensörü oku

  Eğer sol beyaz ve sağ beyaz ise
    iki motoru da hızlı sür        (düz git)
  Değilse eğer sol çizgi ve sağ beyaz ise
    sol motoru yavaşlat            (sola dön)
  Değilse eğer sol beyaz ve sağ çizgi ise
    sağ motoru yavaşlat            (sağa dön)
  Değilse
    kavşak veya kayıp durumunu ele al

Mantık ilk bakışta ters gelebilir: sol sensör çizgiyi görüyorsa sola döneriz. Çünkü sol sensör çizgiye değdiyse robot sağa kaymış demektir; ortaya dönmek için sola çekmemiz gerekir.

Örnek 1: Pinler ve kurulum

const int SOL_SENSOR = 2;   // sol IR sensör
const int SAG_SENSOR = 3;   // sağ IR sensör
const int SOL_ENA = 5;      // sol motor hız (PWM)
const int SOL_IN1 = 7;      // sol motor yön
const int SOL_IN2 = 8;
const int SAG_ENB = 6;      // sağ motor hız (PWM)
const int SAG_IN3 = 9;      // sağ motor yön
const int SAG_IN4 = 10;

const int HIZLI = 160;      // 0–255 arası
const int YAVAS = 70;

void setup() {
  pinMode(SOL_SENSOR, INPUT);
  pinMode(SAG_SENSOR, INPUT);
  pinMode(SOL_ENA, OUTPUT); pinMode(SOL_IN1, OUTPUT); pinMode(SOL_IN2, OUTPUT);
  pinMode(SAG_ENB, OUTPUT); pinMode(SAG_IN3, OUTPUT); pinMode(SAG_IN4, OUTPUT);
  digitalWrite(SOL_IN1, HIGH); digitalWrite(SOL_IN2, LOW);   // sol ileri
  digitalWrite(SAG_IN3, HIGH); digitalWrite(SAG_IN4, LOW);   // sağ ileri
}

Yönü setup() içinde bir kez ileri ayarlıyoruz. Döngüde sadece hızı değiştireceğiz.

Örnek 2: Ana döngü ve motor yardımcısı

void motorlariSur(int solHiz, int sagHiz) {
  analogWrite(SOL_ENA, solHiz);
  analogWrite(SAG_ENB, sagHiz);
}

void loop() {
  int sol = digitalRead(SOL_SENSOR);   // 1 = çizgi görüldü
  int sag = digitalRead(SAG_SENSOR);

  if (sol == 0 && sag == 0) {          // ikisi de beyaz
    motorlariSur(HIZLI, HIZLI);        // düz git
  } else if (sol == 1 && sag == 0) {   // çizgi solda
    motorlariSur(YAVAS, HIZLI);        // sola dön
  } else if (sol == 0 && sag == 1) {   // çizgi sağda
    motorlariSur(HIZLI, YAVAS);        // sağa dön
  } else {                             // ikisi de çizgi
    motorlariSur(HIZLI, HIZLI);        // kavşak: düz devam
  }
}

motorlariSur küçük bir yardımcı fonksiyondur; sol ve sağ hızı tek satırda ayarlar. Böylece döngü okunaklı kalır.

Kavşak ve kayıp durum

Gerçek pistlerde iki özel durum robotu şaşırtır.

Her iki sensör de çizgi görüyorsa bu genelde bir kavşak ya da kalın bir işarettir. Basit robotta karar kolaydır: düz devam et. Yukarıdaki kodda son else bunu yapar.

Her iki sensör de uzun süre beyaz görüyorsa robot çizgiyi tamamen kaybetmiş olabilir. Sadece "düz git" dersen robot pistten çıkar. Daha akıllı bir çözüm, son gördüğü yönü hatırlamaktır:

Eğer ikisi de uzun süre beyaz ise
  son dönüş yönüne doğru dönerek çizgiyi ara

Yani robot çizgiyi en son solda gördüyse, kaybettiğinde sola dönerek onu geri bulmaya çalışır.

Test parkuru ve bir hatanın düzeltilmesi

Önce robotu tekerlekleri havada, elinde tutarak dene. Sonra siyah bant veya kalın kalemle beyaz bir kâğıda basit bir parkur çiz: düz bir çizgi, sonra yumuşak bir viraj.

Test parkuru ve bir hatanın düzeltilmesi tablosu
#TestBeklenen sonuç
1Düz çizgi üzerine koyRobot düz ilerler
2Robotu hafif sağa kaydırSol sensör çizgiyi görür, sola düzeltir
3Yumuşak virajı sürRobot çizgiyi takip ederek döner

Bir hata ve düzeltmesi: robot düz gitmiyor

İlk denememde iki sensör de beyaz görürken robot yine de sürekli sağa kaçıyordu. Beklediğim: dümdüz gitsin. Gerçekte olan: sağa kaydı.

Amaç: İki sensör de beyazken robot düz gitsin
Sorun: Robot düz çizgide sağa kaçıyor
Kontrol: İki motor aynı PWM'de aynı hızda dönmüyor
Düzeltme: Yavaş kalan motora küçük bir denge farkı ekle

Sorun kodda değil, mekanikteydi: aynı HIZLI değerinde sol motor sağdan biraz hızlı dönüyordu. İki motor asla birebir aynı değildir. Düz giderken sol motora küçük bir azaltma (örneğin HIZLI - 15) uygulayınca robot düzeldi. Bu küçük ayara denge (trim) denir ve her robotta biraz farklıdır.

Mini uygulama

Robotu kendi fikrinle geliştir. Şunlardan birini dene:

  1. HIZLI ve YAVAS değerlerini değiştirip robotu daha yumuşak mı yoksa daha keskin mi döndürdüğünü gözlemle.
  2. Yukarıdaki "kayıp durum" mantığını gerçek koda ekle: son dönüş yönünü bir değişkende tut ve çizgi kaybolunca o yöne ara.
  3. Parkura bir kavşak ekle ve robotun kavşakta ne yaptığını not al; istersen kavşakta yavaşlatan bir kural yaz.

Yaptığın değişikliği tek cümleyle yaz: robot artık ne yapıyor ve neyi daha iyi yapıyor?

Sık yapılan hatalar

Ortak toprağı unutmak

Arduino ile motor pilinin GND uçlarını birbirine bağlamazsan sürücü sinyalleri okuyamaz. Robot ya hiç hareket etmez ya da rastgele davranır. Ortak toprak bu projenin en sık atlanan adımıdır.

Motoru doğrudan Arduino'ya bağlamak

Motoru bir Arduino pinine takarsan pin çok akım çeker ve zarar görür. Motorlar her zaman sürücü kartından ve ayrı pilden beslenmelidir.

Sensör değerini varsaymak

Bazı modüllerde çizgi 1, bazılarında 0 verir. Kalibrasyon yapmadan koddaki karşılaştırmalara güvenme; önce Serial ile ölç.

Denge farkını hesaba katmamak

İki motor aynı PWM'de asla tam aynı dönmez. Robot düz gitmiyorsa kod yanlış olmayabilir; küçük bir denge ayarı çoğu zaman çözer.

Güvenlik notu

Bu robot hareket eder, bu yüzden birkaç kural önemlidir. Testi geniş, boş bir zeminde yap; robotun düşebileceği masa kenarından uzak dur. Parmağını, saçını ve kabloları tekerleklere ve dişlilere yaklaştırma; dönen parçalar sıkıştırabilir. İlk denemeleri düşük hızda ve tekerlekleri havadayken yap.

Motorları her zaman bir motor sürücü ve ayrı, düşük gerilimli bir pil paketiyle çalıştır; iki kaynağın toprağını ortak bağla. Asla şebeke (priz) elektriği kullanma. Pil ısınırsa, kablo yanık kokarsa ya da robot tuhaf davranırsa pili hemen çıkar. Motor, pil ve kesici alet içeren adımları bir yetişkinle birlikte yap.

Ders özeti

Kontrol soruları

  1. Bir çizgi izleyen robotta motorları neden doğrudan Arduino'ya değil de bir motor sürücüye bağlarız?
  2. İki güç kaynağı kullanırken hangi bağlantı mutlaka ortak olmalıdır ve neden?
  3. Sol sensör çizgiyi görüp sağ sensör beyaz görüyorsa robot hangi yöne döner ve neden?
  4. Kalibrasyonu neden kod yazmadan önce yaparız?
  5. Robot düz bir çizgide sürekli bir tarafa kaçıyorsa ilk kontrol etmen gereken şey nedir?

Cevaplar

  1. Motorlar Arduino pininin veremeyeceği kadar çok akım çeker. Doğrudan bağlanırsa pin veya kart zarar görür. Sürücü, gücü ayrı pilden çekip motora verir; Arduino ise sadece küçük bir kontrol sinyali gönderir.
  2. İki güç kaynağının eksi uçları (GND / toprak) ortak bağlanmalıdır. Ortak toprak olmadan sürücü, Arduino'nun gönderdiği sinyalin seviyesini doğru okuyamaz ve robot düzgün çalışmaz.
  3. Robot sola döner. Sol sensör çizgiye değdiyse robot sağa kaymış demektir; sol motoru yavaşlatıp sola çekerek kendini çizginin ortasına geri getirir.
  4. Çünkü sensör modülüne göre çizgi bazen 1, bazen 0 verir. Ölçmeden kodda karşılaştırma yaparsak robot tam ters davranabilir. Serial ile ölçmek doğru değerleri gösterir.
  5. Motor dengesi. İki motor aynı PWM'de tam aynı dönmez; düz giderken hızlı olan motora küçük bir azaltma (trim) uygulamak çoğu zaman sorunu çözer.

Kaynak ve doğrulama notu

“Proje: Çizgi İzleyen Robot” dersi için doğrulama odağı Malzeme, bağlantı ve güç ile Neden ayrı pil ve motor sürücü? 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

Veri ve Yapay Zekâya Giriş modülü: Robotların topladığı sensör verilerini toplamayı, anlamayı ve bir bilgisayarın bu verilerden nasıl "öğrendiğini" keşfetmeye başlıyoruz.

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.