🤖
ROBOT KODLA
Öğrenmeye Başla →
🚀 Robotik Projeler ve Yapım Rehberleri Orta

Arduino ile Çizgi İzleyen Robot Yapımı: Devre Şeması ve Tam Kod Kılavuzu

Sıfırdan adım adım çizgi izleyen robot yapımı rehberi. TCRT5000 kızılötesi sensör kalibrasyonu, L298N motor sürücü bağlantısı, şasi montajı ve hatasız Arduino C++ kodları.

Arduino ile Çizgi İzleyen Robot Yapımı: Devre Şeması ve Tam Kod Kılavuzu

Çizgi izleyen robotlar; endüstriyel fabrikalarda lojistik taşıma yapan AGV (Automated Guided Vehicle) araçlarından hastane içi malzeme transfer robotlarına, TEKNOFEST ve MEB Robot yarışmalarına kadar otonom robotik dünyasının temel direğidir.

Bu projede; zemine çizilmiş siyah çizgiyi beyaz arka plan üzerinde kızılötesi sensörleriyle takip eden, virajları diferansiyel motor kontrolüyle yumuşakça dönen ve rotasından şaşmayan 2WD Çizgi İzleyen Robotu sıfırdan inşa edeceğiz.

Proje boyunca; kızılötesi optik yansıma prensibini, L298N motor sürücüsüyle DC motor hızını (PWM) ayarlamayı, sensör kalibrasyonunun inceliklerini ve hatasız çalışan Arduino kodlarını adım adım öğreneceksiniz.

🎯 Çizgi İzleme Prensibi: Kızılötesi Optik Yansıma Nasıl Çalışır?

Çizgi izleyen robotların gözleri olan TCRT5000 veya benzeri kızılötesi (IR) sensörler, insan gözünün göremediği dalga boyunda bir kızılötesi ışık yayar ve zeminden geri yansıyan ışığı fototransistörle toplar:

  • Beyaz Zemin (Açık Renk): Gelen kızılötesi ışığın neredeyse tamamını geri yansıtır. Sensörün fototransistörü iletime geçer ve Arduino dijital pinine `LOW (0)` sinyali gider.
  • Siyah Çizgi (Koyu Renk): Kızılötesi ışığı soğurur (yutur) ve geri yansıtmaz. Sensör ışık alamadığı için Arduino dijital pinine `HIGH (1)` sinyali gider.
  • Robotumuz bu iki sensörden gelen anlık 0 ve 1 verilerini mikrosaniyeler mertebesinde karşılaştırarak hangi motoru hızlandıracağına veya yavaşlatacağına karar verir.

    🧰 Gerekli Donanım ve Malzeme Listesi

    KategoriBileşen AdıAdetAçıklama ve Görev
    BeyinArduino Uno R3 veya Arduino Nano1 AdetKarar algoritmalarını işleyen ana mikrodenetleyici
    SürücüL298N Çift Motor Sürücü Modülü1 AdetMotorlara yüksek akım sağlayan ve hız/yön yöneten modül
    SensörTCRT5000 Çizgi İzleyen Sensör Kartı2 AdetZemindeki siyah çizgiyi algılayan kızılötesi optik gözler
    Aktüatör6V 250 RPM Sarı Redüktörlü DC Motor2 AdetArka tekerlekleri tahrik eden güçlü dişli motorlar
    TekerlekKauçuk Kaplama Lastik & Sarhoş Tekerlek2+1 Adet2 ana çekici tekerlek ve 1 adet 360 derece döner ön denge tekeri
    Mekanik2WD Pleksi / 3D Baskı Robot Şasisi1 TakımTüm komponentlerin monte edildiği hafif ve dengeli gövde
    Güç2x 18650 Li-ion Pil (7.4V) & Pil Yuvası1 TakımMotorların çektiği anlık yüksek akımı stabil karşılayan batarya
    BağlantıErkek-Dişi ve Erkek-Erkek Jumper Kablo1 SetDevre tahtası ve modül ara bağlantı hatları
    GüvenlikMini Açma/Kapama Switch Anahtar1 AdetRobotu piste koymadan önce enerjiyi kesip açma anahtarı

    ⚡ Devre Bağlantı Şeması ve Pin Tablosu

    Çizgi izleyen robotlarda motorların çektiği parazitik akımların Arduino'yu resetlemesini önlemek için bağlantıların sağlam ve ortak toprak (GND) hattının eksiksiz olması şarttır.

    Pin Bağlantı Tablosu:

    Modül / KomponentModül BacağıArduino Bağlantı PiniGörevi / Açıklama
    Sol SensörVCC5VSensör besleme voltajı
    Sol SensörGNDGNDOrtak toprak hattı
    Sol SensörDO (Dijital Çıkış)D2Sol zemin algılama sinyali
    Sağ SensörVCC5VSensör besleme voltajı
    Sağ SensörGNDGNDOrtak toprak hattı
    Sağ SensörDO (Dijital Çıkış)D3Sağ zemin algılama sinyali
    L298N SürücüIN1D4Sol motor ileri yön pini
    L298N SürücüIN2D5Sol motor geri yön pini
    L298N SürücüIN3D6Sağ motor ileri yön pini
    L298N SürücüIN4D7Sağ motor geri yön pini
    L298N SürücüENAD9 (PWM)Sol motor hız ayar pini
    L298N SürücüENBD10 (PWM)Sağ motor hız ayar pini
    Pil Yuvası (+)Kırmızı KabloL298N 12V KlemensiMotor sürücüye batarya gücü
    Pil Yuvası (-)Siyah KabloL298N GND KlemensiBatarya eksi kutbu
    L298N Sürücü5V KlemensiArduino VIN PiniL298N dahili regülatöründen Arduino beslemesi
    L298N SürücüGND KlemensiArduino GND PiniKritik Ortak GND Hattı

    🔧 Sensör Kalibrasyonu ve Montaj Püf Noktaları

    Robotun çizgiden çıkmadan akıcı bir şekilde ilerlemesi %80 oranında sensör montajına ve kalibrasyonuna bağlıdır:

  • Yerden Yükseklik (3-5 mm Kuralı): Kızılötesi sensörlerin zeminle mesafesi 3 mm ile 5 mm arasında olmalıdır. Sensör 8 mm'den daha yukarı monte edilirse yansıyan ışık dağılır ve siyah ile beyaz arasındaki farkı ayırt edemez.
  • Sensörler Arası Mesafe: İki sensör arasındaki boşluk, zemine çizeceğiniz siyah elektrik bandının genişliğinden (yaklaşık 18-20 mm) biraz daha geniş (22-25 mm) olmalıdır. Böylece robot düz giderken siyah çizgi tam iki sensörün ortasında kalır.
  • Trimpot Kalibrasyonu:
  • Robotu beyaz kağıt üzerine koyun; sensör arkasındaki küçük vidayı (trimpot) saat yönünde çevirerek durum LED'inin tam söndüğü eşiği bulun.
  • Sensörü siyah bandın üzerine getirin; durum LED'inin parlak bir şekilde yandığından emin olun. Her iki sensör için de bu testi tekrarlayın.
  • 🧠 Hareket Mantığı (Algoritma Tablosu)

    Sol Sensör (D2)Sağ Sensör (D3)Durum AnaliziSol MotorSağ MotorRobotun Tepkisi
    BEYAZ (0)BEYAZ (0)Çizgi tam ortadaİLERİ (Hızlı)İLERİ (Hızlı)Düz İleri Git
    SİYAH (1)BEYAZ (0)Robot sağa kaydı, çizgi soldaGERİ / DURİLERİ (Hızlı)Sola Sert Dön
    BEYAZ (0)SİYAH (1)Robot sola kaydı, çizgi sağdaİLERİ (Hızlı)GERİ / DURSağa Sert Dön
    SİYAH (1)SİYAH (1)Çapraz kavşak veya pist sonuDURDURMotorları Durdur

    💻 Hatasız ve Açıklamalı Arduino C++ Kodu

    Aşağıdaki kod diferansiyel sürüş mimarisine sahiptir. Virajlara girildiğinde içte kalan tekerleği durdurup dıştaki tekerleği döndürerek robotun savrulmadan dönmesini sağlar:

    /* * RobotKodla.com - 2WD Çizgi İzleyen Robot Kaynak Kodu * TCRT5000 Çift Sensör & L298N Motor Sürücü Entegrasyonu */ // Sensör Pin Tanımlamaları
    const int solSensor = 2;
    const int sagSensor = 3; // L298N Motor Sürücü Yön Pinleri
    const int motorSol1 = 4;
    const int motorSol2 = 5;
    const int motorSag1 = 6;
    const int motorSag2 = 7; // L298N Motor Hız (PWM) Pinleri
    const int solHizPin = 9;
    const int sagHizPin = 10; // Motor Hız Değerleri (0 - 255 arası)
    // Zemin kayganlığına ve pil voltajına göre 130 - 200 arası ayarlayabilirsiniz
    const int duzHiz = 160;
    const int donusHiz = 180; void setup() { // Sensör pinleri GİRİŞ olarak ayarlanır pinMode(solSensor, INPUT); pinMode(sagSensor, INPUT); // Motor kontrol pinleri ÇIKIŞ olarak ayarlanır pinMode(motorSol1, OUTPUT); pinMode(motorSol2, OUTPUT); pinMode(motorSag1, OUTPUT); pinMode(motorSag2, OUTPUT); pinMode(solHizPin, OUTPUT); pinMode(sagHizPin, OUTPUT); // İlk açılışta motorlar durdurulur ve 2 saniye piste koyma süresi verilir motorlariDurdur(); delay(2000);
    } void loop() { // Sensörlerden verileri oku // Dijital sensörler siyah çizgide HIGH (1), beyaz zeminde LOW (0) verir int solDurum = digitalRead(solSensor); int sagDurum = digitalRead(sagSensor); // DURUM 1: İki sensör de beyaz zeminde -> Çizgi tam ortada, düz git if (solDurum == LOW && sagDurum == LOW) { ileriGit(duzHiz); } // DURUM 2: Sol sensör siyah çizgide -> Robot sağa kaçmış, sola dön else if (solDurum == HIGH && sagDurum == LOW) { solaDon(donusHiz); } // DURUM 3: Sağ sensör siyah çizgide -> Robot sola kaçmış, sağa dön else if (solDurum == LOW && sagDurum == HIGH) { sagaDon(donusHiz); } // DURUM 4: İki sensör de siyah çizgide -> Bitiş çizgisi veya kavşak, dur else if (solDurum == HIGH && sagDurum == HIGH) { motorlariDurdur(); }
    } // ================= HAREKET FONKSİYONLARI ================= void ileriGit(int hiz) { // Sol motor ileri digitalWrite(motorSol1, HIGH); digitalWrite(motorSol2, LOW); analogWrite(solHizPin, hiz); // Sağ motor ileri digitalWrite(motorSag1, HIGH); digitalWrite(motorSag2, LOW); analogWrite(sagHizPin, hiz);
    } void solaDon(int hiz) { // Sol motor durur veya hafif geri döner (hızlı dönüş için) digitalWrite(motorSol1, LOW); digitalWrite(motorSol2, HIGH); analogWrite(solHizPin, hiz / 2); // Sağ motor tam hız ileri döner digitalWrite(motorSag1, HIGH); digitalWrite(motorSag2, LOW); analogWrite(sagHizPin, hiz);
    } void sagaDon(int hiz) { // Sol motor tam hız ileri döner digitalWrite(motorSol1, HIGH); digitalWrite(motorSol2, LOW); analogWrite(solHizPin, hiz); // Sağ motor durur veya hafif geri döner digitalWrite(motorSag1, LOW); digitalWrite(motorSag2, HIGH); analogWrite(sagHizPin, hiz / 2);
    } void motorlariDurdur() { digitalWrite(motorSol1, LOW); digitalWrite(motorSol2, LOW); analogWrite(solHizPin, 0); digitalWrite(motorSag1, LOW); digitalWrite(motorSag2, LOW); analogWrite(sagHizPin, 0);
    }

    🛠️ En Sık Karşılaşılan Sorunlar ve Çözüm Rehberi

    Hata BelirtisiOlası NedenKesin Çözüm Adımı
    Motorlar Ters DönüyorMotor kabloları sürücüye ters bağlanmıştır.L298N OUT klemensindeki motor kablolarının yerini değiştirin.
    Robot Çizgiden FırlıyorPWM motor hızı zemine göre çok yüksektir.Koddaki `duzHiz` değerini 160'tan 120-130 seviyesine düşürün.
    Arduino Kendi Kendine ResetleniyorStandart 9V pil akımı yetmiyor veya GND bağlı değildir.Mutlaka 2x 18650 Li-ion pil kullanın ve ortak GND kablosunu kontrol edin.
    Robot Siyahı GörmüyorSensör yerden çok yüksektedir (6 mm'den fazla).Sensör montaj yüksekliğini zeminden tam 3-4 mm olacak şekilde alçaltın.
    Robot Çizgide YalpalıyorSensörler arasındaki mesafe çizgi kalınlığına göre dardır.İki sensörün arasını 2-3 mm daha açarak çizginin rahat sığmasını sağlayın.

    🚀 Projeyi Bir Sonraki Seviyeye Taşıyın: PID Kontrol

    Temel 2 sensörlü çizgi izleyen robot projesini tamamladıktan sonra; 5'li veya 8'li QTR-8A analog sensör dizisi entegre ederek oransal-türevsel (PID) algoritmasına geçiş yapabilirsiniz. PID kontrolü sayesinde robot virajlarda zikzak çizmek yerine bir yarış arabası gibi pürüzsüz ve yüksek hızda çizgiyi takip edecektir.

    💡

    Arduino ile Çizgi İzleyen Robot Yapımı: Devre Şeması ve Tam Kod Kılavuzu Hakkında Sıkça Sorulan Sorular

    Bu robotik projeyle ilgili en çok merak edilen noktalar ve uzman yanıtları

    Çizgi izleyen robotta sensör kalibrasyonu nasıl yapılır?▼
    Robot beyaz zemin üzerindeyken sensörün arkasındaki trimpot (ayar vidası) LED sönene kadar çevrilir; siyah çizgi üzerine konulduğunda LED'in yanması sağlanarak hassasiyet ayarlanır.
    Robot çizgi üzerinde çok sallanıyor veya çizgiden çıkıyor, nedeni nedir?▼
    Motorlara giden PWM hız değeri zemin sürtünmesine göre çok yüksek olabilir ya da iki sensör arasındaki mesafe siyah çizgi kalınlığına göre dar kalmıştır. Motor hızını bir miktar düşürmek dengeyi sağlar.
    Çizgi izleyen robot için hangi motor ve tekerlek tercih edilmelidir?▼
    6V 250 RPM mikro redüktörlü sarı motorlar veya N20 metal dişli motorlar ve silikon kavrayıcı tekerlekler yüksek yol tutuşu sağladığı için en çok tercih edilen ikilidir.