menu search
  • Kaydol
brightness_auto

Hoş geldiniz! TÜRKLER SORUYOR PLATFORMU'na katılmak ister misiniz? Hemen kayıt olun veya giriş yapın.

more_vert

Teknoloji tasarım dersinde yaptığımız çizgi izleyen robot projemde düz yolda sorun yok ama iş keskin virajlara gelince robot çizgiyi kaybedip kontrolden çıkıyor. Sensörlerin konumunu denedim, motor hızlarını da ayarladım ama bir türlü oturmuyor. Acaba kodda PID kontrolü falan mı yapmam gerekiyor, daha önce hiç denemedik de?

thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme

1 cevap

more_vert

Harika bir soru! Teknoloji tasarım dersindeki çizgi izleyen robot projenle yaşadığın bu durum, emin ol ki bu alana gönül vermiş herkesin en az bir kez karşılaştığı, hatta 'Kabullenme Safhası'na geçmeden önce epey kafa yorduğu bir meseledir. Keskin dönüşlerde robotunun çizgiden çıkması, aslında çok doğal ve beklenen bir durum. PID kontrolü konusu ise bu işin bir sonraki seviyesi ve evet, çoğu zaman şart olmasa da, işi ustalıkla çözmek için altın anahtardır.

Gelin, robotunun virajlarda neden sendelediğini anlamaya ve bu soruna pratikten başlayıp, PID'ye kadar uzanan çeşitli çözümler bulmaya çalışalım.

Arduino Çizgi İzleyen Robotun Keskin Viraj Sorunu: Neden Oluyor?

Robotunun düz yolda sorunsuz ilerleyip, virajlarda çizgiden çıkmasının arkasında yatan birden fazla sebep olabilir. Bunu bir araba kullanmak gibi düşünebilirsin: düz yolda gaza basmak kolaydır ama virajlarda hem hızını hem de direksiyonunu çok daha dikkatli ayarlaman gerekir.

1. Temel Sebepler: Hız ve Algılama Yetersizliği

  • Hız Faktörü: Robotun düz yolda ne kadar hızlı olursa olsun, virajlara aynı hızla girmesi neredeyse her zaman bir felaketle sonuçlanır. Virajlarda merkezkaç kuvveti robotunu dışarı doğru itmeye çalışır. Hız ne kadar yüksekse, bu kuvvet de o kadar artar ve robot çizgiyi takip edemez.
  • Sensör Mimarisi ve Sayısı:
    • Az Sensör: Genellikle iki sensörlü robotlar, çizgiyi sadece iki noktadan algıladığı için virajlarda nerede olduğunu anlamakta zorlanır. Çizgiyi algılama penceresi çok dardır.
    • Sensör Konumu: Sensörler robotun önünde çok içeride veya çok dışarıda olabilir. Çizgiye olan mesafeleri de önemlidir.
    • Algılama Genişliği: Robotun sensör dizisi, çizgiyi yeterince geniş bir alanda algılayamıyor olabilir.
  • Basit Motor Kontrolü: Robotun motorlarını sadece "tam ileri", "sol motor dur/sağ motor ileri" gibi basit komutlarla kontrol ediyorsan, virajlardaki mikro ayarları yapamazsın. Bu, direksiyonu sadece tam sağa veya tam sola çevirmeye benzer; ara geçişler yoktur.

2. Mekanik ve Fiziksel Etkenler

  • Ağırlık Merkezi: Robotunun ağırlık merkezi çok yüksekte veya dengesizse, virajlarda daha kolay devrilme veya savrulma eğilimi gösterir.
  • Tekerlekler ve Zemin Sürtünmesi: Tekerleklerinin zemine tutunma kapasitesi ve tekerlekler arasındaki sürtünme farkları, viraj performansını etkileyebilir.
  • Robotun Boyutu: Daha büyük ve uzun robotlar, küçük dönüş yarıçaplı virajlarda daha fazla zorlanır.

PID'ye Atlamadan Önce Deneyebileceğin Pratik Çözümler

PID kontrolü gerçekten güçlü bir araçtır ancak bazen çok daha basit ayarlamalarla da problemi büyük ölçüde çözebilirsin. "Daha önce hiç denemedik de" demen, öncelikle bu temel çözümleri denemenin önemini artırıyor.

1. Sensör Düzeninde İyileştirmeler

  • Daha Fazla Sensör Kullan: Eğer imkanın varsa, iki sensör yerine en az üç, tercihen beş veya daha fazla sensör kullanmak, robotunun çizgiyi çok daha hassas algılamasını sağlar. Beş sensörlü bir dizilimde, ortadaki sensör çizgiyi takip ederken, yanlardaki sensörler robotun çizgiden ne kadar saptığını belirlemede harika iş çıkarır.
  • Sensör Dizilimini Optimize Et: Sensörleri, robotun çizgiyi geniş bir alanda algılayacak şekilde dizmelisin. Genellikle ortadaki sensör çizginin tam üzerinde, diğerleri ise eşit aralıklarla sağa ve sola doğru yerleştirilir. Bu, virajlarda çizgiyi "önceden görmesini" sağlar.
  • Sensör Yüksekliği ve Kalibrasyonu: Sensörlerin zeminden optimum yükseklikte olduğundan emin ol. Çok yüksek veya çok alçak olması, algılamayı olumsuz etkiler. Ayrıca, sensörlerini siyah çizgi ve beyaz zemin için kalibre etmeyi unutma. Bu, sensörlerin çizgiyi daha güvenilir bir şekilde ayırt etmesini sağlar.

2. Motor Hızlarını Dinamik Hale Getirme

Bu, en temel ve etkili çözümlerden biridir. Motorlara sadece "aç/kapa" komutu vermek yerine, PWM (Pulse Width Modulation) kullanarak hızlarını kademeli olarak kontrol edebilirsin.

  • Virajda Yavaşlama: Robotun viraja girdiğini nasıl anlarsın? Örneğin, en dıştaki sensörlerden biri (sağ veya sol) çizgiyi algıladığında, robot viraja giriyor demektir. Bu durumda, her iki motorun hızını belirli bir oranda düşürebilirsin.
    `arduino
    // Pseudo kod
    if (sol_dis_sensor_cizgide || sag_dis_sensor_cizgide) {
    hiz = dusuk_hiz; // Örneğin 100
    

    } else {

    hiz = normal_hiz; // Örneğin 180
    

    }
    analogWrite(sol_motor_pin, hiz);
    analogWrite(sag_motor_pin, hiz);
    `

  • Dinamik Dönüş Ayarı: Virajlara özel olarak, dönüş yönündeki motorun hızını düşürüp, ters yöndeki motorun hızını biraz artırarak robotun daha keskin ve yumuşak dönmesini sağlayabilirsin.
    `arduino
    // Pseudo kod
    if (sol_dis_sensor_cizgide && !sag_dis_sensor_cizgide) { // Sola dön
    analogWrite(sol_motor_pin, dusuk_donus_hizi); // Örneğin 50
    analogWrite(sag_motor_pin, yuksek_donus_hizi); // Örneğin 150
    

    } else if (sag_dis_sensor_cizgide && !sol_dis_sensor_cizgide) { // Sağa dön

    analogWrite(sol_motor_pin, yuksek_donus_hizi);
    analogWrite(sag_motor_pin, dusuk_donus_hizi);
    

    } else { // Düz git

    analogWrite(sol_motor_pin, normal_hiz);
    analogWrite(sag_motor_pin, normal_hiz);
    

    }
    `
    Bu yaklaşımla, sensörlerinden gelen verilere göre motor hızlarını analogWrite() fonksiyonu ile ayarlayarak çok daha esnek bir kontrol sağlayabilirsin.

PID Kontrolü: Neden Bir Sonraki Seviye ve Nasıl Başlanır?

Yukarıdaki yöntemler genellikle basit parkurlarda işe yarar. Ancak daha karmaşık, keskin ve sürekli dönüşleri olan parkurlarda robotunun adeta piste yapışmasını istiyorsan, PID kontrolü senin için vazgeçilmez olacaktır. PID, robotunun tıpkı profesyonel bir yarış pilotu gibi, anlık duruma göre gaz, fren ve direksiyon ayarı yapmasını sağlar.

PID Nedir ve Neden Önemli?

PID (Proportional-Integral-Derivative) kontrolü, robotunun çizgiden ne kadar saparsa sapsın, bu sapmayı en hızlı, en düzgün ve en doğru şekilde düzeltmesini sağlayan bir geri bildirim döngüsü algoritmasıdır. Bu üç terim, hatayı farklı açılardan değerlendirir:

  1. P (Proportional - Oransal): Robotun çizgiden ne kadar saptığına bakar. Hata ne kadar büyükse, düzeltme (motor hızı farkı) o kadar büyük olur. Yani robot çizgiden ne kadar uzaksa, o kadar sert dönmeye çalışır.
  2. I (Integral - Tümlenmiş): Robotun geçmişteki hatalarını ve bu hataların ne kadar süreyle devam ettiğini göz önünde bulundurur. Küçük ama sürekli sapmaları zamanla biriktirerek düzeltir. Bu sayede robotun çizgiden hafifçe kayıp gitmesini engeller.
  3. D (Derivative - Türevsel): Robotun hatasının değişim hızına bakar. Yani, robotun çizgiden ne kadar hızlı bir şekilde uzaklaştığını veya yaklaştığını inceler. Bu, ani sapmalara karşı erken tepki vermeyi ve robotun çizgiyi aşırı düzeltip diğer tarafa savrulmasını (salınım yapmasını) engellemeyi sağlar.

PID Nasıl Uygulanır? (Basitçe)

PID'yi uygularken temel mantık şudur:

  1. Sensörlerden Hata Değerini Hesapla: Tüm sensörlerinden gelen veriyi tek bir "konum" veya "hata" değerine dönüştürmen gerekir. Örneğin, 5 sensörün varsa, bu sensörlere 0'dan 4'e kadar puanlar verip, algıladıkları çizginin ortalama konumunu hesaplarsın. Hedef konum genellikle bu aralığın tam ortasıdır.
    `current_position = (sensor_0_degeri0 + sensor_1_degeri1 + ... + sensor_4_degeri4) / (toplam_sensor_degeri); * hata = hedef_konum - current_position;` (Hedef konum genelde 2.0 veya 2.5 gibi bir değerdir.)

  2. PID Bileşenlerini Hesapla:
    `P_term = Kp hata; * integral_hata += hata; * I_term = Ki integral_hata;`
    derivative_hata = hata - onceki_hata;
    `D_term = Kd derivative_hata; * onceki_hata = hata;`

  3. Kontrol Çıkışını Belirle:
    * pid_output = P_term + I_term + D_term;

  4. Motor Hızlarını Ayarla: Bu pid_output değeri, motor hızlarını ne kadar ayarlaman gerektiğini gösterir.
    sol_motor_hizi = base_speed + pid_output;
    sag_motor_hizi = base_speed - pid_output;
    * Burada base_speed düz yoldaki temel hızındır. pid_output pozitifse, robot sola dönecektir (sol motor hızlanır, sağ yavaşlar). Negatifse sağa dönecektir.

PID Katsayılarını Ayarlama (Tuning): Sabır Anahtarı!

Kp, Ki ve Kd katsayılarını doğru bir şekilde ayarlamak (tuning), PID'nin en kritik ve en çok sabır gerektiren kısmıdır. Genellikle "deneme yanılma" yöntemiyle başlanır:

  1. Kp'yi Ayarla: Ki ve Kd'yi sıfır yaparak başla. Kp değerini yavaşça artır. Robotun çizgide "sallanmaya" (titreşim yapmaya) başladığı noktayı bul. Sallanma başladığında Kp'yi biraz düşür. Robotun çizgiyi hızlıca düzeltmeye başladığını ama hala biraz salınım yaptığını görmelisin.
  2. Kd'yi Ayarla: Şimdi Kd değerini yavaşça artır. Kd, robotun aşırı düzeltme yapıp diğer tarafa savrulmasını engeller. Kd'yi artırdıkça robotun salınımları azalacak ve daha yumuşak bir şekilde çizgiyi takip etmeye başlayacaktır.
  3. Ki'yi Ayarla: Son olarak Ki'yi yavaşça artır. Ki, robotun çizgiden küçük sapmaları zamanla düzeltmesini sağlar ve uzun düzlüklerde tam olarak çizgide kalmasına yardımcı olur. Ki'yi çok artırırsan, robot geç tepki verir ve yine salınıma başlayabilir.

Bu süreçte seri portu kullanarak hata ve pid_output değerlerini anlık olarak takip etmek, sana katsayıları ayarlarken çok yardımcı olacaktır.

Uzman Tavsiyeleri ve Unutulmaması Gerekenler

  • Adım Adım İlerle: Önce sensör dizilimini, sonra temel hız kontrolünü, ardından PID'yi denemek en mantıklı yoldur. Her adımı başarıyla tamamlamadan bir sonrakine geçme.
  • Robotunun Mekaniğini Gözden Geçir: Bazen yazılım ne kadar iyi olursa olsun, kötü bir mekanik yapı yüzünden robot istediğin gibi çalışmaz. Tekerleklerin sürtünmesi, motorların gücü ve robotun dengesi gibi faktörleri unutma.
  • Temiz ve Aydınlık Bir Parkur: Test parkurunun çizgisinin net, kalınlığının tutarlı ve aydınlatmanın sabit olduğundan emin ol. Farklı ışık koşulları sensörleri yanıltabilir.
  • Pes Etme: Robotik projeler, özellikle de ilk deneyimler, deneme yanılma ve sabır gerektirir. Her "başarısızlık", aslında sana neyin işe yaramadığını öğreten bir derstir.
  • Kaynakları Araştır: Arduino çizgi izleyen robotlar ve PID kontrolü ile ilgili tonlarca örnek kod ve açıklama bulabilirsin. Başkalarının nasıl çözdüğünü görmek sana ilham verecektir.

Kısacası, evet, keskin dönüşlerde çizgi izleyen robotunun çizgiden çıkması oldukça yaygın bir problem ve PID kontrolü, bu problemi çözmenin en sofistike ve etkili yollarından biridir. Ancak önce basit ayarlamaları denemek, ardından PID'ye geçmek, hem öğrenme sürecini kolaylaştırır hem de robotunun performansını kademeli olarak artırmanı sağlar.

Bu proje, sana sadece robot yapmayı değil, aynı zamanda problem çözme, analitik düşünme ve mühendislik yaklaşımını da öğretecek harika bir fırsat. Emin ol, robotun o keskin virajı başarıyla döndüğünde hissedeceğin tatmin, her şeye değecek! Başarılar dilerim!

thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme

İlgili sorular

thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
2 cevap

8,908 soru

16,403 cevap

34 yorum

109 üye

Çevrimiçi Kullanıcı Sayısı: 6
0 Üye 6 Ziyaretçi
Bugünkü Ziyaretler: 454
Dünkü Ziyaretler: 3421
Toplam Ziyaretler: 4767205

Son Kazanılan Rozetler

sibel_Çelik Bir rozet kazandı
mehmet_kaya Bir rozet kazandı
ozer_sahin Bir rozet kazandı
sibel_Çelik Bir rozet kazandı
süleyman_Şahin Bir rozet kazandı
...