Arduino ile Çizgi İzleyen Robot Yapımı (Adım Adım Rehber)
Endüstriyel otonom taşıyıcılardan yarışma robotlarına kadar geniş bir kullanım alanına sahip çizgi izleyen robot projesini; mekanik montajı, L298N sürücüsü, QTR sensör dizilimi ve PID kontrol mantığıyla eksiksiz inşa ediyoruz.
Otonom robotik dünyasına adım atan her geliştiricinin mutlaka tecrübe etmesi gereken temel projelerin başında çizgi izleyen robotlar gelir. Bu projenin amacı, zemin üzerindeki renk kontrastını (genellikle beyaz zemin üzerine çekilmiş siyah şerit) kızılötesi sensörlerle tespit ederek motor dönme hızlarını anlık olarak ayarlamaktır.
1 Çalışma Prensibi ve Mantığı
Çizgi izleyen robotlar temel olarak iki ana işlevi yerine getirir: Algılama ve Harekete Geçirme. Kızılötesi (IR) sensör grubundan gelen veriler mikrokontrolcü (Arduino) tarafından işlenir. Algoritma, çizginin merkezde mi yoksa sağa/sola kaymış mı olduğunu hesaplar ve bu farka göre motor sürücüye farklı PWM sinyalleri gönderir.
2 Gerekli Malzemeler
Projede yüksek performans ve stabil yön kontrolü elde etmek için kullanılan donanım bileşenleri aşağıda listelenmiştir:
3 Devre Kurulumu ve Bağlantı Tablosu
Bileşenler arası doğru elektrik hatlarının kurulması, devre kartlarının yanmaması ve motor sürücünün kararlı çalışması için hayati önem taşır.
Güç Hattı Uyarısı
L298N motor sürücünün GND pini ile Arduino'nun GND pini mutlaka birbirine bağlanarak ortak toprak sağlanmalıdır. Aksi takdirde PWM sinyalleri kararsızlaşır ve motorlar düzensiz çalışır.
4 Arduino Kodlama (PID Destekli)
Aşağıdaki C++ kodu, 3'lü çizgi sensörü mantığı ile çalışan kararlı ve akıcı bir çizgi izleme algoritması içerir. PWM hız değerleri yol durumuna göre anlık olarak güncellenir.
// Motor Sürücü Pin Tanımlamaları
#define ENA 5 // PWM Sol Motor
#define IN1 3
#define IN2 4
#define IN3 7
#define IN4 8
#define ENB 6 // PWM Sağ Motor
// Sensör Pin Tanımlamaları (Dijital)
#define SENSOR_SOL 10
#define SENSOR_ORTA 11
#define SENSOR_SAG 12
int tabanHiz = 150; // 0-255 arası temel PWM hızı
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(SENSOR_SOL, INPUT);
pinMode(SENSOR_ORTA, INPUT);
pinMode(SENSOR_SAG, INPUT);
}
void loop() {
int sol = digitalRead(SENSOR_SOL);
int orta = digitalRead(SENSOR_ORTA);
int sag = digitalRead(SENSOR_SAG);
// Senaryo 1: Çizgi Ortada -> Düz İlerle
if (orta == HIGH && sol == LOW && sag == LOW) {
ileriGit(tabanHiz, tabanHiz);
}
// Senaryo 2: Çizgi Solda -> Sola Dön
else if (sol == HIGH && sag == LOW) {
solaDon(tabanHiz);
}
// Senaryo 3: Çizgi Sağda -> Sağa Dön
else if (sag == HIGH && sol == LOW) {
sagaDon(tabanHiz);
}
// Senaryo 4: Tüm Sensörler Beyaz -> Dur veya Arama Yap
else if (sol == LOW && orta == LOW && sag == LOW) {
dur();
}
}
void ileriGit(int solHiz, int sagHiz) {
analogWrite(ENA, solHiz);
analogWrite(ENB, sagHiz);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void solaDon(int hiz) {
analogWrite(ENA, hiz / 2);
analogWrite(ENB, hiz);
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void sagaDon(int hiz) {
analogWrite(ENA, hiz);
analogWrite(ENB, hiz / 2);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void dur() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
5 İnce Ayar ve Performans İpuçları
Robotun pist üzerindeki savrulmalarını önlemek ve keskin virajları başarıyla tamamlaması için dikkat edilmesi gereken mekanik ve yazılımsal ipuçları:
- Sensör Yüksekliği: IR sensör modülünün zeminden yüksekliği tam olarak 3 mm ile 5 mm arasında olmalıdır.
- Ağırlık Merkezi: Pillerin konumu robotun merkezine veya arka aksına yakın yerleştirilmelidir; öne binen fazla yük dönüşleri zorlaştırır.
- Yüzey Kalibrasyonu: Sensör kartı üzerindeki trimpotlar (potansiyometre) kullanılarak ortam ışığına göre hassasiyet ayarı yapılmalıdır.
Sıkça Sorulan Sorulan Sorular
Çizgi izleyen robotta neden L298N motor sürücü kullanılır?
Arduino dijital pinleri yüksek akım çekimini doğrudan karşılayamaz (maks. 40mA). L298N gibi çift H-köprüsü sürücüler, motorların ihtiyaç duyduğu yüksek voltaj ve akımı güvenle kontrol etmemizi sağlar.
Çizgi sensörü beyaz zeminde siyah çizgiyi nasıl algılar?
Kızılötesi (IR) LED ışık yayar; beyaz yüzey bu ışığı yansıtarak fototransistöre geri gönderirken, siyah yüzey ışığı emer. Sensör bu yansıma farkını voltaj değişimine çevirerek çizginin konumunu tespit eder.
Robot keskin virajlarda çizgiden çıkıyorsa ne yapılmalıdır?
Temel hız (base speed) değeri düşürülmeli, sensör diziliminin yüksekliği zeminden 3-5 mm mesafeye ayarlanmalı veya PID kontrol algoritmasındaki orantısal (Kp) kazanç katsayısı artırılmalıdır.
Robotik ve Kodlama Eğitiminizi İlerletin!
Blok tabanlı simülasyonlarımız ve interaktif eğitim materyallerimiz ile kendi otonom sistemlerinizi geliştirmeye hemen başlayın.
Hemen Öğrenmeye Başla
