İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Çizgi İzleyen Robot Nasıl Çalışır? Sensör ve Motor Karar Mantığı

cizgi-izleyen-robot-nasil-calisir
Bu yazıda neler var?
  1. Çizgi İzleyen Robot Dört Adımlık Bir Döngüdür: Oku, Yorumla, Motorları Ayarla, Tekrarla
  2. Sensör Çizgiyi Nasıl Algılar? Yansıma Değeri ve Eşik Fikri
  3. Koşul Yapısı ve Motor Yönü: İleri, Dur, Ters Dönüş ve Hız Farkıyla Dönüş
  4. İki Sensörlü Karar Tablosu: Dört Durum, Dört Komut ve Çizgi Kaybolunca Ne Yapılır?
  5. Karar Kuralını Python Fonksiyonuna Dökmek: Girdi Sensör Değerleri, Çıktı Komut
  6. Kalibrasyon: Açık ve Koyu Zemin Değerlerinden Eşik Bulmak
  7. Sınır Durumları: Sensör Gürültüsü ve Keskin Dönüşte Çizgiyi Kaybetmek

Çizgi izleyen robot nasıl çalışır sorusunun cevabı tek bir döngüde saklıdır: oku, yorumla, motorları ayarla, tekrarla. Robot zemine bakan sensörlerden bir ölçüm alır, bu ölçümü "çizgi var mı, yok mu" bilgisine çevirir, bilgiye uygun bir motor komutu seçer ve bunu saniyede çok kez yeniden yapar. Robotun "akıllı" görünen davranışı, bu döngüdeki basit bir karar kuralından doğar. Bu yazıda sensör ve motor karar mantığını adım adım kuracağız; belirli bir kart ya da donanım bilgisi gerekmez.

Çizgi İzleyen Robot Dört Adımlık Bir Döngüdür: Oku, Yorumla, Motorları Ayarla, Tekrarla

Robotu üç parçalı bir sistem olarak düşünebilirsin: sensör, karar ve hareket. Sensörler dünyayı ölçer ve sayı üretir. Karar kuralı bu sayıyı bir komuta çevirir. Motorlar komutu fiziksel harekete dönüştürür. Hareket robotun zemindeki konumunu değiştirdiği için sensörlerin bir sonraki ölçümü de değişir ve döngü baştan başlar.

Bu makalenin geri kalanı bu üç parçalı modelin üzerine kurulur. Sonraki bölümlerin her biri döngünün bir adımını açacak: sensör bölümü "oku" ve "yorumla" adımlarını, motor bölümü "motorları ayarla" adımını, kalibrasyon ve sınır durumları ise döngünün neden bazen yanlış çalıştığını ele alacak.

Aşağıdaki sahte kod (pseudocode) döngünün iskeletini gösterir. Belirli bir programlama diline ya da karta ait değildir; yalnızca sıralamayı anlatır:

sonsuza kadar tekrarla:
    sol_deger, sag_deger = sensörleri_oku()

    sol_cizgi_var = yorumla(sol_deger)    # sayıyı "çizgi var / yok" bilgisine çevir
    sag_cizgi_var = yorumla(sag_deger)

    komut = karar_ver(sol_cizgi_var, sag_cizgi_var)

    motorlara_gonder(komut)

Her satır döngünün bir adımına karşılık gelir. sensörleri_oku ham ölçümü alır. yorumla sürekli değişen sayıyı ikili bilgiye çevirir. karar_ver bu bilgiyi bir komuta eşler. motorlara_gonder komutu harekete dönüştürür. Bu yapıyı bozmadan yalnızca karar_ver içindeki kuralı değiştirerek robotun davranışını farklılaştırabilirsin; bu yüzden döngüyü bir kez doğru kurmak sonraki bütün geliştirmelerin zeminidir.

Sensör Çizgiyi Nasıl Algılar? Yansıma Değeri ve Eşik Fikri

Sensör Çizgiyi Nasıl Algılar? Yansıma Değeri ve Eşik Fikri

Çizgi izleyen robotlarda sık kullanılan yaklaşım yansıma temellidir. Sensör zemine ışık gönderir, zeminin geri yansıttığı ışık miktarını ölçer ve buna karşılık gelen bir sayı üretir. Sensörün "çizgiyi gördüğü" yoktur; yalnızca zeminden ne kadar ışık döndüğünü sayıya çevirir.

Açık renkli yüzeyler genellikle daha çok, koyu yüzeyler daha az ışık yansıtır. Bu yüzden aynı sensörün ürettiği sayı, bakılan zemine göre değişir. Bu yazıda bir örnek düzen kullanacağız: açık renkli zemin üzerinde koyu bir çizgi. Bu düzende sensör açık zeminin üzerindeyken daha yüksek, koyu çizginin üzerindeyken daha düşük bir değer verir.

Düzen tersse, yani koyu zemin üzerinde açık çizgi varsa, mantık aynı kalır ama karşılaştırmanın yönü ters çevrilir: bu kez çizgi üzerindeki değer daha yüksek olur. Hangi düzeni kullandığını bilmek, karar kuralını doğru yönde yazmanın ilk şartıdır.

Eşik: sürekli sayıyı ikili bilgiye çevirmek

Sensör değeri bir basamaklı sayı kümesinde sürekli değişir; karar kuralı ise "çizgi var" ya da "çizgi yok" gibi net bir bilgi ister. İkisini birbirine bağlayan şey eşik değeridir: sayıyı iki gruba ayıran sınır.

Kurgusal, birimsiz sayılarla düşünelim. Örnek düzende açık zemin yaklaşık 800, koyu çizgi yaklaşık 200 değeri versin. Bu iki değerin ortasında bir sınır seçebilirsin, örneğin 500. Kural şöyle olur:

  • Değer 500'den küçükse: koyu yüzey, yani çizgi var.
  • Değer 500 ya da büyükse: açık yüzey, yani çizgi yok.

Böylece 180, 230 ya da 310 gibi farklı okumaların hepsi aynı sonuca, "çizgi var" bilgisine dönüşür. 760 ya da 840 gibi okumalar da "çizgi yok" olur. Eşik, ölçümdeki küçük dalgalanmaları tek bir karara indirir ve karar kuralını sadeleştirir. Eşiğin nasıl bulunacağı ve neden her ortamda aynı kalamayacağı, kalibrasyon bölümünde ele alınacak.

Koşul Yapısı ve Motor Yönü: İleri, Dur, Ters Dönüş ve Hız Farkıyla Dönüş

Karar kuralının çıktısı bir motor komutudur; bu yüzden önce robotun hareket alfabesini bilmek gerekir. İki tekerlekli, her tekerleği ayrı bir motorla sürülen bir robot düşün. Hareket tamamen iki motorun yönüne ve hızına bağlıdır:

  • İki motor aynı yönde, aynı hızda: robot düz gider.
  • İki motor da durur: robot durur.
  • Biri yavaşlar ya da durur: robot yavaşlayan tarafa doğru kıvrılır.
  • İki motor zıt yönde döner: robot olduğu yerde döner.

Dönüşün temelinde hız farkı vardır. Robot direksiyon çevirmez; iki tekerleğin hızını farklılaştırarak yön değiştirir. Aşağıdaki kurgusal değerler bunu gösterir (sayılar yalnızca fikri anlatır, belirli bir donanıma ait değildir):

  • Sol motor 60 | sağ motor 60: düz gider.
  • Sol motor 30 | sağ motor 60: sol tekerlek yavaş olduğu için robot sola kıvrılır.
  • Sol motor 60 | sağ motor 30: sağ tekerlek yavaş olduğu için robot sağa kıvrılır.
  • Sol motor 0 | sağ motor 60: sol tekerlek durduğu için robot sola, daha keskin biçimde döner.
  • Sol motor -40 | sağ motor 40: tekerlekler zıt yönde döndüğü için robot olduğu yerde sola döner.

Buradaki ana kural şudur: dönüş yönünü hangi tekerleğin yavaşladığı belirler. Yavaşlayan taraf dönüşün içinde kalır. Bu yüzden yön hatalarını ayıklarken önce "hangi tekerleği yavaşlattım?" diye sormak, sayıları rastgele değiştirmekten daha hızlı sonuç verir.

Hareket alfabesini koşul yapısına bağlamak

Karar kuralı, sensör bilgisinin her kombinasyonunu bu alfabeden bir davranışa eşler. Programlamada bunun doğal karşılığı if / elif / else koşul yapısıdır: if ilk durumu, elif sonraki durumları, else geri kalan her şeyi karşılar. Mantık sözel olarak şöyle kurulur: "sol sensör çizgiyi görüyorsa sola kıvrıl, sağ sensör görüyorsa sağa kıvrıl, hiçbiri görmüyorsa önceden belirlenmiş bir davranışı uygula."

Her sensör kombinasyonunun karşısında tam olarak bir motor davranışı olmalıdır. Karşılığı tanımlanmamış bir kombinasyon, robotun o anda ne yapacağını belirsiz bırakır. Bu eşlemeyi eksiksiz kurmak, döngünün "yorumla" adımından "motorları ayarla" adımına temiz bir geçiş sağlar.

İki Sensörlü Karar Tablosu: Dört Durum, Dört Komut ve Çizgi Kaybolunca Ne Yapılır?

İki sensör iki ayrı doğru/yanlış bilgisi üretir, bu da toplam dört durum demektir. Aşağıdaki tablo bir örnek düzene göre hazırlandı: sensörler çizginin iki yanında duruyor ve hedef, çizginin robotun ortasında kalması.

Sol sensörSağ sensörRobotun durumuKomut
ÇizgideÇizgi dışındaÇizgi sola kaymışSola düzelt
Çizgi dışındaÇizgideÇizgi sağa kaymışSağa düzelt
ÇizgideÇizgideÇizgi ortada ya da kavşak, kalın çizgi olabilirDüz ilerle
Çizgi dışındaÇizgi dışındaÇizgi kaybedildiKarar gerekir

Üçüncü satırda dikkat et: iki sensörün aynı anda çizgiyi görmesi her zaman "her şey yolunda" demek değildir. Çizgi sensörlerin aralığından geniş olabilir ya da bir kavşağa girilmiş olabilir. Basit bir robot bunu düz gitmek olarak yorumlar. Kavşağı ayrıca tanımak istersen bu durum için ayrı bir kural yazman gerekir.

Dördüncü durum: çizgi kaybolunca ne yapılır?

Tabloda tek açık bırakılan satır bu. Üç makul seçenek var:

  • Dur: En güvenli seçenektir. Robot yanlış yöne gitmez ama görevi de sürdüremez.
  • Düz devam et: Çizgi kısa süreli kesiliyorsa (örneğin çizgide küçük bir boşluk varsa) işe yarar. Gerçekten yoldan çıkıldıysa robot daha da uzaklaşır.
  • Son bilinen yöne dön: Robot çizgiyi en son hangi tarafta gördüyse kaybolunca o tarafa döner. Çizgi büyük olasılıkla o yönde kaldığı için keskin virajlarda çizgiyi geri bulma şansı yüksektir.

Son bilinen yön yaklaşımının sınırı da var. Çizgi gerçekten bittiyse ya da robot çizginin dışına tamamen çıktıysa, robot olduğu yerde dairesel arama yapıp dönüp durabilir. Bunu önlemek için aramaya bir zaman ya da adım sınırı koyup süre dolunca durmayı düşünebilirsin. Bu üç seçenekten hiçbiri tek doğru çözüm değildir; pist yapısına ve robotun hızına göre seçilir.

Tabloyu anlamanın iyi bir yolu, kâğıt üzerinde farklı girdilerle elle izlemektir. Sensör değerlerini sırayla uydur, her adımda hangi satıra düştüğünü ve hangi komutun çıktığını yaz. Bu alıştırma, bir algoritmayı kodlamadan önce adım adım izleyebilme becerini hem ölçer hem geliştirir. Dilden bağımsız bir ölçüm istersen ücretsiz Algoritmik Düşünme Testi ile mantık kurma düzeyine bakabilirsin.

Karar Kuralını Python Fonksiyonuna Dökmek: Girdi Sensör Değerleri, Çıktı Komut

Karar Kuralını Python Fonksiyonuna Dökmek: Girdi Sensör Değerleri, Çıktı Komut

Karar mantığını motorlardan ayırmak, kodu hem sade hem test edilebilir yapar. Aşağıdaki fonksiyon sensör değerlerini alır, bir komut metni ve güncellenmiş son yönü döndürür. Motor ya da kart kodu içermez; komutu kendi donanımında motor hızlarına sen çevirirsin. Örnek düzen varsayımı: değer eşikten küçükse sensör çizgiyi görüyor.

def karar(sol_deger, sag_deger, esik, son_yon):
    sol_cizgide = sol_deger < esik
    sag_cizgide = sag_deger < esik

    # İki sensör de çizgideyse düz ilerle
    if sol_cizgide and sag_cizgide:
        return "ILERI", son_yon

    # Yalnız bir sensör çizgideyse o yöne düzelt ve yönü hatırla
    if sol_cizgide:
        return "SOLA", "SOL"
    if sag_cizgide:
        return "SAGA", "SAG"

    # Çizgi kayıp: son görülen tarafa doğru ara
    if son_yon == "SOL":
        return "ARA_SOL", son_yon
    return "ARA_SAG", son_yon


print(karar(300, 700, 500, "SAG"))
print(karar(700, 300, 500, "SOL"))
print(karar(300, 300, 500, "SAG"))
print(karar(800, 800, 500, "SAG"))

Eşik 500 (kurgusal, birimsiz) için beklenen çıktılar şöyledir:

  • (300, 700) için ('SOLA', 'SOL'): sol sensör çizgide, sola doğru düzeltme komutu.
  • (700, 300) için ('SAGA', 'SAG'): sağ sensör çizgide, sağa doğru düzeltme komutu.
  • (300, 300) için ('ILERI', 'SAG'): iki sensör de çizgide, ileri; son yön değişmez.
  • (800, 800) ve son yön sağ için ('ARA_SAG', 'SAG'): çizgi kayıp, sağa doğru arama.

Fonksiyon her döngüde yeniden çağrılır ve döndürdüğü son_yon bir sonraki çağrıya girdi olur. Böylece robot "çizgiyi en son nerede gördüm?" bilgisini taşır.

Kalibrasyon: Açık ve Koyu Zemin Değerlerinden Eşik Bulmak

Sabit bir eşik her ortamda çalışmaz, çünkü sensörün okuduğu değeri yalnızca çizgi belirlemez. Oda ışığı, zeminin yüzey yapısı, çizginin malzemesi ve sensörün zemine olan yüksekliği ölçümü kaydırır. Bir masada 500 iyi bir eşikken başka bir masada robot çizgiyi hiç göremeyebilir.

Eşiği ortama göre bulmak için şu sırayı izleyebilirsin. Önce sensörü açık renkli zeminin üzerine koy, değeri oku ve not et. Ardından aynı sensörü çizginin üzerine koy, o değeri de not et. Son olarak iki değerin ortasını eşik olarak al. Örneğin açık zeminde 800, koyu çizgide 200 okuduysan orta nokta (800 + 200) / 2 = 500 olur. Önceki bölümdeki örnek de bu kurgusal hesaba dayanıyor.

İki sensör birbirinin aynısı olmayabilir; aynı zeminde farklı değerler verebilirler. Bu yüzden her sensör için ayrı açık ve koyu değer ölçüp ayrı eşik bulmayı düşünebilirsin. Bu durumda fonksiyonun tek bir eşik yerine iki ayrı eşik alması gerekir.

Çalışma ortamı değiştiğinde, örneğin başka bir odaya geçtiğinde, ışık koşulları ya da zemin değiştiğinde kalibrasyonu yenilemek iyi bir alışkanlıktır. Orta nokta yöntemi yalnızca basit bir başlangıçtır, eşiği bulmanın tek doğru yolu değildir. Ölçümler dalgalanıyorsa birkaç okumanın ortalamasını almak ya da eşiği iki değerin tam ortası yerine bir tarafa yakın seçmek gibi farklı yaklaşımlar da deneyebilirsin.

Sınır Durumları: Sensör Gürültüsü ve Keskin Dönüşte Çizgiyi Kaybetmek

Dört satırlık karar kuralı örnek düzende temiz çalışır, ama iki durumda zayıf kalır: ölçümler eşiğin hemen çevresinde dalgalandığında ve robot keskin bir dönüşe fazla hızlı girdiğinde.

Sensör gürültüsü: komut neden titrer?

Aynı zemin üzerinde art arda alınan iki ölçüm bile birbirinden biraz farklı çıkabilir. Değer eşikten uzaksa bu fark karara etki etmez. Çizginin kenarında ise okuma eşiğin bir altına bir üstüne atlar ve komut her döngüde değişir; robot yalpalar. Bu durumda iki fikri deneyebilirsin:

  • Ortalama almak: Karar vermeden önce birkaç okumanın ortalamasını kullanmak ani sıçramaları yumuşatabilir. Bedeli, tepkinin biraz gecikmesidir.
  • Ölü bölge (histerezis): Tek bir eşik yerine iki sınır koy. Değer üst sınırı geçince "çizgi yok", alt sınırın altına inince "çizgi var" de; arada kalırsan önceki kararı koru. Böylece eşiğin çevresindeki küçük dalgalanmalar komutu değiştirmez.

Keskin dönüş: dördüncü durum devreye girer

Robot hızlıyken sensörler dönüşte çizgiyi atlayabilir. İki sensör de çizgiyi görmediğinde karar tablosundaki "ikisi de dışarıda" satırı çalışır. Bu satır en az bilgi taşıyan satırdır, çünkü robot hangi yöne kaçtığını bu anki okumadan çıkaramaz. Üç önlem birlikte düşünülebilir:

  1. Hızı düşürmek: Sensörlere çizgiyi görmek için daha fazla zaman tanır.
  2. İç motoru daha çok yavaşlatmak: Düzeltme komutunda iki motor arasındaki fark büyüdükçe dönüş sertleşir.
  3. Son bilinen yönü hatırlamak: Çizgi en son hangi sensörde görüldüyse onu bir değişkende sakla. Çizgi kaybolunca robot o yöne doğru yavaşça dönerek çizgiyi arasın.

Hangi satır nerede zorlanır?

Karar tablosuna yeniden bakarsak zayıf noktalar şöyle eşleşir. "Çizgi ortada" satırı, değer eşiğe yakınsa gürültüden etkilenir ve düz giderken bile gereksiz düzeltme komutları üretir. "Sol sensör çizgide" ile "sağ sensör çizgide" satırları da aynı titreşime açıktır; çizginin kenarında bu iki satır arasında sürekli gidip gelinebilir. "İkisi de dışarıda" satırı ise keskin dönüşte zorlanır ve son bilinen yön bilgisi olmadan robotu doğru yöne çıkaramaz. İki önlem birbirini tamamlar ama hiçbiri tek başına kesin çözüm sayılmaz; her parkurda hız, eşik ve ortalama sayısını yeniden denemek gerekir.

Çizgi izleyen robotun mantığı basittir: oku, yorumla, motorları ayarla, tekrarla. Gerçek parkurda işe yarayan sürüm ise bu döngünün gürültüye ve kaybolan çizgiye karşı hazırlanmış hâlidir. Sensör okumalarını ve karar satırlarını tek tek izlemek, robot beklenmedik davrandığında sorunun nerede olduğunu bulmanı kolaylaştırır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara