Arduino İle Çizgi İzleyen Robot-4 (Programlama ve Algoritma)

ÇİZGİ İZLEYEN ROBOTUN PROGRAMLAMA AŞAMALARI

Arduino programlama Arduino IDE adı verilen yine www.arduino.cc sitesinden ücretsiz olarak indirebileceğiniz bir programlama ara yüzüdür. Arduino IDE programı çalıştırıldığında doğrudan kod yazmaya başlayabiliriz. Şimdi Arduino ile çizgi izleyen programlama aşamalarına geçebiliriz.

Kullanılacak olan komutlar ve tanımları:

 

#define: tanımlama komutudur. Program yazma aşamalarında karışıklıkları engellemesi bakımından pinlere isim vermek için kullanılabilir. Bu komut satırı yerine “int” değişken atama komutu da kullanılabilir.

Açıklama:

#define motor_1  2

#define motor_2  3

#define motor_3  6

#define motor_4  7

Programda kullanılan bu komutlar, Arduino Uno üzerinde bulunan 2, 3, 6 ve 7 numaralı pinlerin numara kullanımı kafa karışıklığına neden olabileceğinden motor_1, motor_2, motor_3 ve motor_4 gibi isimler verilmiştir.

boolean sensor_sag=0;

boolean sensor_orta=0;

boolean sensor_sol=0;

Boolean veri tipinde değişken tanımlanmıştır. Boolean veri tipi bir bitlik veri kaydı yapılan değişkenlerdir. Alabileceği değerler 1 ve 0’dır. Kullanılma amacı ise sağ, sol ve orta sensörlerden herhangi biri siyah çizgiyi algıladığında 1 değerini alacak. Aksi takdirde 0 değerini alacaktır.

void motor_ileri(){

digitalWrite(motor_1,HIGH);

digitalWrite(motor_2,LOW);

digitalWrite(motor_3,LOW);

digitalWrite(motor_4,HIGH);

}

void motor_sag(){

digitalWrite(motor_1,LOW);

digitalWrite(motor_2,LOW);

digitalWrite(motor_3,LOW);

digitalWrite(motor_4,HIGH);

}

void motor_sol(){

digitalWrite(motor_1,HIGH);

digitalWrite(motor_2,LOW);

digitalWrite(motor_3,LOW);

digitalWrite(motor_4,LOW);

}

           void motor_dur(){

          digitalWrite(motor_1,LOW);

          digitalWrite(motor_2,LOW);

          digitalWrite(motor_3,LOW);

          digitalWrite(motor_4,LOW);

          }

Yukarıda verilen komut satırları aslında karışıklığı engellemeye yönelik oluşturulmuş fonksiyonlardır. Yani iş parçalarıdır. Her fonksiyona isim ve görev verilmiştir. Program içerisinde o isim çağrıldığında, fonksiyon içerisinde tanımlanmış olan tüm komutlar işletilecektir. Böylelikle sık kullanılan komut satırları tek isim altında paketlenerek kullanım açısından kolaylık sağlamaktadır. Kullanımı için ise program içerisinde motor_ileri();  yazmamız yeterli olacaktır. Motor_ileri() fonksiyonu çağrıldığında motoru ileri hareket ettirecek kodlar arka planda işleyecektir.

void setup(){

  pinMode(motor_1,OUTPUT);

  pinMode(motor_2,OUTPUT);

  pinMode(motor_3,OUTPUT);

  pinMode(motor_4,OUTPUT);

              }

Bu komut satırlarında ise setup yani tüm kurulum işlemleri yaptırılır. Motorların çalıştırılması için kullanılacak pinler çıkış olarak yönlendirilmektedir.

void loop() {

if(analogRead(A0) >= ref)sensor_sag=1;

else sensor_sag=0;

if(analogRead(A1) >= ref)sensor_orta=1;

else sensor_orta=0;

if(analogRead(A2) >= ref)sensor_sol=1;

else sensor_sol=0;

if(sensor_orta == HIGH){motor_ileri();}

else if(sensor_sag == HIGH){motor_sag();}

else if(sensor_sol == HIGH){motor_sol();}

else motor_dur();

delay(100);

            }

Programın asıl ana yapısını loop() fonksiyonu oluşturmaktadır. Asıl işlemler burada yapılmaktadır. Öncelikle kullanılan üç sensör de sırasıyla analog okuma komutu ”analogRead(pin)” ile okunmaktadır. Renk siyah ile beyaz arasında değiştikçe analog olarak okunan değerde 0 ile 1024 aralığında değerler alacaktır. Sensör siyah rengi algıladığında okunan değer 1024 değerine yaklaşacaktır ancak uygulamada bu değerler ışık, yansıma gibi etkenlerden dolayı farklı değerler verebilir. Fakat yine de yüksek siyah ve beyaz ayrımı yapılacak kadar bariz aralıkta olacaktır. Sensör beyaz rengi algıladığı nispette analog olarak okunan değer 0’a yaklaşacaktır. Örneğin siyah olarak algılanan değer 800 civarında ise ve beyaz olarak okuduğumuz değerde 200 civarında olursa biz referans olarak belirlenen değeri “int ref = 500” yaptığımızda 500 değerinin üzeri siyah, altı ise beyaz renk anlamına gelecektir. Program içerisinde;

if(analogRead(A0) >= ref)sensor_sag=1;

else sensor_sag=0;

 şeklinde kullanılan if-else yapısı bu amaçla kullanılmıştır. Burada okunan analog değeri “ref” değeri ile karşılaştırarak “sensor_sag” boolean tipinde ki değişkenin içeriğini 1 ve 0 olarak atamaktadır. Sensor_sag içeriği 1 ise çizgi siyahtır. 0 ise beyaz renktedir.

Çizgi izleyen robotun çalışmasını özetleyen algoritma yapısı aşağıda görülmektedir.

Algoritma

Yazan: Mehmet Yalçın ASLAN

Arduino İle Çizgi İzleyen Robot-1 (Yapısı ve Çalışması)

Arduino İle Çizgi İzleyen Robot-2 (Kullanılacak Malzemeler)

Arduino İle Çizgi İzleyen Robot-3 (Devre Bağlantılarının Yapılması)

Arduino İle Çizgi İzleyen Robot-4 (Programlama ve Algoritma)

Arduino İle Sumo Robot Yapımı-1

Arduino İle Sumo Robot Yapımı-2

Arduino İle Sumo Robot Yapımı-3

Arduino İle Sumo Robot Yapımı-4

Arduino İle Çizgi İzleyen Robot-4 (Programlama ve Algoritma)” için bir yorum

  • 23/02/2016 tarihinde, saat 19:51
    Permalink

    ELLERİNİZE SAĞLIK MEHMET BEY TEŞEKKÜRLER HER ŞEY İÇİN…

    Yanıtla

Bir Cevap Yazın

%d blogcu bunu beğendi: