Çizgi izleyen robot

“Çizgi İzleyen Robot” beyaz zemine çizilmiş siyah çizgiyi veya siyah zemine çizilmiş beyaz çizgiyi takip edebilmektedir. Bu uygulamada beyaz zemin üzerine çizilmiş siyah çizgiyi takip eden bir robot yaptık. Çizgi renklerinin siyah ya da beyaz olması çok önemli değildir, Arduino programında yapılacak değişikle aynı robot iki zeminde de çalıştırılabilir.Robotun çizgiyi takip etmesinin yanı sıra çizgiyi takip ederken önüne bir engel çıkarsa engeli algılayıp durmasını sağladık. Engel algılayabilmesi için 1 tane MZ80 Mesafe Sensörü kullandık.
mz80 1
Robotun beyaz zemin üzerine çizilmiş siyah çizgiyi algılayabilmesi için 5 tane CNY70 Kızılötesi sensör kullandık. CNY70 içerisinde 2 tane eleman bulunur: Kızılötesi ışık yayan diyot ve foto transistör. Kızılötesi ışık yayan diyottan çıkan ışınlar beyaz bir yüzeye çarparsa geriye yansır ve foto transistör tarafından algılanır. Kızılötesi ışık yayan diyottan çıkan ışınlar siyah bir yüzeye çarparsa ışık soğurulur ve geri yansımaz foto transistör herhangi bir ışık algılayamaz.
cny70 1
CNY70 sensörü bulunduğu zemine göre bir çıkış sinyali üretir. Bizde bu çıkış sinyalini kullanarak Arduino ile çizgi izleyen robotun çizgiyi takip etmesini sağladık. Çizgi izleyen robotun bağlantılarının daha anlaşılır olabilmesi için tek bir devre şeması çizmek yerine parça parça devre şemaları çizdik.
CNY70 ile 74HC14 entegresi ve Arduino arasındaki bağlantılar:
cny70 74hc14
CNY70’in bağlantılarında herhangi bir karışıklık olmaması için “CNY70” yazılı olan tarafı referans alarak delikli plakete takarak lehimledik.
5cny alt
CNY70 bağlantıların daha anlaşılır olması için birde board üzerinde nasıl bağlanacağını açıkladık. CNY70′ lerin bağlantısını board üzerinde gösterirken yazılı kısma dikkat ederek taktık.
cny70
Motor sürücünün motorlarla ve Motor Beslemesi ile olan bağlantısı:
l298n motor surucu
Motor sürücünün üzerinde sarı renkli daire içine alınmış bölüm Arduino pinlerinin bağlandığı bölümdür. Bu kısım daha iyi anlaşılması için aşağıdaki resimde büyütülmüştür.
l298n enable input
Motor sürücünün ENA ve ENB etiketli pinlerinin üzerinde bu pinlere +5V gelmesini sağlayan soketler bulunur. Biz bu pinlere Arduinodan PWM sinyal göndereceğimiz için bu soketleri çıkardık. Ardunonun PWM sinyal gönderebilen 10 ve 11 nolu pinlerini EnableA ve EnableB etiketli pinlere bağladık. Motor sürücünün IN1,IN2,IN3 ve IN4 etiketli pinlerini Arduinonun 8,9,12,13 nolu pinlerine bağladık.
CNY70’in çıkışını 74HC14’e bağlamadan ölçüm yapılırsa siyah zeminde yaklaşık 1V, beyaz zeminde yaklaşık 5V değer görülür. Ama bu değerler değişkendir analog değerlerdir. 74HC14 entegresi bu analog değerleri düzenleyip dijitale çeviriyor ve tersliyor.
74HC14

  • Soldan sağa doğru birinci CNY70’in çıkışını 74HC14’ün 1 nolu bacağına bağlayıp 2 nolu bacağını Arduinonun 6 nolu pinine gönderdik.
  • İkinci CNY70’in çıkışını 74HC14’ün 3 nolu bacağına bağlayıp 4 nolu bacağını Arduinonun 5 nolu pinine gönderdik.
  • Üçüncü CNY70’in çıkışını 74HC14’ün 5 nolu bacağına bağlayıp 6 nolu bacağını Arduinonun 4 nolu pinine gönderdik.
  • Dördüncü CNY70’in çıkışını 74HC14’ün 13 nolu bacağına bağlayıp 12 nolu bacağını Arduinonun 3 nolu pinine gönderdik.
  • Beşinci CNY70’in çıkışını 74HC14’ün 11 nolu bacağına bağlayıp 10 nolu bacağını Arduinonun 2 nolu pinine gönderdik.

Böylece CNY70’ler beyaz zeminde iken lojik0(LOW), siyah zeminde iken lojik1(HIGH) bilgisi Arduinoya gönderilmiş olur.
Arduino Programı:

Arduino programında ilk olarak kullandığımız pinleri isimlendirdik. Hangi sensörü Arduinonun hangi pinine bağladığımızı belirttik. Bu isimlendirmeyi yaptıktan sonra program yazarken pin numaralarını aklınızda tutmanıza gerek kalmaz, pinlere verdiğiniz isimleri yazmak yeterli olur. Sensör bağlı pinleri değiştirmeyi düşünmediğimiz için veri tipi olarak “const int” seçtik. Sensörlerden okunan verileri okuduktan sonra kaydetmek için “int” veri tipinde değişkenler tanımladık.
İki DC motoru Arduinonun 6 tane pinini kullanarak kontrol ettik. Bu pinlerden 2 tanesi ile sağdaki motorun ileri-geri hareket etmesini sağladık. Diğer 2 tanesi ile soldaki motorun ileri-geri hareket etmesini sağladık. Diğer iki tanesini ise Motorların hızlarını ayarlamak için kullandık.
void setup() kısmına geçmeden önce void loop() kısmında kullanmak amacıyla 10 tane fonksiyon tanımladık. ileri(), hafifsaga(), hizlisaga(), dahahizlisaga(), tamhizsaga(), hafifsola(), hizlisola(), dahahizlisola(), tamhizsola() ve dur(). void loop() kısmında bu fonksiyonlardan hangisi çağırılırsa o fonksiyonun içerisindeki işlemler yapılacaktır.
void setup() kısmında pinMode komutuyla sensör bağlı pinleri giriş olarak, motor bağlı pinleri çıkış olarak ayarladık.
void loop() kısmında sensörlerden gelen verileri digitalRead komutuyla okuyup değişkenlere kaydettik. CNY70 sensörlerinden siyah zeminde (lojik1)HIGH, beyaz zeminde (lojik0)LOW bilgileri okunup kaydedilir.
MZ80 mesafe sensörünün önünde bir cisim yokken lojik1(HIGH), önünde cisim varsa lojik0(LOW) bilgisini çıkışından verir. Biz bu bilgiyi robotun önünde engel olup olmadığını algılamak için digitalRead komutuyla okuyup “engelDurum” adlı değişkene kaydettik.
while döngüsü ile robotun önünde bir engel varsa (engelDurum = LOW) olduğu sürece dur() fonksiyonu çalıştırılır, motorlar durur, robot hareket etmez. (engelDurum = HIGH) olduğunda robot while döngüsünden çıkar ve void loop() döngüsündeki diğer komutları işlemeye devam eder.
if – else if komutlarıyla sensörlerden alınan bilgilere göre hangi if şartı sağlanıyorsa o şarta bağlı olarak robotun hareketini sağlayan motorları istenilen yönlerde ve hızlarda döndüren fonksiyonları çağırdık. Tablodaki 1’ler lojik1(HIGH), 0’lar lojik0(LOW) anlamına gelmektedir. Beyaz zemini gören CNY70’ten Arduinoya Lojik0(LOW) bilgisi giderken, siyah çizgiyi gören CNY70’ten Arduinoya Lojik1(HIGH) bilgisi gider.
cyn70 fonksiyon tablo
Robotun mekanik kısmında Engelden Kaçan Robotta olduğu gibi kablo kanalı kullandık. Motorlar fiziksel olarak biraz büyük olduğundan vidalarla ilave yaparak kablo kanalını biraz genişlettik.Motorların tekerleklerle olan bağlantısını yaptıktan sonra motorları robot şasesinin arka tarafına kablo bağı ve sıcak silikon ile sabitledik.
cizgi izleyen robot ici
Robotun ön kısmına sensörleri yerleştirdik ve 1 tane sarhoş tekerlek takarak robotun rahat dönmesini sağladık.
cizgi izleyen alt

Scroll to Top