ÇİZ İZLEYEN ROBOT YAPIMI

ÇİZGİ İZLEYEN ROBOT YAPIMI

MALZEMELER
  1. Motorlar
  2. Tekerlekler
  3. Çizgi Sensörleri
  4. Motor Sürücüler
  5. MCU Devresi
  6. Batarya
  7. Şasİ


zgi izleyen robotlarda siyah ve beyaz rengi ayırt edebilmek için kullanılabilecek bir kaç farklı sensör vardır. Bunlardan ilki LDR yani ışığa duyarlı dirençlerdir. LDR ve led kullanarak yapılacak bir sensör devresi ile ışık zemine yansıtılır ve zeminden geri yansıyan ışığa göre LDR' nin değişen direnci kullanılarak siyah ve beyaz renk ayırt edilir. Ancak LDR' nin sensör olarak kullanılması için değişen direnç değerinin programda işlenmesi gerekir. LDR nin sensör olarak kullanımı gerek sensör devresinin hazırlanması gerekse kontrol açısından diğer sensör seçeneklerine göre daha teferruatlı olduğundan çok tercih edilmez.

LDR den sonra bir diğer sensör seçeneği de QRD1114 yansımalı sensörlerdir. QRD1114 siyah bir hazne içerisine yerleştirilmiş bir infra-red yayıcı diyot ve bir adet NPN fototransistörden oluşur. Diyotun yaydığı ışık zemin üzerinde yansıyarak fototransistörü tetikler. Beyaz zeminde yansıyan ışık siyah zeminden daha fazla olacağından renklerin ayırımı sağlanır ve analog sinyal alınır. QRD1114 algılaması iyi ve kullanımı kolay bir sensördür. Ancak hem biraz pahalı olduğundan hem de her yerde kolaylıkla temin edilemediğinden CNY70 kontrast sensörleri QRD1114 sensörlere göre daha sık kullanılır.

CNY70 sensörlerde de QRD1114 lerde olduğu gibi bir fotodiyot ve bir fototransistör bulunur. Siyah ve beyaz rengin ayırımı fotodiyotun yaydığı ışığın yüzeye çarparak fototransistörü tetiklemesi ile gerçekleştirilir. CNY70 kontrast sensörü beyaz renk algıladığında 5V seviyesinde siyah renk algıladığında ise 0 volt seviyesinde bir analog sinyal verir. Bu yazıda 3 adet CNY70 sensörün kullanıldığı bir çizgi izleyen robot alatılacaktır.
Algoritma düzenlemek
çizgi izleyen robot algoritmaYandaki şekilde 3 sensörlü bir çizgi izleyen robotun pist üzerindeki durumları basitçe gösterilmektedir. Buna göre:
A) Çizgi izleyen robotun en sol sensörü çizgi üzerindedir. Yani çizgi izleyen robot yolun sağ tarafındadır. Bu nedenle çizgi izleyen robotun piste doğru yönelmesi için sağ motorun ileriye doğru çalışması sol motorun ise bu esnada durması gerekmektedir.
B) Çizgi izleyen robotun en sağ sensörü çizgi üzerindedir. Yani çizgi izleyen robot yolun sol tarafındadır. Bu nedenle çizgi izleyen robotun piste doğru yönelmesi için sol motorun ileriye doğru çalışması sağ motorun ise bu esnada durması gerekmektedir.
C) Çizgi izleyen robotun orta sensörü çizgi üzerindedir. Yani çizgi izleyen robotun pist üzerindeki konumu doğrudur. İki motor da ileri doğru sürülmelidir.
Robotun mekanik tasarımı
Çizgi izleyen robotlar mekanik açıdan çeşitli uygulamalara müsait robotlardır. Sumo robotlardaki gibi sınırlar yoktur. Ama en çok kullanılan mekanik düzeneklerden biri arkadan iki adet dc redüktörlü motorla itişi sağlanan sistemdir. Bu tasarımda robotun ön orta kısmına yerleştirilecek bir sarhoş tekerlek ise dönüş kolaylığı sağlayacaktır. Robotun gövdesini tasarlarken dikkat edilmesi gereken en önemli nokta da robotta kullanılacak olan motorlara uygun bir gövde tasarlanmasıdır. Hem motorların yerleştirilmesi için gerekli vida ya da kravat delikleri belirlenmeli hem de motorların gücüne uygun ağırlıkta bir gövde tasarlanmalıdır.
Çizgi İzleyen Robot Devre Şeması
Elektronik Devre Tasarımı

Yanda çizgi izleyen robotunuzda kullanabileceğiniz bir devre şeması verilmiştir. Devre PIC16F84A mikrodenetleyicisi ile kontrol edilen 3 CNY70 kontrast sensörlü bir çizgi izleyen robot devresidir.
Robotun programının yazılması
ASM , C veya Pic Basic Pro gibi programlama dillerinden birinde çizgi izleyen robotunuzun programını yazabilirsiniz. Özellikle programcılığa yeni başlayanlar için Pic Basic Pro daha uygun bir dildir. Çünkü üst seviye bir dil olduğundan komutları ve döngüleri daha kolay kavranabilir. Programın akış diyagramı aşağıdadır.
çizgi izleyen robot flowchart
Parçaları birleştirmek ve robotu denemek
Son aşamaya geldiğinizde öncelikle robotunuzun tekerleklerini ve motorlarını gövdenin üzerine yerleştirip sabitleyin. Daha sonra sensörlerinizin ve ana devrenizin konumlandırmasını yapın ve sensörler ile motorların ana devreye bağlantılarını yapın. Robotunuzun voltaj beslemesi için alkaline kalem pil kullanmanız en uygunudur. Herşeyi monte ettikten sonra siyah çadır bezinden oluşan zeminin üzerine beyaz elektrik bandı ile çizgi izleyen robotunuzu denemek istediğiniz pisti çizin ve robotunuzu deneyin. Eğer robotunuz pisti düzgün takip etmiyor ise hatanın kaynağını tespit etmek  robot tasarımı ve yapımı kısmında belirtilen noktaları  kontrol edin.
















KODLARI
#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);
  
}
ALMAK İSTEYENLER 
https://www.robotzade.com/urun/arduino-cizgi-izleyen-robot-kiti?gclid=Cj0KCQjwi8fdBRCVARIsAEkDvnJ-kkh-E4isyAHW_6otlAonKgaRsHkOHIwK9Gkwoh3q0f8qQAuU54AaAuwfEALw_wcB
BU LİNKE TIKLASIN

Yorumlar

Popüler Yayınlar