Çizgi izleyen robot, gideceği yolu otonom olarak takip eden robot tipidir. Takip edeceği yol, siyah düzlemin üstünde beyaz çizgi veya beyaz düzlemin üstünde siyah çizgi olacak şekilde hazırlanabilir. Robot bu takip etme işlemini sensörleri vasıtasıyla renk farkını algılayarak yapmaktadır.
Yarışmalar için hazırlanmış bir çizgi izleyen robotun yol takibinin iyi olması dışında yolu kısa sürede tamamlayabilmesi için hızlı olması gerekir. Hızlı bir robotun anlık yol takibi yapabilmesi için dengesinin de iyi olması gerekir. Bu yüzden kullandığınız gövde, sensör ve motor seçimi de önemlidir.
Endüstriyel sektörde de çizgi izleyen robot mantığında robotlar bulunmakta fakat biz bu yazımızda hobi amaçlı çizgi izleyen robotları inceleyeceğiz.
Arduino ile Çizgi İzleyen Robot Nasıl Yapılır?
Robotumuz, 3 adet kızılötesi sensör ile hangi yöne gitmesi gerektiğini belirleyecek. Robotumuzun hızını ve yönünü bir motor sürücü ile kontrol edeceğiz.

Her şey tamamsa robotumuzun montajına başlayabiliriz.
Arduino programını yazmadan önce çizgi izleyen sensörün çalışma mantığından bahsetmek istiyorum. Kullanacağımız sensörler dijital çıkış verdiklerinden dolayı siyah ve beyaz gördüklerinde çıkış sinyalleri 0 veya 1 olacaktır. Sensör siyah gördüğünde hangi değeri verdiğini bu yazılım ile test edebilirsiniz:
#define SensorSol 10
#define SensorOrta 11 // Sensör pinlerini tanımlıyoruz.
#define SensorSag 12
void setup() {
pinMode(SensorSol, INPUT);
pinMode(SensorOrta, INPUT); //Sensörlerimizi giriş olarak tanımlıyoruz.
pinMode(SensorSag, INPUT);
Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
Serial.println("Cizgi Sensoru Testi");
delay(2000);
}
void loop() {
Serial.print(digitalRead(SensorSol));
Serial.print(",");
Serial.print(digitalRead(SensorOrta));
Serial.print(",");
Serial.println(digitalRead(SensorOrta));
delay(100);
}
Sensörlerimizin siyah görüğünde “1” çıkış değerini aldığında oluşan mantık tablodaki gibidir.
Bu mantığa göre programlamaya başlıyoruz.
#define SensorSol 10
#define SensorOrta 11
#define SensorSag 12
#define MotorR1 6
#define MotorR2 7 // Sensör ve Motorların Arduino'ya bağladığımız pinlerini tanımlıyoruz.
#define MotorRE 9
#define MotorL1 5
#define MotorL2 4
#define MotorLE 3
void setup() {
pinMode(SensorSol, INPUT);
pinMode(SensorOrta, INPUT);
pinMode(SensorSag, INPUT);
pinMode(MotorR1, OUTPUT); // Sensör ve Motorların Giriş-Çıkış bilgilerini belirtiyoruz.
pinMode(MotorR2, OUTPUT);
pinMode(MotorL1, OUTPUT);
pinMode(MotorL2, OUTPUT);
}
void loop() {
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 1 && digitalRead(SensorSag) == 0){ // Orta sensör çizgiyi gördüğünde robot ileri gitsin.
ileri();
}
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 0 && digitalRead(SensorSag) == 1){ // Sağ sensör çizgiyi gördüğünde robot sağa dönsün.
sag();
}
if(digitalRead(SensorSol) == 1 && digitalRead(SensorOrta) == 0 && digitalRead(SensorSag) == 0){ // Sol sensör çizgiyi gördüğünde robot sola dönsün.
sol();
}
}
void ileri(){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, 150); // Sağ motorun hızı 150
digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, 150); // Sol motorun hızı 150
}
void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, 0); // Sağ motorun hızı 0 (Motor duruyor)
digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, 150); // Sol motorun hızı 150
}
void sol(){ // Robotun sola dönme hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, 150); // Sağ motorun hızı 150
digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, 0); // Sol motorun hızı 0 (Motor duruyor)
}
void dur(){ // Robotun durma hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorRE, LOW);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
digitalWrite(MotorLE, LOW);
}
Yazar hakkında