Ana Sayfa · Akademi · Robotik ve Kodlama · Arduino · Proje: Çizgi İzleyen Robotun Mantığı

Proje: Çizgi İzleyen Robotun Mantığı

İki çizgi sensörü ve motor sürücüyle bir çizgi izleyen robotun kontrol mantığını kur.

PROJE PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Çizgi izleyen robot, iki kızılötesi sensörle zemindeki çizgiyi görür ve iki motorun hızını ayarlayarak çizgi üzerinde kalır; bu derste o mantığı algoritmadan çalışan sketch'e kadar kuruyoruz.

Üretilecek kanıt

Test parkuru kur Beyaz bir karton üzerine, kalın siyah bantla (yaklaşık 2 cm) yavaş virajlı kapalı bir yol yapıştır. Keskin köşe yerine yumuşak yaylar kullan; robot keskin dönüşlerde çizgiyi kaçırır. Robotu çizginin üstüne, iki sensör beyazı görecek şekilde koy. Önce motor pilini takmadan sadece sensörleri test et: Serial.println ile değerleri yazdır, elini…

Kontrol tuzağı

Robot düz gitmiyor, sürekli bir yana kayıyor En sık karşılaşılan sorun budur. İki DC motor asla tam olarak aynı değildir; biri diğerinden biraz hızlı döner. Çözüm, yavaş motora fazladan güç vermektir (trim): const int SOL_HIZ = 150; const int SAG_HIZ = 165; // Sağ motor yavaşsa biraz artır // motorlariAyarla(SOL_HIZ,…

Sonraki bağlantı

Proje: Mini Otomatik Sulama Prototipi

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre45–75 dk
Ön koşulProje: Akıllı Park Sensörü
İçerikProje rehberi · 1.688 kelime
Son güncelleme

Bir cümlelik özet

Çizgi izleyen robot, iki kızılötesi sensörle zemindeki çizgiyi görür ve iki motorun hızını ayarlayarak çizgi üzerinde kalır; bu derste o mantığı algoritmadan çalışan sketch'e kadar kuruyoruz.

Neden önemli?

Fabrikalarda, hastanelerde ve depolarda yere çizilmiş şeritleri takip eden robotlar vardır. Yükü bir noktadan diğerine kimse sürmeden taşırlar. Bunların hepsi aynı basit fikre dayanır: robot çizginin neresinde olduğunu ölçer ve rotayı sürekli düzeltir.

Bu projede yeni bir şey öğreniyoruz: robot artık yalnız "dur" ya da "git" demiyor. İki motoru farklı hızlarda çalıştırarak yön veriyor. Bir motor yavaşlarsa robot o tarafa döner. İşte gerçek robotların direksiyonu budur.

Ayrıca ilk kez bir motor sürücü kullanıyoruz. Motorlar, LED'lere göre çok daha fazla akım çeker. Bu yüzden onları doğrudan Arduino'ya bağlamak yanlıştır. Bu dersin güvenlik notu tam da bunu anlatıyor.

Robot çizgiyi nasıl "görür"?

Kızılötesi çizgi sensörü

Bir kızılötesi çizgi sensörü (IR line sensor), göze görünmeyen kızılötesi ışık gönderir ve zeminden geri yansıyanı ölçer. Beyaz zemin ışığı iyi yansıtır; siyah çizgi ışığı yutar.

Sensör bize tek bir dijital cevap verir:

Not: Bazı sensör modülleri bunu tersine verir. Robotun ters davrandığını görürsen, sensör mantığını (LOW/HIGH) yer değiştir.

İki sensör, iki göz gibi

Robotun önüne, çizginin biraz solu ve biraz sağı hizasına iki sensör koyarız. Robot tam çizginin üstündeyken iki sensör de beyaz görür, çizgi tam ortalarından geçer.

Robot sola kayarsa, siyah çizgi sağ sensörün altına gelir. Sağa kayarsa sol sensörün altına gelir. Yani hangi sensör çizgiyi görüyorsa, robot ters yöne kaymış demektir ve o yöne dönmesi gerekir.

Günlük hayattan örnek

Gözlerin kapalı, ayağının altında bir bordür var ve onu takip etmeye çalışıyorsun. Ayağın kenardan kayınca hemen düzeltirsin. Robot da tam bunu yapar, sadece ayağı yerine iki sensörü ve iki motoru vardır.

İki motorla yön verme

Farklı hız = dönüş

Robotun iki tekeri ve iki motoru vardır. İkisi de aynı hızda dönerse robot düz gider. Sol motoru yavaşlatırsak sol taraf geride kalır ve robot sola döner. Sağ motoru yavaşlatırsak sağa döner.

Farklı hız = dönüş tablosu
Sol sensörSağ sensörAnlamıHareket
BeyazBeyazÇizgi tam ortadaDüz git
ÇizgideBeyazSola kaymışSola dön
BeyazÇizgideSağa kaymışSağa dön
ÇizgideÇizgideKavşak / kalın çizgiDüz git

Günlük hayattan örnek

Bir arabada şeritten çıkmaya başlarsan direksiyonu hafifçe geri çevirirsin. Robot da öyle: küçük ve sürekli düzeltmeler yapar. Tek büyük hamle yerine binlerce küçük düzeltme, çizgide kalmayı sağlar.

Algoritmadan sketch'e

Önce sözde kod

Başla
Sürekli tekrarla:
  sol = sol sensörü oku
  sag = sağ sensörü oku
  Eğer sol beyaz ve sag beyaz ise
    iki motoru da ileri çalıştır (düz git)
  Değilse eğer yalnız sol çizgide ise
    sol motoru yavaşlat (sola dön)
  Değilse eğer yalnız sag çizgide ise
    sağ motoru yavaşlat (sağa dön)
  Değilse
    düz git

Bağlantı listesi

Pin tanımları ve kurulum

// Motor sürücü pinleri
const int ENA = 5;   // Sol motor hız (PWM)
const int IN1 = 7;
const int IN2 = 8;
const int ENB = 6;   // Sağ motor hız (PWM)
const int IN3 = 12;
const int IN4 = 13;

// Çizgi sensörleri
const int SOL_SENSOR = 2;
const int SAG_SENSOR = 3;

const int HIZ = 150; // 0-255 arası taban hız
void setup() {
  pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  pinMode(SOL_SENSOR, INPUT);
  pinMode(SAG_SENSOR, INPUT);

  // İki motoru da ileri yöne ayarla
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);

  Serial.begin(9600);
}

Ana döngü

void motorlariAyarla(int solHiz, int sagHiz) {
  analogWrite(ENA, solHiz);
  analogWrite(ENB, sagHiz);
}

void loop() {
  int sol = digitalRead(SOL_SENSOR);
  int sag = digitalRead(SAG_SENSOR);

  if (sol == LOW && sag == LOW) {
    motorlariAyarla(HIZ, HIZ);   // Düz git
  } else if (sol == HIGH && sag == LOW) {
    motorlariAyarla(0, HIZ);     // Sola dön
  } else if (sol == LOW && sag == HIGH) {
    motorlariAyarla(HIZ, 0);     // Sağa dön
  } else {
    motorlariAyarla(HIZ, HIZ);   // Kavşak: düz git
  }
}

analogWrite ile motor hızını 0–255 arasında ayarlarız. 0 durur, 255 tam hızdır. Hızı doğrudan pin gerilimiyle değil, sürücü üzerinden veririz.

Mini uygulama

Test parkuru kur

Beyaz bir karton üzerine, kalın siyah bantla (yaklaşık 2 cm) yavaş virajlı kapalı bir yol yapıştır. Keskin köşe yerine yumuşak yaylar kullan; robot keskin dönüşlerde çizgiyi kaçırır.

  1. Robotu çizginin üstüne, iki sensör beyazı görecek şekilde koy.
  2. Önce motor pilini takmadan sadece sensörleri test et: Serial.println ile değerleri yazdır, elini sensörün önünde gezdir.
  3. Sonra motor pilini tak ve robotu düşük HIZ değeriyle (120–150) parkura bırak.
  4. Robot çizgiyi kaybediyorsa HIZ değerini düşür veya sensörleri çizgiye yaklaştır.

Non-blocking durum yazdırma (geliştirme)

delay kullanırsak robot o an "kör" kalır. Bunun yerine millis ile arada bir durum yazdırmak daha iyidir:

unsigned long sonYazma = 0;

void durumYaz(int sol, int sag) {
  if (millis() - sonYazma >= 300) {
    sonYazma = millis();
    Serial.print("Sol: "); Serial.print(sol);
    Serial.print("  Sag: "); Serial.println(sag);
  }
}

Bu fonksiyonu loop içinde çağırırsan motorlar hiç beklemeden çalışmaya devam eder.

Projeyi güçlendirme planı

Proje: Çizgi İzleyen Robotun Mantığı 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 buton sıçramasını yazılımla azaltan kontrollü sayaç bağlamını kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu oluştur. Dersin hedefi “İki çizgi sensörü ve motor sürücüyle bir çizgi izleyen robotun kontrol mantığını kur” 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. Robot çizgiyi nasıl "görür"? ile İki sensör, iki göz gibi 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: Çizgi İzleyen Robotun Mantığı” 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: Çizgi İzleyen Robotun Mantığı” 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; Robot çizgiyi nasıl "görür"? veya İki sensör, iki göz gibi 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: Çizgi İzleyen Robotun Mantığı” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, buton sıçramasını yazılımla azaltan kontrollü sayaç 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

Robot düz gitmiyor, sürekli bir yana kayıyor

En sık karşılaşılan sorun budur. İki DC motor asla tam olarak aynı değildir; biri diğerinden biraz hızlı döner. Çözüm, yavaş motora fazladan güç vermektir (trim):

const int SOL_HIZ = 150;
const int SAG_HIZ = 165; // Sağ motor yavaşsa biraz artır
// motorlariAyarla(SOL_HIZ, SAG_HIZ);

Değerleri deneyerek robot düz gidene kadar ayarla.

Sensör mantığını ters kurmak

Robot çizgiden kaçıyorsa, sensör beyaz/siyah cevabı beklediğinin tersidir. Kodda HIGH ve LOW'u yer değiştir.

Ortak GND'yi unutmak

Motor pili ve Arduino'nun GND'si birleşmezse sürücü komutları anlamaz. GND hattını mutlaka ortak yap.

Çok yüksek hızla başlamak

Yüksek hızda robot virajı alamadan çizgiyi kaçırır. Her zaman düşük hızda başla, çizgide kaldıkça artır.

Güvenlik notu

Ders özeti

Kontrol soruları

  1. İki sensör de beyaz görürken robot ne yapmalı?
  2. Siyah çizgi sol sensörün altındaysa robot hangi yöne kaymıştır ve ne yapmalı?
  3. analogWrite(ENA, 0) ne anlama gelir?
  4. Motorları neden doğrudan Arduino pinine bağlamayız?
  5. Robot sürekli sağa kayıyorsa (çizgide değilken bile) muhtemel neden ve çözüm nedir?

Cevaplar

  1. Düz gitmeli; çizgi tam ortadadır, iki motor da eşit hızda ileri çalışır.
  2. Robot sağa kaymıştır (çizgi soldan görünür oldu) ve sola dönmelidir; sol motoru yavaşlatır.
  3. Sol motorun hızını 0 yapar, yani sol motoru durdurur.
  4. Motorlar yüksek akım çeker; pin bu akımı veremez ve zarar görür. Bu yüzden motor sürücü ve ayrı güç kaynağı gerekir.
  5. Muhtemelen sol motor sağ motordan hızlıdır. Çözüm, motor hızlarını trim ile dengelemek (yavaş motora biraz fazla güç vermek).

Kaynak ve doğrulama notu

“Proje: Çizgi İzleyen Robotun Mantığı” dersi için doğrulama odağı Robot çizgiyi nasıl "görür"? ile İki sensör, iki göz gibi arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.

Sonraki ders

Proje: Mini Otomatik Sulama Prototipi

Quiz’i BaşlatArduino 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.