Çizgi İzleyen Robot Nasıl Yapılır? Devre Şeması ve Kodları
Robot yarışmalarının (MEB Robot, TEKNOFEST, üniversite robot günleri) ve robotik kodlama eğitimlerinin tartışmasız en klasik ve en prestijli projesi **"Çizgi İzleyen Robot"**tur (Line Follower Robot). Beyaz zemin üzerindeki siyah bir çizgiyi (veya siyah zemin üzerindeki beyaz çizgiyi) optik sensörleriyle takip ederek otonom bir şekilde parkuru tamamlayan bu robotlar, günümüzde akıllı fabrikalarda ve Amazon lojistik depolarında yük taşıyan AGV (Automated Guided Vehicle) araçlarının temelini oluşturur.
Bu kapsamlı rehberde; kızılötesi çizgi sensörlerinin çalışma mantığını, 2 sensörlü temel algoritmadan PID kontrolüne kadar yazılım mimarisini, L298N motor sürücü bağlantılarını ve çalışan Arduino C++ kodlarını adım adım inceliyoruz.
---
1. Çizgi İzleyen Robotun Çalışma Prensibi: Işığın Yansıması ve Soğurulması
Çizgi izleyen robotların temel çalışma mantığı fiziğin en temel optik kuralına dayanır: **Açık renkler (beyaz) ışığı geri yansıtırken, koyu renkler (siyah) ışığı emer (soğurur).**
Bu tespiti yapmak için robotun alt tabanına, zemine yaklaşık 3 ila 10 mm mesafede duracak şekilde **Kızılötesi (IR) Sensörler (örneğin TCRT5000 veya QTR-8A)** yerleştirilir:
1. **Kızılötesi Verici LED (IR LED):** Zemine insan gözünün göremediği kızılötesi ışık dalgaları gönderir.
2. **Fototransistör (Alıcı):**
Arduino bu iki sensörün durumunu saniyede yüzlerce kez okuyarak robotun çizgide olup olmadığını anlar.
---
2. Diferansiyel Sürüş ve 2 Sensörlü Karar Tablosu
Aracın önünde yan yana iki adet çizgi sensörü (Sol Sensör ve Sağ Sensör) bulunur. Robotun karar mekanizması şu basit mantık tablosuna göre çalışır:
| Sol Sensör | Sağ Sensör | Robotun Durumu | Yapılacak Eylem | Sol Motor | Sağ Motor |
|---|---|---|---|---|---|
| **0 (Beyaz)** | **0 (Beyaz)** | Çizgi tam ortada | Düz İleri Git | İLERİ (Hızlı) | İLERİ (Hızlı) |
| **1 (Siyah)** | **0 (Beyaz)** | Çizgi sola kaydı | Sola Düzeltme Yap | DUR / GERİ | İLERİ |
| **0 (Beyaz)** | **1 (Siyah)** | Çizgi sağa kaydı | Sağa Düzeltme Yap | İLERİ | DUR / GERİ |
| **1 (Siyah)** | **1 (Siyah)** | Parkur sonu / Durak | Dur veya Karar Ver | DUR | DUR |
---
3. Gerekli Malzemeler Listesi
| Malzeme Adı | Miktar | Görevi / Açıklama |
|---|---|---|
| **Arduino Uno veya Nano** | 1 Adet | Robotun beyni |
| **2WD Robot Araba Gövdesi (Şasi)** | 1 Adet | Pleksi taban, sarhoş tekerlek ve montaj vidaları |
| **Sarı Redüktörlü DC Motor ve Tekerlek** | 2 Adet | Çekiş tekerlekleri |
| **L298N Çift Motor Sürücü Modülü** | 1 Adet | DC motorların hız ve yön kontrolü |
| **2 Kanallı TCRT5000 Çizgi Sensör Kartı**| 1 Adet | Zemindeki siyah çizgiyi algılayan modül |
| **2 Adet 18650 Li-ion Pil ve Pil Yuvası** | 1 Adet | 7.4V yüksek akımlı güç kaynağı |
| **Jumper Kablolar (Erkek-Dişi, Erkek-Erkek)**| 15-20 Adet | Devre elemanlarını bağlamak için |
| **Siyah Elektrik Bandı** | 1 Rulo | Beyaz zemin üzerine test pisti çizmek için |
---
4. Devre Şeması ve Pin Bağlantı Rehberi
A. L298N Motor Sürücü Bağlantıları:
B. TCRT5000 Çizgi Sensörü Bağlantıları:
---
5. Tam ve Çalışan Arduino C++ Kodları
Aşağıdaki kod, 2 sensörlü klasik çizgi izleyen robot için en kararlı ve test edilmiş yazılımdır:
/*
* RobotKodla.com - Otonom Robotik Projeleri
* Proje: 2 Sensörlü Çizgi İzleyen Robot
* Yazar: Kadir Hoca
*/
// Sensör Pinleri
const int solSensorPin = 2;
const int sagSensorPin = 3;
// Motor Sürücü Pinleri (L298N)
const int solMotorIleri = 5;
const int solMotorGeri = 6;
const int sagMotorIleri = 9;
const int sagMotorGeri = 10;
void setup() {
// Sensörler giriş olarak yapılandırılır
pinMode(solSensorPin, INPUT);
pinMode(sagSensorPin, INPUT);
// Motor pinleri çıkış olarak yapılandırılır
pinMode(solMotorIleri, OUTPUT);
pinMode(solMotorGeri, OUTPUT);
pinMode(sagMotorIleri, OUTPUT);
pinMode(sagMotorGeri, OUTPUT);
}
void loop() {
// Sensör durumlarını oku (1 = Siyah, 0 = Beyaz)
int solSensor = digitalRead(solSensorPin);
int sagSensor = digitalRead(sagSensorPin);
// Durum 1: İki sensör de beyazda (Çizgi tam ortada) -> DÜZ GİT
if (solSensor == 0 && sagSensor == 0) {
ileriGit();
}
// Durum 2: Sol sensör siyah gördü -> SOLA DÖN
else if (solSensor == 1 && sagSensor == 0) {
solaDon();
}
// Durum 3: Sağ sensör siyah gördü -> SAĞA DÖN
else if (solSensor == 0 && sagSensor == 1) {
sagaDon();
}
// Durum 4: İki sensör de siyah gördü (Bitiş çizgisi) -> DUR
else if (solSensor == 1 && sagSensor == 1) {
dur();
}
}
void ileriGit() {
digitalWrite(solMotorIleri, HIGH);
digitalWrite(solMotorGeri, LOW);
digitalWrite(sagMotorIleri, HIGH);
digitalWrite(sagMotorGeri, LOW);
}
void solaDon() {
// Sol motor geri, sağ motor ileri dönerse robot olduğu yerde hızla sola döner
digitalWrite(solMotorIleri, LOW);
digitalWrite(solMotorGeri, HIGH);
digitalWrite(sagMotorIleri, HIGH);
digitalWrite(sagMotorGeri, LOW);
}
void sagaDon() {
// Sol motor ileri, sağ motor geri dönerse robot hızla sağa döner
digitalWrite(solMotorIleri, HIGH);
digitalWrite(solMotorGeri, LOW);
digitalWrite(sagMotorIleri, LOW);
digitalWrite(sagMotorGeri, HIGH);
}
void dur() {
digitalWrite(solMotorIleri, LOW);
digitalWrite(solMotorGeri, LOW);
digitalWrite(sagMotorIleri, LOW);
digitalWrite(sagMotorGeri, LOW);
}
---
6. Sensör Kalibrasyonu (Hayati Aşama)
TCRT5000 sensör kartının üzerinde iki adet mavi küçük potansiyometre (trimpot) bulunur:
1. Robotu test pistinin **beyaz zeminine** koyun. Kart üzerindeki gösterge LED'i sönük olmalıdır. Eğer yanıyorsa vidayı LED sönene kadar çevirin.
2. Sensörü **siyah çizginin** üzerine getirin. Gösterge LED'i anında parlak bir şekilde yanmalıdır.
3. Bu hassas kalibrasyon, ortamın oda ışığına göre sensörün siyah ile beyazı hatasız ayırt etmesini sağlar.
---
7. İleri Düzey: PID Kontrolü Nedir?
2 sensörlü temel robotlar çizgiyi "zikzaklar çizerek (sallanarak)" takip eder. Çünkü sistem sadece "tam sola dön" veya "tam sağa dön" diyebilir.
Profesyonel yarışma robotlarında 5 veya 8 sensörlü dizilimler (QTR-8A) ve **PID (Proportional - Integral - Derivative) Algoritması** kullanılır:
PID kontrolü sayesinde robot virajları tren rayında kayar gibi pürüzsüz ve inanılmaz yüksek hızlarda tamamlar.
---
8. Sık Karşılaşılan Sorunlar ve Çözümleri
| Sorun | Olası Neden | Pratik Çözüm |
|---|---|---|
| Robot çizgiye gelince zıt yöne dönüyor | Sol ve sağ motor kabloları ters takılmış | Kodda `solaDon` ve `sagaDon` fonksiyonlarındaki pinleri veya motor kablolarını yer değiştirin. |
| Robot siyah çizgiyi hiç görmüyor, düz geçip gidiyor | Sensör zemine çok uzak | Sensör yüksekliğini zeminden 4-6 mm seviyesine indirin. |
| Robot virajlarda çizgiden çıkıyor | Hız çok yüksek veya pil voltajı düşüyor | L298N ENA/ENB pinlerine PWM vererek motor hızını %70 seviyesine düşürün. |
---
9. Kapsamlı Sıkça Sorulan Sorular (SSS)
Çizgi genişliği kaç santimetre olmalıdır?
Standart yarışma kurallarına göre siyah çizgi genişliği **18 mm ile 20 mm** (standart bir elektrik bandı genişliği) olmalıdır. İki sensörünüzün arasındaki mesafe de tam bu çizginin iki kenarına denk gelecek şekilde ayarlanmalıdır.
Zemin mat mı yoksa parlak mı olmalıdır?
Parlak beyaz zeminler kızılötesi ışığı ayna gibi saçarak sensörü yanıltabilir. İdeal test pisti **mat beyaz dekota veya mat beyaz branda** üzerine çekilmiş mat siyah folyodur.
4WD (4 tekerlekli) araba ile çizgi izleyen yapılır mı?
Yapılabilir ancak 4 tekerlekli araçların dönüş sürtünmesi çok yüksektir; virajlarda zorlanırlar. Çizgi izleyen robotlarda en çevik ve ideal tasarım **arkada 2 çekiş tekerleği, önde ise 1 adet sarhoş tekerlek (2WD)** konfigürasyonudur.
---
Sonuç
Çizgi izleyen robot projesi, sensör fiziği ile diferansiyel motor dinamiğinin kusursuz birleşimidir. Bu projeyi başarıyla yürüten bir öğrenci; otonom sürüş mantığını, sensör kalibrasyonunu ve kapalı çevrim kontrol sistemlerini derinlemesine öğrenmiş olur. Daha gelişmiş robotik tasarımlar için sitemizin [Projeler](/projeler) bölümünü incelemeye devam edin!