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:
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
| Kategori | Bileşen Adı | Adet | Açıklama ve Görev |
|---|---|---|---|
| Beyin | Arduino Uno R3 veya Arduino Nano | 1 Adet | Karar algoritmalarını işleyen ana mikrodenetleyici |
| Sürücü | L298N Çift Motor Sürücü Modülü | 1 Adet | Motorlara yüksek akım sağlayan ve hız/yön yöneten modül |
| Sensör | TCRT5000 Çizgi İzleyen Sensör Kartı | 2 Adet | Zemindeki siyah çizgiyi algılayan kızılötesi optik gözler |
| Aktüatör | 6V 250 RPM Sarı Redüktörlü DC Motor | 2 Adet | Arka tekerlekleri tahrik eden güçlü dişli motorlar |
| Tekerlek | Kauçuk Kaplama Lastik & Sarhoş Tekerlek | 2+1 Adet | 2 ana çekici tekerlek ve 1 adet 360 derece döner ön denge tekeri |
| Mekanik | 2WD Pleksi / 3D Baskı Robot Şasisi | 1 Takım | Tüm komponentlerin monte edildiği hafif ve dengeli gövde |
| Güç | 2x 18650 Li-ion Pil (7.4V) & Pil Yuvası | 1 Takım | Motorların çektiği anlık yüksek akımı stabil karşılayan batarya |
| Bağlantı | Erkek-Dişi ve Erkek-Erkek Jumper Kablo | 1 Set | Devre tahtası ve modül ara bağlantı hatları |
| Güvenlik | Mini Açma/Kapama Switch Anahtar | 1 Adet | Robotu 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 / Komponent | Modül Bacağı | Arduino Bağlantı Pini | Görevi / Açıklama |
|---|---|---|---|
| Sol Sensör | VCC | 5V | Sensör besleme voltajı |
| Sol Sensör | GND | GND | Ortak toprak hattı |
| Sol Sensör | DO (Dijital Çıkış) | D2 | Sol zemin algılama sinyali |
| Sağ Sensör | VCC | 5V | Sensör besleme voltajı |
| Sağ Sensör | GND | GND | Ortak toprak hattı |
| Sağ Sensör | DO (Dijital Çıkış) | D3 | Sağ zemin algılama sinyali |
| L298N Sürücü | IN1 | D4 | Sol motor ileri yön pini |
| L298N Sürücü | IN2 | D5 | Sol motor geri yön pini |
| L298N Sürücü | IN3 | D6 | Sağ motor ileri yön pini |
| L298N Sürücü | IN4 | D7 | Sağ motor geri yön pini |
| L298N Sürücü | ENA | D9 (PWM) | Sol motor hız ayar pini |
| L298N Sürücü | ENB | D10 (PWM) | Sağ motor hız ayar pini |
| Pil Yuvası (+) | Kırmızı Kablo | L298N 12V Klemensi | Motor sürücüye batarya gücü |
| Pil Yuvası (-) | Siyah Kablo | L298N GND Klemensi | Batarya eksi kutbu |
| L298N Sürücü | 5V Klemensi | Arduino VIN Pini | L298N dahili regülatöründen Arduino beslemesi |
| L298N Sürücü | GND Klemensi | Arduino GND Pini | Kritik 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:
🧠 Hareket Mantığı (Algoritma Tablosu)
| Sol Sensör (D2) | Sağ Sensör (D3) | Durum Analizi | Sol Motor | Sağ Motor | Robotun 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 solda | GERİ / DUR | İLERİ (Hızlı) | Sola Sert Dön |
| BEYAZ (0) | SİYAH (1) | Robot sola kaydı, çizgi sağda | İLERİ (Hızlı) | GERİ / DUR | Sağa Sert Dön |
| SİYAH (1) | SİYAH (1) | Çapraz kavşak veya pist sonu | DUR | DUR | Motorları 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 Belirtisi | Olası Neden | Kesin Çözüm Adımı |
|---|---|---|
| Motorlar Ters Dönüyor | Motor 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ıyor | PWM motor hızı zemine göre çok yüksektir. | Koddaki `duzHiz` değerini 160'tan 120-130 seviyesine düşürün. |
| Arduino Kendi Kendine Resetleniyor | Standart 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üyor | Sensö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ıyor | Sensö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.