Arduino Çizgi İzleyen Robot Kodu
Merhaba arkadaşlar. Bu yazımızda “Çizgi İzleyen Robot nedir, nasıl yapılır?” konularından bahsedeceğiz.
Çizgi İzleyen Robot Nedir?
Ç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.
Çizgi İzleyen Robot Nedir?
Ç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.
Gerekli Malzemeler
- Arduino Uno
- Çok Amaçlı Robot Platformu (Biz Platforma kitini kullandık. Dilerseniz bu kiti de kullanabilirsiniz.) Ya da robot gövdesini de kullanabilirsiniz.
- L298N Voltaj Regulatörlü Çift Motor Sürücü Kartı
- 4’lü Çizgi İzleyen Sensör Seti
- Pil ( Alkalin piller robotu yaklaşık 15 dk. verimli şekilde çalıştıracaktır. Li-Po pil kullanmanız robotu daha uzun süre ve daha verimli çalıştıracaktır.)
- 4'lüAA Pil Yuvası
- Jumper
Çizgi İzleyen Robot Devresi
Her şey tamamsa robotumuzun montajına başlayabiliriz.
Öncelikle Arduinomuzu, sürücümüzü, sensörlerimizi ve pilimizi robot platformunda nereye yerleştireceğimize karar vermeliyiz. Sonrasında ise platformu kılavuzdaki adımları takip ederek monte ediyoruz. Devre bağlantılarını da gerçekleştirdikten sonra robotumuz programlanmaya hazır hale geliyor.
Arduino Programı
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); }
Bunları yaparak çizgi izleyen robot devresini yapabilirsiniz.
Siteme uğradığınız için teşekkür ederim.
İG:smtkaann
Mail için ; sametgumus4270s@gmail.com
Yorumlar
Yorum Gönder