Çizgi İzleyen Robot

Her yaştan bireyin bu tarz bir robot yapımı mevcuttur. Arduino UNO ile yapmış olduğumuz Çizgi İzleyen Robot için gerekli malzemeler aşağıda verilmiştir.

  • Arduino UNO

  • 2WD Robot Araba Kiti

  • 9V Pil

  • L298N Motor Sürücü

  • 2 Adet DC Motor

  • Jumper Kablolar

  • 3'lü Çizgi İzleyen Sensör



Devre Şeması aşağıdaki gibi verilmiştir.


Devreyi gerçekleştirip şase üstüne monte ettikten sonra robotun çalışma algoritması oluşturuluyor. Çizgi izleyen robotta mantık şu şekilde; renk farkından faydalanarak bir çizgiyi takip eder. Ortadaki sensör robotun çizgi üzerinde gidebilmesi için her daim çizginin üzerinde olmalıdır. Bu koşulu sağlayana kadar tekerlekler dönmesi gereken yönde döner. Robot kitinin içerisinde bulunan sarhoş teker burada büyük önem taşımaktadır. Sarhoş teker sayesinde araç hareketlerini devrilmeden gerçekleştirebilir.

Kodlama kısmına artık geçebiliriz. Motorun ve kızılötesi sensörün bağlı olduğu pinleri tanımlıyoruz.

#define enA 7
#define enB 6
#define in1 9
#define in2 8
#define in3 11
#define in4 12

#define sol 2
#define orta 3
#define sag 4

Rotasyon belirlemek için sağ, sol ve orta için 0'dan başlayacak şekilde belirleme yapıyoruz.

int sag_s = 0;
int orta_s = 0;
int sol_s = 0;

void setup() içerisinde pinMode'larını tanımlıyoruz. Sensörlerden alınan değerler ile motorlar hareket ettiği için sensörler INPUT motor pinleri OUTPUT olur.

void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);

}

İlerlemesi, sağ ve sol hareketleri için fonksiyonlar oluşturmalıyız.

void ileri()
{
  analogWrite(enA, 200);
  digitalWrite(in1, 0);
  digitalWrite(in2, 1);

  analogWrite(enB, 200);
  digitalWrite(in3, 0);
  digitalWrite(in4, 1);
}

void loop() içerisinde sensörün çıkışlarını gözlemlemek için port ekranına sonuçları yazdırıyoruz.

  sag_s = digitalRead(sag);
  Serial.print("Sağ Sensor: ");
  Serial.println(sag_s);
  orta_s = digitalRead(orta);
  Serial.print("Orta Sensor: ");
  Serial.println(orta_s);  
  sol_s = digitalRead(sol);
  Serial.print("Sol Sensor: ");
  Serial.println(sol_s);  
  delay(1000);

İleri, sağ ve sol için ilerleme koşullarını ve çıktılarını if ile gerçekleştiriyoruz.

 if(sag_s==0 && orta_s==0 && sol_s==0)
  {
    ileri();
  }
    if(sag_s==0 && orta_s ==1 && sol_s==0)
  {
    ileri();
  }
    if(sag_s==0 && orta_s==1 && sol_s==1)
  {
   soldon();
  }
    if(sag_s==0 && orta_s==0 && sol_s==1)
  {
   soldon();
  } 
    if(sag_s==1 && orta_s ==1 && sol_s==0)
  {
   sagdon();
  }
    if(sag_s==1 && orta_s==0 && sol_s==0)
  {
   sagdon();
  } 
   
}

Kodun tamamı aşağıda verilmiştir.

#define enA 7
#define enB 6
#define in1 9
#define in2 8
#define in3 11
#define in4 12

#define sol 2
#define orta 3
#define sag 4

int sag_s = 0;
int orta_s = 0;
int sol_s = 0;

void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);

}

void loop() {
  sag_s = digitalRead(sag);
  Serial.print("Sağ Sensor: ");
  Serial.println(sag_s);
  orta_s = digitalRead(orta);
  Serial.print("Orta Sensor: ");
  Serial.println(orta_s);  
  sol_s = digitalRead(sol);
  Serial.print("Sol Sensor: ");
  Serial.println(sol_s);  
  delay(1000);
 if(sag_s==0 && orta_s==0 && sol_s==0)
  {
    ileri();
  }
    if(sag_s==0 && orta_s ==1 && sol_s==0)
  {
    ileri();
  }
    if(sag_s==0 && orta_s==1 && sol_s==1)
  {
   soldon();
  }
    if(sag_s==0 && orta_s==0 && sol_s==1)
  {
   soldon();
  } 
    if(sag_s==1 && orta_s ==1 && sol_s==0)
  {
   sagdon();
  }
    if(sag_s==1 && orta_s==0 && sol_s==0)
  {
   sagdon();
  } 
   
}
void ileri()
{
  analogWrite(enA, 200);
  digitalWrite(in1, 0);
  digitalWrite(in2, 1);

  analogWrite(enB, 200);
  digitalWrite(in3, 0);
  digitalWrite(in4, 1);
}

void soldon()
{
  analogWrite(enA, 200);
  digitalWrite(in1, 0);
  digitalWrite(in2, 1);

  analogWrite(enB, 200);
  digitalWrite(in3, 0);
  digitalWrite(in4, 0);  
  
}
void sagdon()
{
  analogWrite(enA, 200);
  digitalWrite(in1, 0);
  digitalWrite(in2, 0);

  analogWrite(enB, 200);
  digitalWrite(in3, 0);
  digitalWrite(in4, 1 );  
}






Son Paylaşımlar