Şimdi Ara

PID Çizgi İzleyen

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
5 Misafir (1 Mobil) - 4 Masaüstü1 Mobil
5 sn
31
Cevap
2
Favori
7.531
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • PID çizgi izleyen robot.
    Sensör=QTR-8A
    Tekerlek=Banebots
    İşlemci=PIC18F2550@20MHz
    video:
    http://www.youtube.com/watch?v=mppgULN0gZQ

    Yeni video:
    http://www.youtube.com/watch?v=8_bNqDd3pFk



    < Bu mesaj bu kişi tarafından değiştirildi diegorian -- 17 Aralık 2012; 13:23:47 >



  • quote:

    Orijinalden alıntı: maytere

    PID çizgi izleyen robot.
    Sensör=QTR-8A
    Tekerlek=Banebots
    İşlemci=PIC18F2550@20MHz
    video:
    http://www.youtube.com/watch?v=mppgULN0gZQ



    Video geldi, gösterip çekmek olmaz açıklama isteriz...
  • Hangi konuda açıklama isterseniz söyleyin açıklayalım.
  • quote:

    Orijinalden alıntı: maytere

    Hangi konuda açıklama isterseniz söyleyin açıklayalım.


    Nasıl bir pil kullandınız? Ayrıca motorlarınızın özellikleri nasıl?
    Bir iki robotta gördüğüm piller küçük pildi.(tahmini lipo) ama liponun küçük pilleri(tek hücre) 3.7V luk bu durumda motor-pil sıkıntısı olmuyormu? Eğer 7.4v lipo ise yine hangi model olduğu kafamı kurcalıyor...

    Ayrıca PIC-sensör kartı dışında ekstra birşey kullandınız mı? Kullandığınız motor sürücüsü QTR-8A gibi hazır kartmı, yoksa PIC'li devreye kendiniz l293 vb mi eklediniz?

    Son olarak robotta sarhoş teker kullandınızmı? Tekerin konumu ve robotun ölçüleri nasıl?

    Şimdilik sorular böyle...




  • Piller 9V 200mah şarjlı, l293D motor sürücü, ve sarhoş teker kullandım. Sarhoş teker pololunun 3/8" metal tekerleği. Sensörler 6-7mm yüksekte yoldan.
  • Öncelikle teşekkür ederim.
    Peki piller robotu ne kadar götürüyor ve kaç adet kullandınız? Pillerin şarjı için ne kullanıyorsunuz?
    Gözden kaçmış sanırım, sarhoşun konumu nasıl? Bu arada motorlar hala merak konusu... :)

    Son olarak aklıma takılan program kısmı. Çalışma mantığı ile ilgili(özellikle PID) bir iki şey karalarsanız çok sevinirim.
  • Öncelikle şunu söyleyim: rakibiz galiba Motorlar 1000 rpm, sarhoş, sensörlerin tam arkasında. Piller robotu tam kapasitede 1 saate yakın idare ediyor. Fakat yarışmalar en fazla 2 dakika süreceği için pillerin çok uzun süre dayanmasına da gerek yok. Şarj içinde kendi yapmış olduğum bir ayarlı sabit akım kaynağı kullanıyorum. Kod kısmına gelince PID ile ilgili bir çok uygulama var internette. Araştırmanızı öneririm. Örnek olarak:
    http://www.seattlerobotics.org/encoder/200610/article2/index.php
    Bu site tüm PID mantığını anlatıyor. Sensörlerin okunmasından,motorların kontrolüne kadar kodları ile birlikte tüm bilgiler mevcut.
    Kolay gelsin.



    < Bu mesaj bu kişi tarafından değiştirildi diegorian -- 14 Ocak 2011; 16:55:11 >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: maytere

    Öncelikle şunu söyliyeyim: Henüz belli değil, ayrıca bunun paylaşım konusunda çok sıkıntı olacağınıda düşünmemiştim..

    İnternetteki PID çalışmalarından az çok haberdarım link için teşekkür ederim.

    İlginiz için tekrardan teşekkür ederim, başarılar....
  • Rekabet paylaşım için sıkıntı teşkil etmiyor. Fakat hazır paylaşım yerine araştırarak öğrenmek daha faydalı oluyor. Pololu'nun sitesinde PID ile ilgili örnek C kodları da var. Ben kendi kodumu burada paylaşsam bile çözmeniz uzun zaman alacaktır. Çünkü çok karışık yazıyorum ve bazen kendim çözmekte bile zorlanıyorum.
    PID kontrol çizgi izleyene adapte edilirken integral kullanılmasına gerek yok.
    Matık şu şekilde

    Sensör1*0+Sensör2*1000+Sensör3*2000+Sensör4*3000+.......
    ------------------------------------------------------------------
    sensör1+sensör2+sensör3+sensör4+......

    Sensörlerden okunan veriler tabiki analog olmak zorunda. Yukarıdaki bölme işleminden sonra ortaya çıkan değer bizim "okunan" değerimiz. Sensörler tam ortada iken okunan değer ise referans değerimiz.

    Gerisi şöyle:

    Hata=Referans-okunan;
    Düzeltme=hata*P+(hata-bir önceki hata)*D

    "Düzeltme" değerini de motorlara PWM olarak aktarıyoruz.




  • Tekrardan teşekkür ederim.
    Rekabet-paylaşım mevzusu uzun uzun konuşulacak gibi. Yarışmalar esnasında robotlarını kazaklarının altına saklayanlarmı dersin, yarışmalarda soru sorunca kaçacak yer arayanlarmı dersin... neyse dediğim gibi bu uzar gider. :)

    Yanlış anlaşılmasın kesinlikle programın tamamını istediğim falan yok istediğim sadece bu yazdıkların gibi birkaç can alıcı noktayı açmandı, sağolasın...(tabiki mantığını, kodlarla kafa kurcalamaya gerek yok...)
  • Evet ben de bu konudan muzdaribim. Bir de bunu yapanlar çocuk da değil kocaman adamlar ve daha da kötüsü öğretmenler.
  • quote:

    Orijinalden alıntı: maytere

    Evet ben de bu konudan muzdaribim. Bir de bunu yapanlar çocuk da değil kocaman adamlar ve daha da kötüsü öğretmenler.

    + 999999



    < Bu mesaj bu kişi tarafından değiştirildi eMr... -- 15 Ocak 2011; 20:56:40 >
  • 8 kanalı kullanarak her bir kanaldaki değerleri anladığım kadarı ile long tanımlanmış sensor adlı değişkenlere aktardınız.

    long sensor0,sensor1,...;
    ...
    set_adc_channel(0);
    delay_ms(10);
    sensor0=read_adc(0);
    .. şeklinde galiba .okk..pekii
    referans değeri nasıl hesapladınız . ve ben o yazdığınız sensor0*0+sensor1*1000+... /sensor0+sensor1 .. şeklindeki hedef değeri nasıl bulduğunuzu pek anlamadım.umarım sorularımı yanıtlarsınız..:)

    quote:

    Rekabet paylaşım için sıkıntı teşkil etmiyor. Fakat hazır paylaşım yerine araştırarak öğrenmek daha faydalı oluyor. Pololu'nun sitesinde PID ile ilgili örnek C kodları da var. Ben kendi kodumu burada paylaşsam bile çözmeniz uzun zaman alacaktır. Çünkü çok karışık yazıyorum ve bazen kendim çözmekte bile zorlanıyorum.
    PID kontrol çizgi izleyene adapte edilirken integral kullanılmasına gerek yok.
    Matık şu şekilde

    Sensör1*0+Sensör2*1000+Sensör3*2000+Sensör4*3000+.......
    ------------------------------------------------------------------
    sensör1+sensör2+sensör3+sensör4+......

    Sensörlerden okunan veriler tabiki analog olmak zorunda. Yukarıdaki bölme işleminden sonra ortaya çıkan değer bizim "okunan" değerimiz. Sensörler tam ortada iken okunan değer ise referans değerimiz.

    Gerisi şöyle:

    Hata=Referans-okunan;
    Düzeltme=hata*P+(hata-bir önceki hata)*D

    "Düzeltme" değerini de motorlara PWM olarak aktarıyoruz.





  • long tanımlamaya gerek yok, int yeter. O formül en soldaki sensörün 0, en sağdaki sensörün ise çizgiyi gördüğünde 7000 değeri göndermesini sağlıyor. Yani değerler 0-7000 arasında oluyor. Referans da hali ile 3500 oluyor.
  • referans değerimin 3500 olacağını anladım. ok..ancak maalesef okunan değerin formülünü hala anlayamadım.
  • ayrıca bu sensörü okuma işini ne kadarlık bir sürede yaptırıyor sunuz?1 ms ,10 msn, 100us ..bide int yeterli demişsiniz. ancak o değer 7000 gibi de çıkabilir. int 0 ile 255 arasında kullanılmıyor mu?



    < Bu mesaj bu kişi tarafından değiştirildi fbasaris -- 26 Mart 2011; 22:37:39 >
  • Dostum C'ye ve uC programlamadaamatör isen direk PID ile başlayamazsın...
  • aslında soruya cevap verseydiniz daha doğru olurdu diye düşünüyorum...neyse önemli değil..
  • quote:

    Orijinalden alıntı: fbasaris

    aslında soruya cevap verseydiniz daha doğru olurdu diye düşünüyorum...neyse önemli değil..


    Arkadaşım daha int float char nedir ne değildir bilmeden gelip zırt diye PID fonksiyonunu çözmeye çalışıyorsun sonra bir de artis artis yazıyorsun buraya... Git bi int nedir char nedir bunları öğren araştır. Armut piş ağzıma düş yok...
  • cevap için bir kere daha teşekkürler..
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.