Hızlı Çizgi izleyen robot (PCB gövde)

Çizgi izleyen robot kodu:

qtr-sensors-arduino documentation.

ÖNEMLİ UYARI! Yukarıdaki kod Qtr 3.0 kütüphane kodlarıdır. Arduino güncel kütüphanesi 4.0 dır. aşağıdaki kütüphaneyi yüklemezseniz hata verecektir.

qtr-sensors-arduino-3.0.0 kütüphane dosyası

QTR-8x datasheet

QTR_arduino_library

Hızlı Çizgi izleyen robot (PCB gövde)

araba_hizli proteus dosyası

hizli_cizgi_izleyenSTL

“Hızlı Çizgi izleyen robot (PCB gövde)” üzerine 37 yorum

  1. Öncelikle paylaşımınız çok güzel , çok yardımcı oldu, emeğinize sağlık. Söylediğiniz daha kapsamlı videonuzu ne zaman yayınlayacaksınız hayırlı geceler.

  2. Merhaba qtr 8 a sensör kullanıyoruz aurdino uno kullandığımızdan dolayı 6 tane analog çıkış kullanıyoruz tek tekeri dönüyor sadece bunu sebebi ne olabilir aceba?

    1. Sensörden çok motor sürücü problemi gibi görünüyor. Kodu veya kablorı kotrol edin motor sürücüde.

  3. Ustam emeğine sağlık. Çok güzel bir paylaşım. AIN1-AIN2-BIN1-BIN2 pinlerini motor dönüş yönü için kullanıyorsun sanırım. Sadece AIN1 ve BIN1 kullanamazmıyız..

  4. Öncelikle iyi günler. Kodu yüklediğimde aşağıda belirttiğim kodu işaret edip “expected identifier before numeric constant” diye bir hata alıyorum. Bunu düzeltmek için ne yapmalıyım?
    } while((sensor([3])<200)||(sensor([4])<200));//çizgi dışında olduğun sürece dön

    1. kopyala yapıştır nedenli olabilir. kod penceresinin sağ üst köşesindeki open code ‘un sağındaki download skecth butonuna basın veya mail adresinizi yazın .ino dosyasını göndereyim.

  5. hocam en kısa zamanda bir sumo calışmasıda bekliyorum.. harika anlatım.. allah razı olsun

    1. stby 0 yapıldığında pololu tb6612fng motor sürücüsünü pasif bırakır. şuan kodda işlevi yok. kaldırılabilir.

        1. Şöyleki bu devrede stby ucu kullanılmak için tasarlanmış. ama farklı bir tasarımda motor sürücünün STBy ucunu 5 volta verirsek yazılımda bunu kullanmak zorunda da kalmayız

  6. Merhabalar , verdiğiniz kod ile qtr8a ve 1000 rpm motor kullanarak bir çizgi izleyen robot geliştirdim . Ancak bu robot 90 derecelik dönüşleri alamıyor. hızını biraz düşürüp (bahsettiğim değer 45 civarında ) denediğimde ise yumuşak dönüşleri alıp 90 derece olanları zorlanarak bazen geçiyor bazen geçmiyor.
    Sizce sıkıntı nerededir ?
    Kp&Kd değerlerini değiştirmeyi denedim ancak sağlıklı sonuçlar alamadım , değerleri denerken nasıl bir yol izlemeliyim ?
    18*14cm bir robot için nasıl Kp&Kd değerleri atamalıyım ?

          1. tekrar denedim fakat kafasına göre hareket ediyor robot. neden kaynaklanabilir? kp-kd değerleriyle de oynadım ama pek değişmiyor gibi.

          2. son verdiğinizi de denedim. önceki hiç çalışmıyordu ama bu daha iyi tabi ufak tefek değişiklikler yaparak. ben 6 sensör kullanıyorum. uno da 6 adet anolog çıkış var diğer 2 sini nasıl bağlayabilirim? bir de bu son denediğim kodda sanki ortadaki 2 sensör işlevsiz gibi devamlı sağ ya da sol motor çalışıyor tekler gibi gidiyor. devamlı sağa ya da sola ata ata gidiyor yani. normal yolunda hızlanıp gitmiyor hiç. çoğu yeriyle oynadım. bu 2 sorumu cevaplarsanız çok sevinirim.

          3. Uno da 6 analog giris oldugundan 6 adet sensör kullanabilirsiniz. Sağa sola kafa atmasının titremesinin sebebi kp kd degerlerinin büyük gelmesidir. Kucultun.

          4. merhabalar tekrar :)sizin kodlar üzerinde çalışıyorum ama tam olarak oturmadı sanki. son verdiğiniz kodlara göre birkaç sorum olacak.

            1- verdiğiniz kodlardaki en keskin dönüş 90 derece diye anlıyorum doğru mu acaba? Mesela Z tarzındaki dönüşlerde sıkıntı oluyor gibi? yoksa ben mi yanlış yapıyorum birşeyleri? 🙂

            2- daha önceden hiç bilmediğimiz(ölçülerini vs vs gibi) bi pistte sorunsuz çalışması için hızını ister istemez düşük tutmamız gerekir sanırım değil mi? başka nelere dikkat etmeli?

          5. Z leri dönebilecek komut ile diğerini birleştirmemiz mi gerekiyor o zaman? yani hem normal hem 90 hem de z gibi dönüşler için. yani amacım hiç bilmeden koyduğum pisti sonuna kadar tamamlatmak. 🙂

            ayrıca hızlanma komutlarını da gönderirim demişsin yapisti bilmeden nerde hızlanıp yavaşlayacağımız biraz zor olur sanırım değil mi?

            Bu arada çok teşekkürler cevaplar için.

          6. son gönderdiğim kod aslında tüm dönüşleri yapar. pisti bilinmeyen yerde hızlanmak için tek çare uzun mesafe renk sensörü.ancak garip açılı boşlukları olan pistlerde özel kod yazmadan geçmek imkansız tabii ki

  7. Merhaba, ben bu kodu L298N ile uyumlu olacak hale getirdim fakat kod çalışmadı. Sensör değer veriyor fakat motorlar çalışmıyor. Yardımcı olur musunuz? Kod bu:

    #include

    const int enA = 10; //L298N
    const int enB = 5;
    const int in1 = 9; //motor a (sol)
    const int in2 = 8; //motor a (sol)
    const int in3 = 7; //motor b (sağ)
    const int in4 = 6; //motor b (sağ)

    #define NUM_SENSORS 6
    #define TIMEOUT 4
    #define EMITTER_PIN 2

    #define LED 13
    #define MZ80 4

    int maxhiz = 70;

    boolean zemin = 0; //1 siyah 0 beyaz

    //PD’yi kullanmak için değişkenleri bildirme (her araca göre ayar yapılmalı)
    int hata = 0; float KP = 0.01; // hata (her araca göre ayar yapılmalı)
    int turev = 0; float KD = 0.1; // turev

    unsigned int pozisyon = 0;

    int fark = 0; // motorlara uygulanan fark
    int son_hata; // Orantılı son değer (hatanın türevini hesaplamak için kullanılır)
    int hedef = 3500;

    QTRSensorsAnalog qtra((unsigned char[]) {
    0, 1, 2, 3, 4, 5
    } , NUM_SENSORS, TIMEOUT, EMITTER_PIN);

    unsigned int sensor[NUM_SENSORS];

    void setup()
    {
    pinMode(in1 , OUTPUT);
    pinMode(in2 , OUTPUT);
    pinMode(enA , OUTPUT);
    pinMode(in3 , OUTPUT);
    pinMode(in4 , OUTPUT);
    pinMode(enB , OUTPUT);
    pinMode(LED , OUTPUT);
    pinMode(MZ80 , INPUT);

    // Dahili Led yanıp söndüğü sürece (3sn) Elle Kalibrasyon yap
    for ( int i = 0; i maxhiz ) fark = maxhiz;
    else if ( fark < -maxhiz ) fark = -maxhiz;

    ( fark = 0 )
    {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    else
    {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    deger *= -1;
    }
    analogWrite(enA, deger);
    }

    void solmotor(int deger)
    {
    if ( deger >= 0 )
    {
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    }
    else
    {
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    deger *= -1;
    }
    analogWrite(enB, deger);
    }

    void motor(int sol, int sag)
    {
    solmotor(sol);
    sagmotor(sag);
    }

    1. Herhangi bir değişiklik yapmadan l298n motor sürücü ile de kullanabilirsin kodu.

      Senin buraya yazdıgin kodda loop fonksiyonu ve pek çok şey eksik.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.