“Çizgi izleyen robot (PCB gövde)” üzerine 25 yorum

  1. 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.

  2. 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

    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

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

Bir cevap yazın

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