Arduino ile Çizgi izleyen Robot Yapımı

313 69.954
Çizgi izleyen robotun çalışma prensibi :
İki farklı şekilde çizgiyi takip eder.
  1. Siyah zemin üzerinde beyaz çizgiyi takip etmek
  2. Beyaz zemin üzerinde siyah çizgiyi takip etmek
Robot hakkında bilgiler:
Kızılötesi sensörler sayesinde siyah veya beyaz çizgiyi takip eder.Kısaca algoritmadan baysedersek , ortadaki sensör çizginin üzerine geldiğinde robot düz devam eder.Soldaki sensörler çizginin üzerine gelirse sola, sağdaki sensörler çizginin üzerine gelirse robot sağa hareket eder.
Malzemeler:
  1. Arduino Uno
  2. QTR-8RC Kızılötesi Sensör
  3. L293D Motor sürücü kartı
  4. Robot Kit

Malzemeleri Satın Al

Qtr8rc üzerinde 8 tane alıcı verici bulunmaktadır.Arduino ile çizgi izleyen robot projesinde 5 tane sensör kullanarak çizgiyi takip ettirdik.Arduino bağlantısında istediğiniz 5 sensörü kullanabilirsiniz.Fakat 5 sensör de ard arda olmalı ki aksi halde aradaki boş sensörler çizgiyi takip etmeyeceğinden robotunuz çizgi dışına çıkabilir. Yazılımda sensörler analog 1 den 5 e kadar pinlere tanımlanmıştır.Burada dikkat etmeniz gereken nokta a5 den 1 e kadar ki bağlantınız sensör de soldan sağa aynı şekilde olsun.Motor sürücü arduino üzerine direk takılıyor.Sadece motor pinlerine bağlantılarını yapıp düz takıldığını kontrol etmelisiniz.
Afmotor Shield için Arduino Kodu:
#include <AFMotor.h>
#include <QTRSensors.h>

AF_DCMotor motor1(1, MOTOR12_8KHZ );
AF_DCMotor motor2(2, MOTOR12_8KHZ );

#define KP .2
#define KD 5
#define M1_minumum_hiz 120
#define M2_minumum_hiz 120
#define M1_maksimum_hiz 210
#define M2_maksimum_hiz 210
#define MIDDLE_SENSOR 3
#define NUM_SENSORS 5
#define TIMEOUT 2500
#define EMITTER_PIN 2
#define DEBUG 0

QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup()
{
delay(1500);
manual_calibration();
set_motors(0,0);
}

int lastError = 0;
int last_proportional = 0;
int integral = 0;

void loop()
{
unsigned int sensors[5];
int position = qtrrc.readLine(sensors);
int error = position - 2000;

int motorSpeed = KP * error + KD * (error - lastError);
lastError = error;

int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
int rightMotorSpeed = M2_minumum_hiz - motorSpeed;

// set motor speeds using the two motor speed variables above
set_motors(leftMotorSpeed, rightMotorSpeed);
}

void set_motors(int motor1speed, int motor2speed)
{
if (motor1speed > M1_maksimum_hiz ) motor1speed = M1_maksimum_hiz; //MAKSİMUM MOTOR 1 HIZ LİMİTİ
if (motor2speed > M2_maksimum_hiz ) motor2speed = M2_maksimum_hiz; // MAKSİMUM MOTOR 2 HIZ LİMİTİ
if (motor1speed < 0) motor1speed = 0; // MİNIMUMMOTOER 1 HIZ LİMİTİ
if (motor2speed < 0) motor2speed = 0; // MİNİMUM MOTOR 2 HIZ LİMİTİ
motor1.setSpeed(motor1speed); //1.MOTOR HIZI
motor2.setSpeed(motor2speed);// 2.MOTOR HIZI
motor1.run(FORWARD); //İLERİ
motor2.run(FORWARD); //İLERİ
}

void manual_calibration() {

int i;
for (i = 0; i < 250; i++)
{
qtrrc.calibrate(QTR_EMITTERS_ON);
delay(20);
}

if (DEBUG) {
Serial.begin(9600);
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();

for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
}
}

Engel Algılama Özellikli Çizgi İzleyen Robot

Güncelleme : 19.01.2016
Projenin L298N entegresi ile yapımı:
Bu kısımda sadece motor sürücüyü değiştirdik. Sensör pinleri aynı ve bağlantılarında değişiklik yok.
Yukarıdaki L298N entegresinin datasheetine bakalım ve aşağıdaki gibi bağlantılarımızı yapalım.
Sol Motor için: output1 ve output2 pinleri motorun uçlarına bağlayın. input1 ve input2 pinleri arduinonun 9 ve 10. dijital pinlerine, enableA ise dijital 4. pine takın.
Sağ Motor için: output3 ve output4 pinleri motorun uçlarına bağlayın. input3 ve input4 pinleri arduinonun 11 ve 12 dijital pinlerine, enableB ise dijital 5. pine takın.
Enerji Pinleri: Supply voltage vs yazılı pin bizim motorlar için besleme pilimizin artı uç girişidir. 9v yeterlidir.
Logic supply voltage vss yazılı pini arduinonun 5v pinine takın.
currentsensingA ve currentsensingB pinlerini 0.47ohm 5W direnç üzerinden pilin eksi ucuna bağlayın.
Son olarak da Gnd yazılı pini hem arduinun hem de pilin eksi ucuna bağlayın.
Güncelleme – 30.11.2016
Projenin L293B veya L293D Motor Sürücüleri ile Devresi:
L298N , L293B ve L293D Motor Sürücüleri için Arduino Kodu:
//Çizgi izleyen robot
//www.robimek.com
#include <QTRSensors.h>
#define SolMotorileri 9
#define SolMotorGeri 10
#define SagMotorileri 11
#define SagMotorGeri 12
#define ena 4
#define enb 5

#define KP .2
#define KD 5
#define M1_minumum_hiz 120
#define M2_minumum_hiz 120
#define M1_maksimum_hiz 210
#define M2_maksimum_hiz 210
#define MIDDLE_SENSOR 3
#define NUM_SENSORS 5
#define TIMEOUT 2500
#define EMITTER_PIN 2
#define DEBUG 0
int lastError = 0;
int last_proportional = 0;
int integral = 0;
QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup() {
pinMode(SolMotorileri,OUTPUT);
pinMode(SolMotorGeri,OUTPUT);
pinMode(SagMotorileri,OUTPUT);
pinMode(SagMotorGeri,OUTPUT);
pinMode(ena,OUTPUT);
pinMode(enb,OUTPUT);
delay(1500);
manual_calibration();
set_motors(0,0);

}

void loop() {
unsigned int sensors[5];
int position = qtrrc.readLine(sensors);
int error = position - 2000;

int motorSpeed = KP * error + KD * (error - lastError);
lastError = error;

int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
int rightMotorSpeed = M2_minumum_hiz - motorSpeed;

set_motors(leftMotorSpeed, rightMotorSpeed);

}

void set_motors(int motor1speed, int motor2speed)
{
if (motor1speed > M1_maksimum_hiz ) motor1speed = M1_maksimum_hiz; //MAKSİMUM MOTOR 1 HIZ LİMİTİ
if (motor2speed > M2_maksimum_hiz ) motor2speed = M2_maksimum_hiz; // MAKSİMUM MOTOR 2 HIZ LİMİTİ
if (motor1speed < 0) motor1speed = 0; // MİNIMUMMOTOER 1 HIZ LİMİTİ
if (motor2speed < 0) motor2speed = 0; // MİNİMUM MOTOR 2 HIZ LİMİTİ
analogWrite(ena,motor1speed);
analogWrite(enb,motor2speed);
digitalWrite(SolMotorileri,HIGH);
digitalWrite(SagMotorileri,HIGH);
digitalWrite(SolMotorGeri,LOW);
digitalWrite(SagMotorGeri,LOW);

}

void manual_calibration() {

int i;
for (i = 0; i < 250; i++)
{
qtrrc.calibrate(QTR_EMITTERS_ON);
delay(20);
}

if (DEBUG) {
Serial.begin(9600);
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();

for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
}
}
Projede kullanılan kütüphaneler ve kodları buradan indirebilirsiniz >> Çizgi İzleyen Robot
Bunlar da İlgini Çekebilir
Cevap bırakın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

313 Yorum
  1. Ahmet

    yukarıda iki tane kod var hangisini kullanacağız

  2. Hakan

    yukarıda iki tane kod var hangisini kullanacağız

  3. Furkan

    Siyah zemin üzerinde beyaz yolu takip etmesi için ne yapmamız gerekiyor öğrenebilir miyim acaba?

  4. Oguzhan

    Merhaba kodlar çalıştı ancak doksan derece ve keskin dönüşlerde yoldan çıkıyor. Bunu nasıl düzeltebiliriz.

  5. Utkan

    Sezgin Abi 8li QTR ile nasıl olur?

    1. Sezgin GÜL

      Utkan şöyle yapmalısın.
      #define NUM_SENSORS 5 değeri 8 olacak,
      QTRSensorsRC qtrrc((unsigned char[]) kısmındaki { 19,18,17,16,15} sensör pinlerini 8 tane tanımla
      loop kısmındaki unsigned int sensors[5]; değerini 8 yaparak kullanabilirsin.

  6. Bilge

    5 sensör yerine 6 sensör kullanırsak kodu nasıl değiştirmeliyiz

  7. Bilge

    Ena ve enb pinlerini PWM bir pine bağlamak gerekmiyormı

  8. Emin Bayram

    Sezgin abi L298n ile yapınca sensörden bağımsız çalışıyor. Neden olabilir?

  9. utkan subaşı

    Sezgin abi benim sağ motor 130 hızın altında çalışmıyor. Neden Olabilir

  10. utkan subaşı

    Sezgin abi benim sağ motor 130 hızın altında çalışmıyor. Neden Olabilir

  11. UTKAN SUBAŞI

    Sezgin abi benim sağ motor 130 hızın altında çalışmıyor.

  12. Recep Yavuz

    Merhaba. Bu proje için tüm malzemeler var. Bir tek motor sürücü entegresi yok. Ancak L298N motor sürücü kartı var. Acaba bununla yapmak mümkün mü? Motor sürücü kartında L298N in datasheet inde gösterildiği kadar uç yok. Ena Enb lerle birlikte toplam 6 çıkış var. Bu kart ile mümkün mü acaba çizgi izleyen?

    1. Emin Bayram

      aynı sıkıntı bende de var. yardımcı olursanız sevinirim…

      1. Utkan

        Evet,mümkündür koddaki sağ motor ileri geri ve sol motor ileri geri çıkışlarını IN lere ena ve enb yi ise 5-4 e bağlayın motor bağlantılarını da out lardan yapın

  13. salih

    selamlar güzel paylaşımınız için teşekkürler.
    kodun bu kısmında:
    int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
    int rightMotorSpeed = M2_minumum_hiz – motorSpeed;

    sol motorun hızı neden artarken sağınki azalıyor açıklar mısnız?

  14. Sumeyye

    Sezgin abi robotta değişiklikler yapsin ama tam olarak kullanilan malzemelerin listesi ve toplam tutar fiyatini yazarmisin ona göre yapicam

  15. UTKAN SUBAŞI

    Sezgin Ani Ben utkan beyaz çizgide gitmio benimki ne yapayım

    1. Sezgin GÜL

      int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
      üstteki fonksiyonu bul + yeri – yap.
      aşağıdaki fonksiyonu bul ordaki – işareti + yap
      int rightMotorSpeed = M3_minumum_hiz – motorSpeed;

      1. UTKAN SUBAŞI

        Sezgin Abi bu kafasına göre takılıyor dediğini de yaptım ama yapılabilecek başka bir şey varmı

        1. Sezgin GÜL

          sırayla sensörleri tak çalışır

  16. Gurbet

    C:\Users\Casper\Desktop\sketch_jun01b\sketch_jun01b.ino:1:24: fatal error: QTRSensors.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    KARDES BU HATAYI VERIYO NAPCAM…….

    1. Ali veli

      Qtr8rc kütüphanesini kurdumu

  17. ali veli

    rica etsem l298p ile yapılmıs kodunu paylaşırmısınız.Tessekürler.

  18. emin

    ıyı gunler. l298n sürücü devresi üzerindeki vs , vss, currentsensingA ve currentsensingB pinleri hangileri oluyor acaba ? yardımcı olurmusunuz.

  19. Ali fatih

    Sezgin bey;
    QTR 8rc yerine QTR 8a kullandık. 8a analog olduğu için koddaki QTRSensorsRC yerine QTRSensorsanalog yazdık. başka bir değişiklik yapmamıza gerek var mı aceba?. birse Motor sürücü olarak l298N kullandık. 6V pili tam olarak bu motor sürücüye nasıl bağlayacağız? sürücü üzerindeki 12v girişini nereye bağlayacağız? tesekkürler.

  20. Erman

    merabalar devreyi kurdum beyaz zemin üzerinde siyah çizgiyi takip ediyor ama aynı zamanda siyah zemin üzerinde de beyaz çizgiyi takip ettirmem lazım ne yapmam gerekiyor yardımcı olurmusunuz

    1. mucahit

      bana yardımcı olurmusunuz

  21. Savaş

    Abi merhabalar abi araç kipini ayarladım ardinio yu araca nasıl monte edicem yardımcı olursan sevinirm araca tekerlek motor ve pili taktım motorlar çalışıyor çipleri nasıl yerleştircez bi yardımcı olursan sevinirim

  22. Bahadır

    abi senin burada kastettiğin motor sürücü shield mı
    ben normal L293D almıştım yanlış oldu galiba

  23. selman

    merhaba verdiğiniz bilgileri kullanarak yaptım ve motorlarım dönmüyor sebebi ne olabilir

    1. Sezgin GÜL

      merhaba selman, öncelikle devreyi yeniden kontrol et. yine de dönmüyor ise koddaki şu değerleri biraz arttır.
      #define M1_minumum_hiz 120
      #define M2_minumum_hiz 120
      #define M1_maksimum_hiz 210
      #define M2_maksimum_hiz 210

      maks hızı 255 min hızı da 180 civarı yapabilirsin. Normalde koddaki değerler yeterli fakat gerilim ve akım değeri düşük pil kullandıysan dönmemesi normaldir.

      1. selman

        teşekkür ederim deniyeceğim

      2. selman

        motorlarım çalıştı fakat sensör falan bişey görmüyor motorlar sensöre göre tepkide vermiyor ne yapabilirim

  24. Mehmet

    Şu kod neden çalısmıyor bilgi verirmisiniz ?

    #include
    #include

    #define NUM_SENSORS 3
    #define TIMEOUT 2500
    #define EMITTER_PIN QTR_NO_EMITTER_PIN

    AF_DCMotor motor1(1, MOTOR12_64KHZ);

    int DonmeHizi = 250;

    QTRSensorsRC qtrrc((unsigned char[]) {2, 4, 7}, 3);
    unsigned int sensorValues[NUM_SENSORS];

    void setup()
    {

    motor1.setSpeed(250);

    delay(500);
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);
    for (int i = 0; i < 400; i++)
    {
    qtrrc.calibrate();
    }

    digitalWrite(13, LOW);

    Serial.begin(9600);
    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtrrc.calibratedMinimumOn[i]);
    Serial.print(' ');
    }
    Serial.println();

    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtrrc.calibratedMaximumOn[i]);
    Serial.print(' ');
    }
    Serial.println();
    Serial.println();
    delay(1000);
    }

    void loop()
    {
    unsigned int position = qtrrc.readLine(sensorValues);

    for (unsigned char i = 0; i 250)
    {
    motor1.run(FORWARD);
    }
    else if (sensorValues[1] < 250){

    motor1.run(RELEASE);
    }
    }
    Serial.println(position);

    delay(250);
    }

  25. tolga

    ustam biz ayrı bir program yazdık robot çalıştı yalnız ustam yarıştırcağımız pistte kısa yollar var o kısa yola girmesi için programda napmak lazım

    1. samet

      Tolga kardeşim sen 8 rc ilemi yazdın ?

  26. Samet

    qtr 3 rc ile bu projeyi yapmak istesek ne degişiklik yapmalıyız ?

    1. Sezgin GÜL

      Aşağıdaki gibi değişiklik yapınız.
      #define MIDDLE_SENSOR 3 değerini 2 yapın
      #define NUM_SENSORS 5 değerini 3 yapınız.
      Ayrıca pin tanımlamasında 5 pin tanımını 3 pine indirin.

      1. Samet

        Malesef Çalısmadı program derledi ama calısmıyor :/

        1. Samet

          Sezgin BEY BUNU QTR-3RC kullanarak Motor shıld kullanarak arduıno uno da yapmak istiıyorum yardımcı olabilirmisiniz ?

      2. Samet

        #include
        #include

        AF_DCMotor motor1(1, MOTOR12_8KHZ );
        AF_DCMotor motor2(3, MOTOR12_8KHZ );

        #define KP .2
        #define KD 5
        #define M1_minumum_hiz 120
        #define M3_minumum_hiz 120
        #define M1_maksimum_hiz 210
        #define M3_maksimum_hiz 210
        #define MIDDLE_SENSOR 2
        #define NUM_SENSORS 3
        #define TIMEOUT 2500
        #define EMITTER_PIN 2
        #define DEBUG 0

        QTRSensorsRC qtrrc((unsigned char[]) { 4,5,6} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

        unsigned int sensorValues[NUM_SENSORS];

        void setup()
        {
        delay(1500);
        manual_calibration();
        set_motors(0,0);
        }

        int lastError = 0;
        int last_proportional = 0;
        int integral = 0;

        void loop()
        {
        unsigned int sensors[3];
        int position = qtrrc.readLine(sensors);
        int error = position – 2000;

        int motorSpeed = KP * error + KD * (error – lastError);
        lastError = error;

        int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
        int rightMotorSpeed = M3_minumum_hiz – motorSpeed;

        // set motor speeds using the two motor speed variables above
        set_motors(leftMotorSpeed, rightMotorSpeed);
        }

        void set_motors(int motor1speed, int motor2speed)
        {
        if (motor1speed > M1_maksimum_hiz ) motor1speed = M1_maksimum_hiz; //MAKSİMUM MOTOR 1 HIZ LİMİTİ
        if (motor2speed > M3_maksimum_hiz ) motor2speed = M3_maksimum_hiz; // MAKSİMUM MOTOR 2 HIZ LİMİTİ
        if (motor1speed < 0) motor1speed = 0; // MİNIMUMMOTOER 1 HIZ LİMİTİ
        if (motor2speed < 0) motor2speed = 0; // MİNİMUM MOTOR 2 HIZ LİMİTİ
        motor1.setSpeed(motor1speed); //1.MOTOR HIZI
        motor2.setSpeed(motor2speed);// 2.MOTOR HIZI
        motor1.run(FORWARD); //İLERİ
        motor2.run(FORWARD); //İLERİ
        }

        void manual_calibration() {

        int i;
        for (i = 0; i < 250; i++)
        {
        qtrrc.calibrate(QTR_EMITTERS_ON);
        delay(20);
        }

        if (DEBUG) {
        Serial.begin(9600);
        for (int i = 0; i < NUM_SENSORS; i++)
        {
        Serial.print(qtrrc.calibratedMinimumOn[i]);
        Serial.print(' ');
        }
        Serial.println();

        for (int i = 0; i < NUM_SENSORS; i++)
        {
        Serial.print(qtrrc.calibratedMaximumOn[i]);
        Serial.print(' ');
        }
        Serial.println();
        Serial.println();
        }
        }

        1. Samet

          Calısmalımı ? bu program bakarmısın

          1. Sezgin GÜL

            çalışır

          2. Samet

            Çalışmıyor ama baska ne sebep olabilir sizce ?

  27. musa

    Hocam merhabalar ben l298n ile olanı yaptım motorlar gecıkmeli baslıyor sensörlerden herhangi veri gelmiyor 19 18 17 16 15 ben sensor arduino bağlantılarını sensorun 1.pini arduino a1 2.pin a2 şeklinde A5 e kadar bağladım herhangi bir problem var mıdır? bağlantıda yardımcı olursanız cok memnun olurum maılde atmıstım sıze konu ile alakalı

    1. Sezgin GÜL

      Robotu çizgi üzerine koyduğunuzda çizginin solundan sağına olacak şekilde sensörleri sırasıyla a5 den a1 e kadar takınız. Yani en soldaki sensör a5 ve en sağdaki de a1 e takılı olacak. 8 tane sensörün 5 ini kullanırken arada sensör atlamadan takınız.

  28. Doğukan

    Arduino:1.6.11 (Windows 10), Kart:”Arduino/Genuino Uno”

    C:\Users\doguk\Documents\Arduino\_izgi_izlyn_rbt_robimek\_izgi_izlyn_rbt_robimek.ino:4:24: fatal error: QTRSensors.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    Abi bu hatayı alıyorum yardım edermisiniz

  29. mert

    sensör olarak qtr 8rc yerine qtr 8a kullanınca neleri değiştirmeliyiz

    1. Mehmet

      gerçekten

    2. mert baskın

      Arduino:1.8.0 (Windows 10), Kart:”Arduino/Genuino Uno”

      C:\Users\MERT BASKIN\Documents\Arduino\mennan\mennan.ino:4:24: fatal error: QTRSensors.h: No such file or directory

      #include Preferences.

      böyle hata veriyor kodda niye oluyor sizin kodunuzu kopyaladım

  30. Nadir

    Mrb brn hazir 5 li monte edilmis sensot aldim.ama bunda ledon cikisi yok.5 sensor cikisi, NEAR ve CLP seklinde cikislar var.sizin kodlarinizda ve semanizda emitter digital pin2 ye baglanmis.bunu elimdeki 5li sensorle bunu nasil yapabilirim sizin kodlarinizi degistirmeden.?tesekkurler

  31. Bahattinates

    merhaba. hersey icin. tesekkurler. sizin.sayenizde. cok seyler. ögrendim.sagolun.
    allaha.emanet olun

    1. Cingöz Recai

      A büyük yazılır

      1. berke beyy

        ne kadar zekisin öyle sen

  32. Doğukan

    Abi senörün bacakları 8 tane arduino ya hangi pinleri bağlayacağım bide senörün güç bağlantıları nasıl bağlayacağım

  33. PINAR

    CNY70 Kızılötesi Sensör ü kullanarak yapmak istesem nasıl yapabilirim bu konuda yardımcı olabilir misiniz ?

  34. Fırat KAYA

    Hocam birde bi sorum daha var.ben sadece in1 ile in3 e pwm verdiğimde hızlandırıp yavaşlatabiliyorum .bu yanlış bir yöntem mi acaba.doğrusu sizin yazdığınız şekilde mi

  35. Fırat KAYA

    sezgin hocam kolay gelsin.Bu 2000 değeri sensör tam ortadayken position diye yazdırılan değer mi acaba.bu bende 2500 ile 5000 arasında değişiyor sanırım ne yapmalıyım

  36. mehmet

    tamam dediğiniz gibi yapıyorum ama olmuyor işte.. bi türlü çözemedim problemi..

    1. Sezgin GÜL

      hız değerleri maksimum 255 olmalı ve minimum ile maksimum hız değeri arasında biraz fark bırakmalısınız. örneğin maksimum hız değeri 220 iken minimum hız değeri 180 olsun.
      Ayrıca motor sürücüyü besleyen pil uygun volt ve akımda olmalı projede kullandığım pil 6v 700 mah di. tabi sizdeki motorlara uygun besleme yapın. 9v pil kömür ile beslemeyin akımı düşüktür karşılamaz.

  37. mehmet

    yardım edin de bu gece bitirelim şu işi ..mübarek gece..:D

  38. mehmet

    200 e kadar çıkardım hız değerini ama malesef yukarda dediğim gibi int error = position – 2000; deki 2000 i 200 e dusurunce iki tekerde çalışıyo ama çizgiyi izlemiyo..

    1. Sezgin GÜL

      error kısmını değiştirme sadece hız değerini arttır

      1. mehmet

        hız değerini 600 lere çıkarınca iki tekerde dönüuor ama çizgiyi takip etmiyor..

  39. mehmet

    günlerdir bu proje ile uğraşıyorum en sonunda sensör bozuk olabilir diye yeni bir sessör aldım.. taktım çalıştı ama bir süre sonra o da çalışmaz oldu.. yeni bir sensör daha aldım ama çalışmadı.. motor sürücü kartını.. arduinoyu fln hep değiştirdim ama olmadı.. tek teker dönüyor sadece.. ayrı ayrı pille besliyom.. farklı konumlarda deniyom sensörü fln ama olmuyo bitürlü..

    1. Sezgin GÜL

      tek motorun çalışmama durumu iki nedenden kaynaklıdır. birincisi yeterli enerji olmadığıdır. ikincisi ise kodda minimum hız değeri düşük yani pwm çıkışında motoru hareket ettirmek için yeterli olmayabilir. tabi bu da enerjiyle alakalı. ama minimum değeri arttırırsan motor hareket edecektir. yalnız maksimum değeri de orantılı olarak arttırman gerekir. çünkü keskin dönüşlerde yoldan çıkma ihtimali yükselir.

      1. mehmet

        motor sürücü kartındaki m1 m2 m3 m4 ten aynı anda ikitanesi çalışmıyor.. sadece bir tanesi çalışıyor.. o çalışan blüme hangi tekeri takarsam sadece o çalışmış oluyor..

        1. Sezgin GÜL

          minimum hız değerini arttırın. ve uygun enerji ile besleyin.

        2. mehmet

          son durum şöyle
          int error = position – 2000;

          burdaki 2000 i 200 yapınca iki tekerde çalışıyor ancak çizgiyi takip etmiyor..
          sanırım kp kd değerleri ile oynanacak.. ne yapabilirim..

          1. mehmet

            hem arduinoya hem de motor sürücüye 9v duracel takıyorum.. sms tek teker çalışıyo yukarda dediğim gibi koddaki 2000 i 200 ye dusurunce iki teker de çalışıyo ama çizgiyi takip etmiyor..

          2. Sezgin GÜL

            kodda minimum hız değerini arttırın

      2. yalçın yelpaze

        Merhabalar sezgin kardeşim.Yapmış oldugun bu robotta sensör QTSEnsör değilde normal çizgi izleyen sensör olsa bu koda nasıl uyarlarız onu. bu gün içinde dönersen sevinirim

  40. Özgün Hazar

    iyi günler.
    ben bu projeyi yapmaya çalışıyorum elimde malzemeler var ve projeyi breadboard üzerinde yapıyorum ve L293D entegre olarak var . bağlantıları yapmakta başarısız oldum, kızılötesi sensörün bağlantısını nasıl yapmamız gerekiyor elinizde bir bağlantı şeması yada bilgi alabileceğim başka bir proje varmı kızıl ötesi sensörün bağlantısına bakabileceğim.Yardımcı olabilirseniz çok müteşekkir olurum.
    Şimdiden teşekkürler.

  41. Yakup PALİÇ

    sezgin hocam merhaba.
    qtr8rc ile çizgi izleyen robot yapıyorum. sensör çizgiyi algılamıyor.lehimlerini kendim yaptım..aynı projeyi arkadaşlarım yapıyor.Aynı kodla bütün elemanlar aynı onların robotu çizgiyi takip ediyor.arkadaşların sensörünü benim robota bağlıyorum benimkide çalışıyor.kendi sensörümü deneme kodlarıyla deniyorum sensörde sıkıntı yok gibi duruyor.Sebebini anlayamadım.yardımcı olurmusunuz.

  42. mehmet

    arduino uno R3 L293B motor sürücü QTR 3RC sensör kartı kullanarak yaptım fakat sensör yeterlimi ucuz diye aldım yeterli ise kodunu nasıl yazabilirim acil bi proje yardımcı olursanız çok iyi olur zaman sıkıntısı var

    1. Sezgin GÜL

      kodda sensör sayısını 3 e indirmelisiniz. ayrıca orta sensor tanımını da 2. sensör yani 2 yapmalısınız. sensör iş görür fakat robot hızlı giderse çizgiden çıkma olasılığı 5 sensörlü robota göre yüksek olur.

      1. musa

        sorun var hocam kodlarda 19 18 pinleri var mega herhalde resimde uno anolog pinlere bağlanmıs

  43. Kaan

    Robot 90 derece ve beyaz ksımda çalışmıyor bunun için napmalıyız ??

  44. murat caner

    öncelikle çok teşekkür ederim hocam eline sağlık çok güzel olmuş bu makalen.Benım bi sorum olcaktı hocam. Robotu sorunsuz olarak çalıştırdım beyaz zemin ve siyah çizgide ama benım istediğim tam tersi yani siyaz zemin beyaz cizgide gitmesini istiyorum . Fazla bilgim olmadığı için yapamadım yardımcı olursan çok sevinirim hocam,
    Allah Razı olsun iyi çalışmalar…

    1. musa

      murat hocam bı yardımcı olursanız cok tesekkur ederim

  45. burak

    merhaba com5 erişim engellendi sorunu alıyorum

  46. muhammed

    selam arkadaşlar ban bi konu hakındas bilgi verebilir misiniz

  47. Oğuzhan

    Hocam kolay gelsin ben bu projede siyah yerine beyaz çizgiyi takip ettirmek için ne yapmam gerekiyor ? programın neresinde bir değişiklik yapmam gerekiyor.

    1. Hasan Hoca

      Cevabı bulabildiniz mi?

  48. ömer

    robotun motorları çalışıyor ama sensörçalışmıyor QTR-8A

  49. Burak

    Merhaba. Qtr 8A kullandım ledon pinini nereye bağlamalıyım shield üstünde

    1. murat caner

      LEDon pini digital 2 pinine bağla

  50. burak

    merhaba shield kodunu yükledim ancak sadece tek motor dönüyor …

    1. Sezgin GÜL

      hız değerlerini arttır ya da voltajı arttır.

  51. burak

    merhaba
    L293d ve QTR-8A bağlantısını yaptım ışık yanıyor ancak motor dönmüyor.. Yukarıdaki shield için kodu mu yoksa L298n İÇİN KODU MU YÜKLEMELİYİM …teşekürler

  52. furkan

    yazılımı hatasız yükledim ama sadece ışıklar yanıyor motorlar dönmüyor

    1. Sezgin GÜL

      motorlar için yeterli enerji vermediğinizden kaynaklıdır.

  53. RECEP

    L298 ile yaptım projeyi.

  54. RECEP

    Kolay gelsin sezgin bey. ben QTR-8A ile yaptım kodlarda da sadece QTRSensorsRC qtrrc((unsigned char[]) { 14,15,16,17,18} yaptım ve sorunsuz şekilde çalıştı yani kodda qtra yapmadan çalıştı. Siyah zemin üzeri beyaz çizgide kod değişikliği yapmadan çalışır mı ? böyle bi ortam hazırlayamadım şu anda deneyemedim. kod değişikliği varsa nasıl olması gerekiyor yazabilirmisiniz? şimdiden teşekkür ederi. iyi çalışmalar.

    1. Sezgin GÜL

      siyah zemin için kodu düzenlemeniz gerekiyor.

      1. RECEP

        çok zamanınızı almazsa yazabilirmisiniz ? kod bilgim yetmiyor şu anda bunu yapmaya.

  55. Bir Dost

    Bütün Projelerunu İnceledik Kendimizce Yapmaya Çalıştık Helal Osun İşinde Süpersin Dostum
    😀 😀 😀

  56. kardelen

    Merhaba Sezgin Bey, dediğiniz gibi tb6612fng motor sürücünün datasheetine baktım ancak sizin verdiğiniz kodda 9.10.11.12 pinleri motora bağlı bu datasheette ise sürücünün AIN1,STYB,BIN1.BIN2 bu kısımlara bağlı olarak gösteriyor. O kısımlara sürücü bağlandığında motorlar çalışmıyor ancak direkt olarak motorlar bağlandığında motorlar çalışıyor. Bu durumu nasıl çözebilirim?

  57. muratt

    mrblar sezgin bey acaba projenin arduino uno ile yapılmıs baglantı seması varmı atabilirmisiniz ??

  58. kardelen

    İyi günler Sezin Bey, çizgi izleyen robotumda tb6612fng motor sürücü kullanıyorum ancak arduino uno ma bağlantısını yapmakta çok zorlandım yardımcı olur musunuz?

    1. Sezgin GÜL

      sürücünün datasheetine bakarak bağlantıları yapabilirsiniz.

  59. mehmet ısık

    qr sensorden 8-7-6-5-4 numaralara takınca iki teker de çalışıyor ancak çizgiyi takip etmiyor..
    ne yapabilirim.. 1den 5 e kadar takınca sadece tek teker çalışıyor..

    1. Sezgin GÜL

      sensörleri sırası ile doğru şekilde takmalısınız. Bir de emitter pini yani ledon pinini de arduinoda 2. dijital pine takın.

  60. MURAT

    Sezgin bey merhaba ;
    Biz engel algılayan ve çizgi izleyen robot yapıyoruz. Kodları ayrı ayrı yazdık. Fakat birleştirme ve çalıştırma kısmında sorun yaşıyoruz. Kesme gönderip birini aktif birini pasif etme durumlarından bahsediyorum.Yazdığımız kodu size mail üzerinden göndersek ilgilenme durumunuz olur mu ?
    şimdiden teşekkürler ..

  61. mehmet ısık

    gönderdim görseli mailinize..

  62. mehmet

    sezgin bey videodaki gibi.. qtr sensorun vvc ve gnd lerinden çıkan mavi ve yeşil renkli kabloları motor sürücünün üzerindeki gnd ve 5v larına bağladım.. sensorun 1 den beşe kadar olan çıkışları motor sürücü üzerindeki a1-a5 e kadar bağladım.. ancak sensorden çıkıp arduinoya bağlanan beyaz bir kablo var.. o nereye bağlanıyor..ne işe yarıyor bilemedim..

    1. Sezgin GÜL

      videodaki beyaz kablo sensörün ledon pininden arduinonun 2.dijital pinine bağlantı kablosudur. Yani ledon pini kodda da emitter olarak geçer kesme işlemi yapar.

      1. mehmet ısık

        O SEKİLDE BAĞLADIM AMA HALA RANDUMANLI ÇALIŞMIYOR..BAZEN İKİ TEKERDE ÇALIŞIYO BAZEN BİRİSİ ÇALIŞIYO..

        1. Sezgin GÜL

          maksimum ve minimum hız değerlerini değiştir. sensörü de doğru konumlandır çizgiyi okuması için.

          1. mehmet ısık

            bi mail adresi verebilir misin.. fotoğrafını atsam sana..

          2. mehmet ısık

            hız değerlerini değiştirmek işe yaramadı..

  63. mehmet ısık

    olmadı arkadaş bitürlü yaa.. birisi QTR-8RC ile AFmotor sheldin bağlantısını resimli olarak gösterebilir mi.. msuheyb@hotmail.com adresine mail atsanız da olur..

  64. emrah saraç

    merhaba sezgin hocam Konya kadınhanı’nda bir lisede öğretmenim. tubitak 4006 bilim fuarı için sizin yardımınıza ihtiyacımız var. iletişime geçebilir misiniz?
    email. emrah00015@gmail.com

    1. Sezgin GÜL

      mail gönderdim.

  65. Mehmet Han

    Merhaba Sezgin hocam;
    Kullandığım malzemler: Arduino uno, yaptığım 5 adet CNY70 sensor kartı ve yaptığım L293B motor kartı.
    Bağlantıları L298N deki gibi yaptım. Öncelikle sensör değerlerini test ettim. çizgiye göre sensör degerleri okunuyor. ancak L298Ndeki kodları yuklediğimde motorlar dengesiz dönüyor.
    Yardımcı olursan sevinrim. Teşekkürler…

    1. Sezgin GÜL

      PID ile mi yaptınız

  66. ERDEM

    #include
    #define SolMotorileri 13
    #define SolMotorGeri 8
    #define SagMotorileri 12
    #define SagMotorGeri 9
    #define ena 3
    #define enb 11

    #define KP .2
    #define KD 5
    #define M1_minumum_hiz 150
    #define M2_minumum_hiz 150
    #define M1_maksimum_hiz 255
    #define M2_maksimum_hiz 255
    #define MIDDLE_SENSOR 3
    #define NUM_SENSORS 5
    #define TIMEOUT 2500
    #define EMITTER_PIN 2
    #define DEBUG 0

    int lastError = 0;
    int last_proportional = 0;
    int integral = 0;
    QTRSensorsAnalog qtra((unsigned char[]) { A4, A3, A2, A1, A0} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

    unsigned int sensorValues[NUM_SENSORS];

    void setup() {
    pinMode(SolMotorileri,OUTPUT);
    pinMode(SolMotorGeri,OUTPUT);
    pinMode(SagMotorileri,OUTPUT);
    pinMode(SagMotorGeri,OUTPUT);
    pinMode(ena,OUTPUT);
    pinMode(enb,OUTPUT);
    delay(1500);
    manual_calibration();
    set_motors(0,0);

    }

    void loop() {
    unsigned int sensors[5];
    int position = qtra.readLine(sensors);
    int error = position – 2000;

    int motorSpeed = KP * error + KD * (error – lastError);
    lastError = error;

    int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
    int rightMotorSpeed = M2_minumum_hiz – motorSpeed;

    set_motors(leftMotorSpeed, rightMotorSpeed);

    }

    void set_motors(int motor1speed, int motor2speed)
    {
    if (motor1speed > M1_maksimum_hiz ) motor1speed = M1_maksimum_hiz; //MAKSİMUM MOTOR 1 HIZ LİMİTİ
    if (motor2speed > M2_maksimum_hiz ) motor2speed = M2_maksimum_hiz; // MAKSİMUM MOTOR 2 HIZ LİMİTİ
    if (motor1speed < 0) motor1speed = 0; // MİNIMUMMOTOER 1 HIZ LİMİTİ
    if (motor2speed < 0) motor2speed = 0; // MİNİMUM MOTOR 2 HIZ LİMİTİ
    analogWrite(ena,motor1speed);
    analogWrite(enb,motor2speed);
    digitalWrite(SolMotorileri,HIGH);
    digitalWrite(SagMotorileri,HIGH);
    digitalWrite(SolMotorGeri,LOW);
    digitalWrite(SagMotorGeri,LOW);

    }

    void manual_calibration() {

    int i;
    for (i = 0; i < 250; i++)
    {
    qtra.calibrate(QTR_EMITTERS_ON);
    delay(20);
    }

    if (DEBUG) {
    Serial.begin(9600);
    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtra.calibratedMinimumOn[i]);
    Serial.print(' ');
    }
    Serial.println();

    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtra.calibratedMaximumOn[i]);
    Serial.print(' ');
    }
    Serial.println();
    Serial.println();
    }
    }

  67. ERDEM

    PID sabitleriyle alakalı olma ihtimali nedir ? Sanırım donanımımda sorun yok. Siz analoğa göre bu kodları çevirebilirmisiniz. Sanırım biryeri atlıyorum.

  68. ERDEM

    Bağladım fakat gene olmuyor bu sefer kendi etrafında dönüyor. Lütfen Yardım edebilirmisiniz ? Şuan herşey aynı ve analoğa göre ama sorunu bilemiyorum 2000 rpm motor kullanıyorum.

  69. ERDEM

    #include
    #define SolMotorileri 9
    #define SolMotorGeri 12
    #define SagMotorileri 8
    #define SagMotorGeri 13
    #define ena 3
    #define enb 11

    #define KP .2
    #define KD 5
    #define M1_minumum_hiz 120
    #define M2_minumum_hiz 120
    #define M1_maksimum_hiz 210
    #define M2_maksimum_hiz 210
    #define MIDDLE_SENSOR 3
    #define NUM_SENSORS 5
    #define TIMEOUT 2500
    #define EMITTER_PIN 2
    #define DEBUG 0

    int lastError = 0;
    int last_proportional = 0;
    int integral = 0;
    QTRSensorsAnalog qtra((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

    unsigned int sensorValues[NUM_SENSORS];

    void setup() {
    pinMode(SolMotorileri,OUTPUT);
    pinMode(SolMotorGeri,OUTPUT);
    pinMode(SagMotorileri,OUTPUT);
    pinMode(SagMotorGeri,OUTPUT);
    pinMode(ena,OUTPUT);
    pinMode(enb,OUTPUT);
    delay(1500);
    manual_calibration();
    set_motors(0,0);

    }

    void loop() {
    unsigned int sensors[5];
    int position = qtra.readLine(sensors);
    int error = position – 2000;

    int motorSpeed = KP * error + KD * (error – lastError);
    lastError = error;

    int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
    int rightMotorSpeed = M2_minumum_hiz – motorSpeed;

    set_motors(leftMotorSpeed, rightMotorSpeed);

    }

    void set_motors(int motor1speed, int motor2speed)
    {
    if (motor1speed > M1_maksimum_hiz ) motor1speed = M1_maksimum_hiz; //MAKSİMUM MOTOR 1 HIZ LİMİTİ
    if (motor2speed > M2_maksimum_hiz ) motor2speed = M2_maksimum_hiz; // MAKSİMUM MOTOR 2 HIZ LİMİTİ
    if (motor1speed < 0) motor1speed = 0; // MİNIMUMMOTOER 1 HIZ LİMİTİ
    if (motor2speed < 0) motor2speed = 0; // MİNİMUM MOTOR 2 HIZ LİMİTİ
    analogWrite(ena,motor1speed);
    analogWrite(enb,motor2speed);
    digitalWrite(SolMotorileri,HIGH);
    digitalWrite(SagMotorileri,HIGH);
    digitalWrite(SolMotorGeri,LOW);
    digitalWrite(SagMotorGeri,LOW);

    }

    void manual_calibration() {

    int i;
    for (i = 0; i < 250; i++)
    {
    qtra.calibrate(QTR_EMITTERS_ON);
    delay(20);
    }

    if (DEBUG) {
    Serial.begin(9600);
    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtra.calibratedMinimumOn[i]);
    Serial.print(' ');
    }
    Serial.println();

    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtra.calibratedMaximumOn[i]);
    Serial.print(' ');
    }
    Serial.println();
    Serial.println();
    }
    }

    bunlarla deniyorum fakat olmuyo

  70. ERDEM

    Bu arada ben EMITTER pin bağlamıyorum onunla alakalı olabilirmi ? Bağlamak istemiyorum açıkçası elimde lehimlicek o pin bulunmuyor . Onunla alakalı olabilirmi?

    1. Sezgin GÜL

      emitter pini bağlamalısın.

  71. ERDEM

    küçük harfle olan qtrrc leri qtra yaptım. Ondan kaynaklanabilirmi ?

  72. ERDEM

    Kodları o şekilde değiştirdim fakat sorunu hala bulamıyorum.. Değiştirdiğim kodları atıyımmı?

  73. ERDEM

    Tekrardan merhaba. Ben analog sensör kullanıyorum ama ne denediysem robotu kıpırdatamıyorum. Sorunun ne olduğunuda çözemedim daha . Dediğim gibi milim oynamadı.

    1. Sezgin GÜL

      kodda sensör tanımı var QTRSensorsRC diye bu dijital sensör tanımıdır. analog sensör kullanırsan bunun yerine bunu yaz QTRSensorsAnalog

  74. mehmet ısık

    batarya taktım şuan çalıştı ancak.. çizgiyi takip etöiyor..mümkünse QTR-8RC ile aAFmotor sheldin bağlantısını resimli olarak gösterebilir misiniz..

  75. mehmet ısık

    merhaba ne yaparsam yapayım sadece motor 2 çalışıyo..
    farklı piller ve güç adaptorleri kullndım yine aynı ne olabilir sorun..

  76. Burak

    Merhabalar; Çizgi izleyenin hem beyaz zemin siyah çizgi, hemde siyah zemin beyaz çizgide gitmesini istiyorum cny70 kullanıyorum. Nasıl bir program algoritması oluşturmam lazım. yardımcı olursanız sevinirim.

    1. Sezgin GÜL

      adc ile yaparsanız daha sağlıklı olur.

  77. ali

    Saolasınız Sezgin bey. Teşekkür ederim.

    1. Sezgin GÜL

      rica ederim.

  78. Bahattinates

    merhaba. sag olun. tesekkur ederim. size. allah isinizi. rast getirsin.

    1. Sezgin GÜL

      rica ederim. sizlerin de.

  79. Bahattinates

    merhaba. sizin dediginiz gibi. yerleri degistirdim. 255 yaptim. olmadi. shel.l293 .2 test etim. bu kodla.
    tek motor calisiyor.DC. kod bu
    / Adafruit Motor shield library
    // copyright Adafruit Industries LLC, 2009
    // this code is public domain, enjoy!

    #include
    #include

    // DC motor on M2
    AF_DCMotor motor(2);
    // DC hobby servo
    Servo servo1;
    // Stepper motor on M3+M4 48 steps per revolution
    AF_Stepper stepper(48, 2);

    void setup() {
    Serial.begin(9600); // set up Serial library at 9600 bps
    Serial.println(“Motor party!”);

    // turn on servo
    servo1.attach(9);

    // turn on motor #2
    motor.setSpeed(200);
    motor.run(RELEASE);
    }

    int i;

    // Test the DC motor, stepper and servo ALL AT ONCE!
    void loop() {
    motor.run(FORWARD);
    for (i=0; i<255; i++) {
    servo1.write(i);
    motor.setSpeed(i);
    stepper.step(1, FORWARD, INTERLEAVE);
    delay(3);
    }

    for (i=255; i!=0; i–) {
    servo1.write(i-255);
    motor.setSpeed(i);
    stepper.step(1, BACKWARD, INTERLEAVE);
    delay(3);
    }

    motor.run(BACKWARD);
    for (i=0; i<255; i++) {
    servo1.write(i);
    motor.setSpeed(i);
    delay(3);
    stepper.step(1, FORWARD, DOUBLE);
    }

    for (i=255; i!=0; i–) {
    servo1.write(i-255);
    motor.setSpeed(i);
    stepper.step(1, BACKWARD, DOUBLE);
    delay(3);
    }
    }

    sizi meskul etim icin kusura bakma. istedigim bu Shiel. motor surucu. hem cizgi izliye. hemde engel robotu. icin kulanmak. isterdim? siz bu. cizgi izliyen. Shiel. motorsuru. kulandiniz. oylemi. video. izledim. motorsuru. bendeki. aynisi? tek istedigim. bu cizgi. izliyen robot. motor.surucu.Shiel. calisin. sizin sayenizde. hersey. icin tesekkurler.

    1. Sezgin GÜL

      bu kodla test etmeyin bu kodda step motor tabanlı yapılmış. siz normal dc motor kodunu kullanın. çizgi izleyen ile engel robotu birleştirebilirsin. yapman gerek robotun önüne ultrasonik sensör koy ve kodda mesafe ölçüm fonksiyonlarını yazıp belirlediğin mesafenin altında engel algıladığında robotun durdur.

  80. ali

    İyi günler Sezgin bey. sizin bilgilerinizi referans alarak çizgi izleyen robot çalışması yapıyorum.Size iki sorum olacak.
    1. ln298n sürücünün in1,in2,in3,in4 ve enb pinlerine çıkışı arduinonun pwm pinlerinden mi almamız gerekiyor.
    2. qrt 8rc sennsör kullandım projede. ledon pinine enerji verdiğim halde qrt sensörünün üzerindeki ledlerin yandığını göremiyorum. nedeni ne olabilir.Birde yazılımda #define EMITTER_PIN 2 tanımlamıssınız. Bu ledon pinine mi giden çıkız arduinodan.
    Çok teşekkür ederim sorulara cevap verdiğiniz için.

    1. Sezgin GÜL

      iyi günler Ali bey, şöyle cevap vermek gerkirse;
      1 . ena ve enb pinlerini pwm pinlerine tanımlamanız gerekir. diğer in pinleri dijital olarak high low şeklinde kontrol edildiğinden pinleri fark etmez.
      2. #define EMITTER_PIN 2 tanımı ledon pini için tanımdır. bu tanımla ile dış kesme yapılarak sensörün gereksiz enerji harcaması engellenir. sensör ışıkları aydınlık ortamda fark edilmez. karanlık ortamda kağıt üzerine koyup o zaman görebilirsiniz.

  81. Bahattinates

    merhaba. tessekur . ederim size kod calisti. sorun kalmadi. sizin sayenizde. calistirdim. allah.sizden razi olsun. cizgi izliyen L298. ve L293. calisiyor. Shell motor .2. adet L293D. Ve 74HC595. entegre var uzerinde. onunla. denedim. calismadi. sizce. ne olur? sizin sayenizde. cok seyler. ögrendim. sagolun.
    allah isinizi. rast. getirsin.

    1. Sezgin GÜL

      rica ederim. shield ile çalışmamasının nedenleri şunlar olabilir. birincisi yanlış motor girişlerine bağlamış olabilirsiniz. M1 ve M2 yazan girişlere bağlayacaksın. İkincisi ise maksimum ve minimum hız değerlerinden kaynaklı motorlara yeterli enerji gitmiyor olabilir bunu da kod kısmındaki
      #define M1_minumum_hiz 120
      #define M2_minumum_hiz 120
      #define M1_maksimum_hiz 210
      #define M2_maksimum_hiz 210

      bu değerleri değiştirip deneyebilirsin. maksimum hız değerini 255 yapıp dene. çalışmazsa shield bozuktur. Son olarak sadece shield e pil takmışsan yeterli enerji alamıyor. arduino ya da 9v pille jak girişinden enerji ver.

  82. Bahattinates

    merhaba. son gonderdigin. bu sitedeki . Sezgin GÜL30 Mart 2016hata vermemesi gerekiyor. Kütüphaneleri doğru eklediyseniz eğer kodu siteden kopyalarken eksik kopyalıyor olabilirsiniz. Buradan kod dosyalarını indirin birisi l293d, l298n, l293b için diğeri de afmotor shield için >> http://www.robimek.com/wp-content/uploads/Çizgi-izleyen-robot.rar

    kodlar. calisti tesekkurler. bura indirdim. senin dedigin gibi. libraries klasörünün içine atım
    kodlar degerlendi. hata vermedi. Shiel motor surucu. DC 2 motor bagladim. motorlar calismadi.
    acaba QTR8. anolog sensor bende aynisi var. bunu soracaktim. sizden. tesekkurler. allaha emanet olun

  83. Bahattinates

    merhaba. kusura bakma. inanki. bu konudan. sizi cok rahatsiz. etim. sizin dedigin gibi. iki lasörude.
    libraier icine atim. soyle yaptim. verdigin sitede indirdim. winarda. cikartip. masa. ustune .getirdim.
    sonra. iki klasöru. de. Libraries. klasörunun icine atim. ( dogrumu? sizden ricam. bunun kodu.gonderme. mumkunmu? winarla. bir daha deneyim. ben bir .hata .yapiyorum. ama ne .
    QTR sensor. Newpin Exeple. Adafruit motor shiel. libre. calisiyor . bu kodlar.
    ozaman siz bana kodu. gonderme. imkanin varmi. cunku bir hata yapiyorum. evelde gonderdigin. oyuncak kodlari calistirdim. sizden istedigim. bu cizgi izliyen motor Shiel. calisin. uzerindeki.L293D 2.tane , bide uzerinde.74hc595 var. sizin sayenide. bu .calistirma? allaha emanet olun.

    bir istegin olursa. cekilme. hersey. icin tessekkurler

  84. Bahattinates

    merhaba. hayirli isler dilerim size. gonderdiginiz. dosya.content/uploads/%C3%A7izgi-izleyen-k%C3%BCt%C3%BCphaneleri.rar indirdim. rarda. cikartim masa ustune getirdim. 1.AFMOTOR. 2.QTRsensor.
    sunu soracaktim. sizden. 2 dosya. birdemi. Libraries. icine. yapistirmak. ayri ayrimi. olacak?

    bunun hakinda. tesekkurler. allaha emanet olun.

    1. Sezgin GÜL

      iki klasörü de libraries klasörünün içine atın.

  85. Bahattinates

    #include AFMOTOR Sheild icin arduno. bu kodu. degerleyince. hata. verdi?
    #include

    AF_DCMotor motor1(1, MOTOR12_8KHZ );
    AF_DCMotor motor2(2, MOTOR12_8KHZ );

    #define KP .2
    #define KD 5
    #define M1_minumum_hiz 120
    #define M2_minumum_hiz 120
    #define M1_maksimum_hiz 210
    #define M2_maksimum_hiz 210
    #define MIDDLE_SENSOR 3
    #define NUM_SENSORS 5
    #define TIMEOUT 2500
    #define EMITTER_PIN 2
    #define DEBUG 0

    merhaba. bu sizin yazdiginiz. cizgi izliyen robot. motorsurucu. Sheld uzeinde.L283D. 2 adet var.
    sizin gonderdiginiz. linkte. rar. cizgi izliyen. onunu indirdim. rar. cikartinca. 1.AFmotor.2 QTR.var.
    bu ikisinidemi. libera. oldugu. yere. yaptim. 2 sini. birden. libeare. oldugu. yapistirdim. dogrumu.
    sizin gondeerdigin. cizgi rarda. 2 kodu. liberare. icine yukledim. acaba. ondami. hata verdi?
    senin sitede yazdigin kodu. arduino. degerledim. hata verdi?sizden ricam. cigi.izliyen robotunuzu.AFMOTOR. shiel. motor surucu calisin. L293D. arduino beraber calisin. cizgi izliyen. kod bumu? hersey icin tesekkurler. ederim. size allaha emanet olun. hata. bende oluyor. sizin sayenizde. duzeltmek. tesekkurler.

    1. Sezgin GÜL

      hata vermemesi gerekiyor. Kütüphaneleri doğru eklediyseniz eğer kodu siteden kopyalarken eksik kopyalıyor olabilirsiniz. Buradan kod dosyalarını indirin birisi l293d, l298n, l293b için diğeri de afmotor shield için >> http://www.robimek.com/wp-content/uploads/Çizgi-izleyen-robot.rar

  86. Bahattinates

    merhaba. mumkunmu. sizin sayenizde. bu robotunuzu. yapmak. isterdim.
    Arduino ile Çizgi izleyen Robot Yapımı. bende . motorsurucu. Sheld. L293D. var. 2 adet.
    sitede. verdiginizlinkte. AFmotor. winarla. indirdim. sonra. winardan. cikartip. liberael. arduino. oldugu. yere.yapistirdim.degerleyince. hata verdi. bunun hakinda. cevap verirseniz. cok tessekur. ederim. size.
    sizin sayenizde. yapmak. tercube sahibi. olmak. tessekurler. allaha. emanet olun.

    1. Sezgin GÜL

      merhaba, muhtemelen qtr sensör kütüphanesi eklemediğiniz için hata almışsınız. Buradan bu proje için gerekli kütüphaneleri indirebilirsiniz. >> http://www.robimek.com/wp-content/uploads/%C3%A7izgi-izleyen-k%C3%BCt%C3%BCphaneleri.rar

  87. mehmet Elsiv

    bi de analog pinlere bağladım bu şekilde QTRSensorsAnalog qtra((unsigned char[]) {0, 1, 2, 3, 4} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

  88. mehmet Elsiv

    Merhaba hocam ,
    çizgi sensörleri 5 adet ncy70 sensörleri kullanarak yaptım . Ayrıca motor sürücüsü l293d kullandım. L298N için yazılan kodu kullansam sorun olur mu ve ne yapmam gerekıyor ?

    1. Sezgin GÜL

      ADC ile kontrol etmen daha iyi olur. CNY70 lerde ölçümler adc ile daha başarılıdır.

      1. mehmet Elsiv

        Analog kullanımı daha verim olur diye duymuştum. Dijital olarak mi daha uygun mu ? Teşekkürler

        1. Sezgin GÜL

          Analog daha iyi. Adc ile kontrolde de analog okuduğun değeri dijitale çeviriyor.

  89. deniz

    sağ ve sol tekerler dengesiz olarak dönüyor veya dönmüyor neyden kaynaklı olabilir

    1. Sezgin GÜL

      minimum ve maksimum hız değerlerini değiştir. minimum hızı arttır.

      1. deniz

        değişen birşey olmadı dostum. türev ile ilgil bir sorun olabilirmi

        1. Sezgin GÜL

          Hayır, sizin sorununuz donanımdan kaynaklıdır. Yazılımsal sorun yok gayet iyi çalışıyor. Sensörlerin çalıştığından ve çizgiyi tam görebilecekleri konumda olduklarını kontrol edin. Ayrıca LedOn yazan pini de 2. dijital pine takın sensörlerin ledlerine kesme yapacaktır.

          1. deniz

            Sensorler calisiyor 0 ve 5 v cikis veriyor hersey normal fakat motorlar stabil degil. Değerlerden kaynakli birsey olabilir

          2. Sezgin GÜL

            PID değerleri uygun. Gerilim yetersiz veya sensörlerin geç algılamasından kaynaklanabilir.

  90. Oğuzhan F

    abi ben bu kodu 2 sensör için kullanabilirmiyim ? kullanabilirsem kod nasıl olur?

    1. Sezgin GÜL

      iki sensör kullanmak mantıklı olmaz çünkü pid konum olarak orta sensöre göre ayarlama yapıyor. iki sensörden birini orta sensör olarak göstermen lazım ki bu da merkez olmayacağından minimum 3 sensör ile yapman sağlıklı olur. 3 sensör için;
      Orta sensör tanımlamasındaki >> #define MIDDLE_SENSOR 3 >>bu şekilde değiştir >> #define MIDDLE_SENSOR 2
      Sensör sayısı tanımlamasındaki >> #define NUM_SENSORS 5 >> bu şekilde değiştir >> #define NUM_SENSORS 3
      Sensör tanımında pin numaraları 3 pin kullandığın için 3 tane pin yazman gerekir >> QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);
      Örnek 3 pin için tanım >> QTRSensorsRC qtrrc((unsigned char[]) {17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

  91. T.Mutlu

    hocam,arduno ya gönderdiğimiz kodları bir sonraki ardunoya bağladığımızda görebiliyormuyuz yoksa içerisinde kodlar var ama kod yükleme arayüzünde gözükmüyormu,pc ye kodları yedeklememizmi gerekiyor.
    bir de robotun karşısına engel geldiğinde demek, çizgi algılamıyor demekse sensorValue fonksiyonuna null değer atayıp set_motors fonksiyonu ile dönüş işlemlerinimi yapmamız gerekiyor….c# bilmeme rağmen ilk defa ardunoyla çalışacağımız için tam hakim olamadım kodlara…ilginize teşekkür ederim

  92. alptuğ kafkaslı

    Merhaba sezgin bey,
    ben ek olarak çizgi rengine göre motorun hız ayarını yapmak istiyorum nasıl yapabilirim bide rgb sensör kullanıcam bunun için

    1. Sezgin GÜL

      TCS34725 rgb renk sensörü kullanıp, tanımladığınız renge göre hız değeri atayıp robotun hızını renge göre değiştirebilirsiniz. TCS34725 ile renk okuma projemize buradan bakabilirsiniz. http://www.robimek.com/sesli-renk-okuyucu-robot-yapimi/

  93. T.MUTLU

    hocam, arduno ya kodumuzu yazıp gönderdik, ertesi gün değişiklik yapmak için tekrar bağladık. portlarını ayarladıktan sonra arduno içerisinde daha önceki attığımız kodları görebiliyormuyuz, yoksa kodlar arduno içerisinde olduğu halde pc ortamı göremiyoruzda sürekli her değişikliğimizin pc de yedeğinimi almamız gerekiyor.
    Ve birde engeli gördüğünde sağ ve ya sola gitmesi için ardumotor kodlarında setmotor(0,0) ile durdurup mu yapmamız gerekecek.engeli görmesi demek çizginin bitmesi demek değilmidir.(sensorvalues e null ise mantığındamı)
    kısaca çizgi bittiğinde sağ veya sol dönmesinimi kontrol edeceğiz..ilginize teşekkür ederim

  94. Yakup PALİÇ

    hocam iyi günler. L298N entegresiyle yazdığınız kod çok işime yaradı.Teşekkür ederim.Bu koda ayrıca hcsr04 mesafe sensörüyle engel algılaması yapmak istiyoruz.Engeli algılayarak etrafından dönerek yoluna devam etmesini istiyoruz.Nasıl yapabiliriz bize yardımcı olurmusunuz.

    1. Sezgin GÜL

      Çizgiyi takip ederken engel gördüğünde çizgi fonksiyonunu devre dışı bırakıp, yön komutlarıyla dönmesini sağlayın. Dönüş tamamlandığında tekrar çizgi fonksiyonunu aktif edin.

      1. Yakup PALİÇ

        Mesafe sensörünün kodunu yazdık.Bu kodu çizgi izleyen koduyla birleştirmek istiyoruz.Çizgi fonksiyonunu nasıl devre dışı bırakacağız.

        1. Sezgin GÜL

          kesme tanımla engel gördüğünde çizgi izleme durur ve kesme fonksiyonundaki algoritma çalışır

  95. ahmet

    iyi günler ben sürekli bu hataları alıyorum lütfen yardım eder misin ?
    sketch_mar15a:19: error: ‘QTRSensorsRC’ does not name a type
    sketch_mar15a:19: error: expected unqualified-id before ‘,’ token
    sketch_mar15a:19: error: expected unqualified-id before numeric constant
    sketch_mar15a.ino: In function ‘void loop()’:
    sketch_mar15a:37: error: ‘qtrrc’ was not declared in this scope
    sketch_mar15a.ino: In function ‘void manual_calibration()’:
    sketch_mar15a:67: error: ‘qtrrc’ was not declared in this scope
    sketch_mar15a:67: error: ‘QTR_EMITTERS_ON’ was not declared in this scope
    sketch_mar15a:75: error: ‘qtrrc’ was not declared in this scope
    sketch_mar15a:82: error: ‘qtrrc’ was not declared in this scope
    sketch_mar15a:82: error: ‘span’ was not declared in this scope

    1. Sezgin GÜL

      QTRSensors kütüphanesini eklemediğiniz için hata vermiş.

      1. ahmet

        sildim hala devam ediyo aynı hata

        1. Sezgin GÜL

          neyi sildiniz ? kütüphaneyi eklediniz mi ? Arduino sürümü güncel değilse eski sürümlerde çalışmayabilir.

  96. Burak

    QTRSensorsRC ‘ yi digital olarak okuyabilirmiyim?

    1. Sezgin GÜL

      okuyabilirsin. zaten rc denmesinin nedeni o . dijital olarak çıkış alınmasıdır.

  97. veysel

    degişiklik yapılcak yerleri bana atar mısın abi degiştirerek

  98. veysel

    sezgin abi beyaz sensörde motor hız degerlerini degiştirdim ama en sol sensöre göre hareket ediyor ne yapmalıyım iyi gunler

    1. Sezgin GÜL

      pinlerinin yerini değiştir. ortadaki sensöre göre hareket etmesi lazım

      1. veysel

        degiştirdim ama yine olmadı

        1. Sezgin GÜL

          aşağıdaki kısımlarda değişiklik yapman gerekir deneyerek doğru değeri bulmalısın. serial monitörü açıp değerlere bak.
          int error = position – 2000;

          int motorSpeed = KP * error + KD * (error – lastError);
          lastError = error;

          int leftMotorSpeed = M1_minumum_hiz + motorSpeed;
          int rightMotorSpeed = M2_minumum_hiz – motorSpeed;

  99. seyfullah

    iyi günler bu şemayı arduıno nanoya uyarlanabilir mi

    1. Sezgin GÜL

      tabiki de uyarlayabilirsin .

  100. deniz

    cny 70 sensörler ile 7414 entegersı sizin kullanıdınız ıle aynı hassasiyette çalışırmı . Bİrde kütüphanelerin son çalışır halinin verebilirmisinz

    1. Sezgin GÜL

      kütüphaneler : http://www.robimek.com/wp-content/uploads/çizgi-izleyen-kütüphaneleri.rar
      çalışabilir ama aynı verimde olmayabilir. cny70 ler en iyiler bu konuda. bir de çizgi izleyenler pid kullanılamdan dc dc dönüştürücü ile sensörlerden gelen verileri dönüştürüp öyle programlanıyor. O şekilde de deneyebilirsiniz.

  101. Burak

    kızılötesi sensörler analog mu digital mi giriş yapılıyor, birde motor sürücünün Enable pinleri input atanmış, başka bir kaynakta output olarak görmüştüm doğrusu hangisi acaba? yardımlarınız için çok teşekkür ederim.

    1. Sezgin GÜL

      sensörün türüne göre iki şekilde de giriş yapılabilir. enable pini output olacak yanlışlık olmuş .

  102. ERDEM

    QTRSensorAnalog değişkenini tanımlıyorum fakat robotta hareket yok bütün rc leri analoğa göre değiştirdim fakat hareket yok motorlar bile çalışmıyor değerlerle alakalı sorun olabilirmi ben min max değerlerini değiştirdim fakat gene bir hareket yok sanırım sensörü yanlış kullanıyorum bide sensörün vcc bağlantısı 5v a gnd si (enssağ) gnd ye değlmi başka bir bağlantı yapmam gerekmiyor bu ikinci aldığım sensor ilkinde gücü farklı portttan verip 4. sensörden sonrasından bilgi alamamıştım. Sanırım sorun bağlantıda.

    1. Sezgin GÜL

      sensörü örnek kütüphane koduyla denediniz mi ? Bir de l298n için yazılı kodda enable pinleri input olarak tanımlanmıştı sonradan output olarak değiştirdim.

  103. mehmet

    Sezgin hocam Paylaşımlarınız için ve sorduğumuz her soruya cevap verdiğiniz için teşekkür ederim. Hocam labirent içinde gezip yangın pervane ile yangın söndüren robot projesi var ama bununla ilgili hiç bir sitede devre şeması yada kod görmedim elinizde böyle bir proje varsa arduino ile hazılanmış devresini ve kodlarını paylaşırmısınız?

    1. Sezgin GÜL

      Şuan bu proje yok fakat kısa zaman içinde eklerim. Bahsettiğiniz proje aslında labirent çözen robota yangın söndürme eklentisi getirilmiş halidir. Labirent çözen de engel algılayan robot olduğundan buna göre araştırma yapabilirsiniz. Yangın söndürme kısmını buradaki projeden yapabilirsiniz. http://www.robimek.com/yangin-sonduren-robot-yapimi-fire-extinguishing-robot/

  104. Erdem

    L298 entegresi kullanıyorum hangi kodları analoğa göre çevirmem gerekiyor ?

    1. Sezgin GÜL

      projede L298N e göre kod ve devre şeması var. Analog sensör kullandıysan sensör tanımını analog kütüphanesine göre yapmalısın.

  105. Erdem

    Analog sensör satın aldım kafa sallama olayı ile kalibre ediyorum ama sensörlerde sıkıntı olduğunu gösteriyor.

    1. Sezgin GÜL

      bu kod için dijital olan sensör tanımlı. Analog sensör için tanımlamayı değiştirmelisiniz. Yani QTRSensorsRC olan sensör tanım fonksiyonunu QTRSensorsAnalog olarak değiştirmelisiniz.

  106. Burak

    QTRSensors yerine cny 70 kullansak onların kalibrasyonunu aynı şekildemi yapacaz? ve
    QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN) bir kütüphane. Burada cny 70 için nasıl bir tanımlama yapmalıyım?

    1. Sezgin GÜL

      QTR deki sensörler tekil olarak kullanıldıkları için, cny70 sensörünü kullanabilirsiniz. Yazılımı değiştirmenize gerek yok. Kalibrasyon işlemini kod kendisi yapıyor.

  107. deniz

    sensörlerim 7414 entegresine bağlı oradan çıkış alıyorum

    1. Sezgin GÜL

      entegre kullandıysanız sorun olmaz . Devre korumasından kastım sensörleri tekil olarak kullanırken uygun voltaj ve akımı sağlamak gerekiyor. Shield ve entegreler kullanımı bu yüzden önemlidir.

  108. Deniz

    Sensör olarak cnc 70 seti kullandım 5 adet bunlarda herhangibir sıkıntı yaratıcı

    1. Sezgin GÜL

      sensörleri devre koruması yaparak stabil çalışmasını sağlarsanız sorun yaşamassınız.

      1. deniz

        devre korumasından kastınız ney acaba

  109. deniz

    ardiuno kütüphanelerinin linklerini verirmsiniz acaba

      1. Kemal

        Bizim bir bitirme projesı odevimiz cizgi izleyen robot devresini farklı uc ayrı renk izleyen devre olarak yapmamiz istendi nasıl bi sensor kullanmamız gerekiyo yardımcı olur musunuz

        1. Sezgin GÜL

          analog kızılötesi sensörler işini görür. yapman gereken 3 renk için değerleri referans alıp bu yazılımdaki gibi entegre edebilirsin.

  110. mehmet

    Sezgin hocam size bir sorum olacaktı konu hakkında bilginiz varsa sevinirim arduino içindeki programı bilgisayara almam şansım var mı simo robot var bitane ben yapmamıştım ama içindeki kodlerı mereak ettim nasıl görebilirim

    1. Sezgin GÜL

      malesef arduino daki yüklü olan kod görülemiyor.

  111. mehmet

    Hocam keşke resim olarak bağlantısını da paylaşsan

    1. Sezgin GÜL

      paylaşacağım.

  112. Erdem

    Motor sürücünün altındaki yeri kazıyıp gücü ayırsam daha iyi verim alırmıyım ?

    1. Sezgin GÜL

      motor sürücüyü ayrı beslemen lazım. arduinoyu farklı pille besle

  113. levent

    iyi çalışmalar kolay gelsin arduino ile bağlantı şeması var mı acaba paylaşabilir misiniz..

    1. Sezgin GÜL

      bugün paylaşacağım.

  114. Erdem

    imgur.com/40YdiPd burdaki kart

    1. Sezgin GÜL

      Peojedeki L298n e göre olan kodu kullanacaksın. 3 . pin ena, 11.pin enb 9 ve 12 pinler birinci motor, 8 ve 13. pinler de ikinci motor.
      Buna göre koddaki motor pinlerini aşağıdaki gibi yap.
      #define SolMotorileri 9
      #define SolMotorGeri 12
      #define SagMotorileri 8
      #define SagMotorGeri 13
      #define ena 3
      #define enb 11

      motor sürücünün vin girişinden beslemesini yapıp çalıştır.

  115. ERDEM

    Benim çözemediğim sorun rev3 kart halınde yani pinlerdede PwmA Pwm b gibi şeyler var bunların bağlantısını ena enb yemi yazmalıyım?

    1. Sezgin GÜL

      evet onlar pwm girişleri yine de siz fotoğraf linkini atın bağlantılarını söyleyeyim.

  116. ERDEM

    Bu arada ardu kodlarını kullanmayıp L298 i kullanmalıyız değilmi? O konuda hata olmaz sanırsam.

    1. Sezgin GÜL

      İstediğin arduino modelini kullan kod değiştirmene gerek yok .
      Aşağıdaki tanımlar motor sürücülerin sinyal pin çıkışlarıdır yani arduinonun bağlantı pinleridir.
      #define SolMotorileri 9
      #define SolMotorGeri 10
      #define SagMotorileri 11
      #define SagMotorGeri 12
      #define ena 4
      #define enb 5
      Motor sürücünün datasheet ine bakıp sinyal ve motor pin bağlantılarını yaparsın. L298n için datasheet projede verdim.

  117. ERDEM

    Yani Rev 3 kullanarak bu kodları kullanabileceğiz fakat REV 3 PWM bulunduruyo (L298P). PWM in bağlantılarını l298 kodunda nereye yazmamız gerekiyor. Biz tam bu noktada takılıyoruz. PWM ile PID beraber çalıştırmaya çalışırken sanırsam biyerde hata yapıyoruz. L298 kodunuzu referans olarak alıyoruz fakat bir sorun çıkıyor. Bu arada REV3 ün beslemesini nasıl yapmamız gerektiği hakkında bir fikriniz varsa çok yardımcı olursunuz. Cevabınız için teşekkürler. Dediğim gibi L298P PWM bulunduruyo ilk kullandığım sürücü kartı olduğu için o kısmını nasıl yöneticeğimi bilemiyorum.

  118. Erdem

    Merhaba sezgin bey bi proje için çizgi izleyen robot kullanıyoruz. Arduino Motor shield REV3 kullanmaktayız. Rev 3 için bu kodların hangi kısımlarında değişiklik yapmalıyız. PID hakkında pek bilgimiz olmadığından nasıl değiştireceğimizi bilemedik. Siz ne önerirsiniz. Yada başka bir motor sürücümü satın almalıyız. Bu arada l298 ile l293 arasındaki fark fiyatta yansımama sebebi nedir. Yani bizim kullandığımızda L298P var Fakat bunu L298N olarak değiştirirsek yani onu satın alırsak sorun düzelebilirmi? PID ile bunu yazmaya pek hakimd değiliz .s . Sevgiler Saygılar.

    1. Sezgin GÜL

      değişiklik yapmanıza gerek yok 5 sensör için analog pinler yeterli zaten.
      l298 ler l293 e göre daha fazla akıma dayanır bundan dolayı da tork ve hız gerektiren durumlarda avantaj sağlar.

  119. veysel

    tmm abi tesekkur ederim allah razı olsun

    1. Sezgin GÜL

      birde aşağıdaki hız değerlerini arttır
      #define M1_minumum_hiz 120
      #define M2_minumum_hiz 120
      #define M1_maksimum_hiz 210
      #define M2_maksimum_hiz 210

  120. veysel

    ki hangi satırda abi bulamadım da

    1. Sezgin GÜL

      burada ki değerini kullanmıyoruz. hesaplamalar diğer iki değer referans alınarak yapılıyor. Yani ki değeri kodda yok.

  121. veysel

    abi kusura bakma ben daha yeni başladim bu işe kp,ki ve kd ne demek oluyor
    ona gore degerleri degiştireyim
    kp degeri .2 gibi hep noktaylami başliycak

    1. Sezgin GÜL

      kp >> oransal kazanç
      ki >> integral kazanç
      kd >> türevsel kazanç
      buradaki kp değeri arttırılırsa cevap verme süresi hızlanır ama çok arttırlıması durumunda kararsız hale geleceğinden diğer iki değerde buna oranla arttırılmalıdır. kp deki 2 nin solundaki nokta aslında 0.2 demektir. yani bu şekilde de yazabilirsin.

  122. veysel

    allah razı olsun senden abi çalıstı
    bunun daha hızlı çizgiyi okuması için ne yapmamız gerek

    1. Sezgin GÜL

      rpm yüksek motor ve l298n motor sürücü kullanabilirsin. Yukarıda kodu var l298n ile. Yalnız çok hızlı olduğunda çizgiden çıkabilir o yüzden pid deki kp, ki ve kd değerlerini değiştirmen gerekir onu da denem yanılma ile uygun değeri bularak yapabilirsin. İlerleyen günlerde hızlı çizgi izleyen robotu da ekleyeceğim.

  123. veysel

    sensorleri ne taraftan dizicez

    1. Sezgin GÜL

      baştan sona sırayla analog 0 dan 6 ya kadar takın robot ters yöne hareket ederse sensörleri analog 6 dan o a doğru sırayla takın.

  124. Sezgin GÜL

    bu şekilde yap analog 0 dan 6 ya kadar pin tanımladım. arduino mega için kullanabilirsin. eğer uno veya nano kullanacaksan analog 6 pini olmadığı için dijital pinlerden pwm olan herhangi bir pini tanımlayabilirsin. QTRSensorsRC qtrrc((unsigned char[]) {A6,A5,A4,A3,A2,A1,A0} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);
    Aşağıdaki kısımları da şu şekilde yap.
    bu kısmı >> #define NUM_SENSORS 5 >> bu şekilde yap >> #define NUM_SENSORS 7
    bu kısmı >> #define MIDDLE_SENSOR 3 >> bu şekilde yap >> #define MIDDLE_SENSOR 4
    bu kısmı >> unsigned int sensors[5]; >> bu şekilde yap >> unsigned int sensors[7];

  125. veysel

    QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);
    abi bu satiri 7 sensöre ve arduino megaya göre yazabilir misin

  126. veysel

    tesekkur ederim sezgin abi
    bi sıkıntı olursa yine sorabilir miyim

    1. Sezgin GÜL

      tabiki de sorabilirsin.

  127. veysel

    programi yukledim 7 sensore göre ama tek motor surekli çalışıyor

    1. Sezgin GÜL

      çizgiyi okuyamadığından kaynaklıdır.

  128. İsmail

    Merhabalar güzel bir çalışma olmuş ve bunu yapmak istiyorum bunun için bir kaç sorum olacaktı 2 parça ayrı ayrı kodlar var bunları nasıl yükleyeceğim yani ne olarak kayıt edip ne olarak kullanıp hangisini yükleyeceğim diğerine ne olacak daha sonrasında bu robotun daha hızlı olması için neler yapabilirim =)

    1. Sezgin GÜL

      Kullandığın motor sürücüye göre iki kod yazdım. Bunların biri afmotor shield için diğeri de l298N, l293b, l293d gibi motor sürücüler için kullanınız. Hızını arttırmak için
      #define M1_maksimum_hiz 210
      #define M2_maksimum_hiz 210
      buradaki değerlari arttırın fakat çizgiyi çıkma durumuna göre uygun değeri bulun. Ayrıca kullandığınız motor sürücü ve batarya da hız için önemli husustur.

  129. veysel

    kusura bakmassanız bişey daha sorcam
    ledon pini hangisi

    1. Sezgin GÜL

      Sensörün üzerinde yazıyor. Arduino da ise 2. dijital pin yani kesme pini.

  130. veysel

    elimde arduino mega var onada uyarmi bu program

    1. Sezgin GÜL

      Tabiki de uyar .

  131. veysel

    iyi gunler bu programla beyaz çizgiyi de izler mi

    1. Sezgin GÜL

      Program izler fakat hızı yavaş olur yani minimum hız olur. Bu durumda maksimum ve minimum hız değerlerini yer değiştirirseniz sorunsuz olarak çalışacaktır.

  132. Sevgi

    Merhaba kp ve kd değerlerini neye göre belirlediğinizi öğrenebilir miyim?

    1. Sezgin GÜL

      deneme yanılma yoluyla hatasal oranların değerleri eklenerek en stabil çalışma durumundaki değerler yazıldı.

  133. Suleyman kaya

    Meraba kolay gelsin ben bu projeyi yaptım ama gövde ve motorları farklı kullandım çok fazla hızlı oldu yolda tutamıyorum ne yapmam gerekiyor

    1. Sezgin GÜL

      buradaki değerleri değiştirin
      #define M1_minumum_hiz 120
      #define M2_minumum_hiz 120
      #define M1_maksimum_hiz 210
      #define M2_maksimum_hiz 210

  134. Ahmet Can Ok

    qtr 8x’in kütüphanesindeki kodların ne işe yaradığını yazabilir misiniz? bazılarını anladım ama bazıları hakkında soru işaretleri var aklımda.

    “int i;
    for (i = 0; i < 250; i++)
    {
    qtrrc.calibrate(QTR_EMITTERS_ON);"
    yukarıdaki kod ve

    "if (DEBUG) {
    Serial.begin(9600);
    for (int i = 0; i < NUM_SENSORS; i++)
    {
    Serial.print(qtrrc.calibratedMinimumOn[i]);
    Serial.print(' ');"

    bu kodlardan bir şey anlamadım.

    1. Sezgin GÜL

      bu kod kısımları sensörü kalibre etmek için kullanılır. Yani robot ilk çalıştığında kalibrasyon işlemini başlatır. Bu kalibrasyon işleminin amacı beyaz ve siyah çizgilerin değerlerini alarak o değerleri referans kabul edip diğer işlemler de bu değerlere göre hesaplanır. Birinci kod kısmında sensörlere 250 kere kesme uygulanarak kalibre edilir. İkinci kod kısmında ise kullanılan her sensörün o an okuduğu minimum değer alınır.

  135. Umut

    kodu yüklüyorum ara kablo baglıyken çalışıyor . usb ara kablosunu söküp pilden enerji verdiğimde çalışmıyor.

    1. Sezgin GÜL

      Afmotor Shield ve arduino uno’ya ayrı ayrı enerji vermelisiniz.

  136. Umut

    Sezgin Bey Afmotor Shield ve arduino uno’ya ayrı ayrı mı besleme vermemiz gerekiyor

  137. Ayhan

    Sezgin bey matlab ile pid hesabı yapmaya değinmişsiniz bunu biraz açar mısınız? Örnek veya kaynak verir misiniz?

    1. Sezgin GÜL

      matlab kendi sitesinde var. Ayrıca matlab simulink de pid blokları mevcut oradan hazır veya kendi değerlerinizle grafiksel analizler yaptırabilirsiniz ya da simulink ile arduinoyu direk haberleştirebilirsiniz.

  138. UMUT

    Merhaba Sezgin Bey , 2500 rpm motorla robotu kontrol etmeye çalışıyorum da Kp değeri robotun dönüşünün keskinliğini mi ayarlıyor? Kd değeri robotun salınımını mı ayarlıyor?
    Birde L 293 N motor sürücüsüne soğutucu takılı değil, biraz ısınma oluyor sıkıntı çıkartır mı?

    1. Sezgin GÜL

      kp hatasal oranlama kd ise türevsel hatayı verir. kd değeri daha etkilidir. 2500 rpm için referans oranını değiştirmende fayda var ve motor sürücünün ısınma durumu akıma bağlıdır ki anlık zorlanmada çekeceği akım maksimum olacağından bu değere göre soğutucu eklemende fayda vardır.

  139. selim

    Efendim iyi günler.Robotumu yaptım sensörler çizgiyi gördükleri zaman iki tekerde oynuyor fakat zemine koyduğum zaman tek teker oynuyor

    1. Sezgin GÜL

      İyi Günler Selim Bey, Robot dönüşlerde minimum ve maksimum hız değerlerini referans alarak gerekli hızı ayarlayıp döner. diğer tekerleğin oynamama sebebi minimum hız değeri düşük olması ile birlikte kullandığınız pile göre motora yeterli enerji gitmemesidir. yani kodda pwm olarak tanımlı 120 değeri motorunuzu döndürmeye yetmiyor demektir.
      #define M1_minumum_hiz 120
      #define M2_minumum_hiz 120
      bu iki değeri yükseltirseniz motorlar dönecektir. 180 civarı yeterlidir

  140. UMUT

    8 sensörlü kodda sadece 3 tane sensör daha tanımlamamız yeterli olurmu kod da başka bir değişiklik yapmaya gereke varmı?

    1. Sezgin GÜL

      #define MIDDLE_SENSOR 3
      buradaki tanımla orta sensörün numarasını verir. yani 8 tane kullanacaksan 4 veya 5 yapman lazım ama o zamanda sağ ve sol sensör sayısı eşit olmayacaktır. onun için 4 ve 5 nolu sensörleri aynı pine tak. yani 7 sensör gibi düşünerek orta sensör değerini 4 al.
      #define NUM_SENSORS 5
      buradaki tanımlama da sensör sayısını yazıyorsun. yukarıda 4 ve 5 i aynı pine takacağımız için 7 sensör pinine ihtiyacımız olacaktır. onun için 7 yazıyoruz.
      toplamda 8 sensör kullanarak bu şekilde tanımlamalarını ekleyebilirsin. kodun diğer kısımlarını değiştirmene gerek yok. sorun yaşarsan sadece pid hata oranlarını değiştirmen yeterli olur

      1. UMUT

        teşekkürler sezgin bey

  141. berk

    peki motor olarak ne önerirsiniz veya kullandıgınız motorun rpm i nedir ?

    1. Sezgin GÜL

      projedeki 600 rpm kullandım.o civarlarda uygundur

  142. berk

    sensor olarak 8rc yerine 8A kullansam sorunla karıslasırmıyım.teknik olarak cok az farkları var diye araştırmıştım.

    1. Sezgin GÜL

      kullanabilirsin ama kütüphane ve fonksiyonları değiştirmen lazım

  143. UMUT

    C:\Users\umut\AppData\Local\Temp\arduino_e2f20cc6aff72622c5c732b852aace31\sketch_jan21a.ino:4:24: fatal error: QTRSensors.h: No such file or directory

    #include

    Bende bu hatayı veriyor Sezgin Bey yardımcı olurmusunuz.

    1. Sezgin GÜL

      QTRSensors kütüphanesini eklemediğin için hata alıyorosun

      1. UMUT

        Teşekürler Sezgin Bey.Kod’da KP ve KD degerlerini neye göre veya hangi hesaplamalara göre değiştireceğiz?
        Yoksa deneme yanılma yoluylamı robota uygun degerleri bulmaya çalışacağız?

        1. Sezgin GÜL

          kp ve kd değerleri motorun hızına göre referans alınır. bu değerlerde sorun yaşamasın. ama deneme ile de değişiklik yaparsın. pid değerini program ile de hesaplayabilirsin. matlab pid bölümüne bakarsan matamatiksel formüller ve algoritmaları bulabilirsin. burada hata payı ve oran hesaplandı ve motora hız olarak entegre edildi.

  144. deniz

    iyi aksamlar hocam ben bu kodu kullanıyorum fakat dönüş yapmıyor.yardımcı olabilir misiniz

    1. Sezgin GÜL

      sensör çizgiyi okuyamıyordur. konumunu iyi ayarla

  145. selim

    Teşekkürler

  146. selim

    Efendim ben direk arduinoya 9v taksam arduino shielde takmasam olur mu ?

    1. Sezgin GÜL

      enerji yetmez hemen biter pil

  147. selim

    Efendim iyi günler peki 4.8 Volt kullansam olur mu ?

  148. selim

    Peki kaç volt ile çalıştırmam gerekiyor

    1. Sezgin GÜL

      6v veya 7.2 v pille motor shield i besle arduinoyu ise farklı bir pille besle

  149. selim

    Olabilir çünkü ben şu anda USB fişe dönüştüren adopterle çalıştırıyorum

  150. selim

    Başka ne yapabilirim yine olmadı hızları 200 çıkardım

    1. Sezgin GÜL

      enerji yetmiyor büyük olasılıkla.

  151. selim

    evet aynen yazdığım şekilde

    1. Sezgin GÜL

      motorlar m1 ve m2 girişlerine takılacak

      1. selim

        Tamam efendim bende aynı şekilde M1 ve M2 giriş yerlerine taktım sensörde elimi sağ tarafa gösteriyorum sağ teker oynuyor sola çekiyorum elimi sol teker oynuyor fakat siyah çizgi koyuyorum ikisi bir anda oynamıyor

        1. Sezgin GÜL

          siyah çizgiyi tam görmüyor olabilir. ayrıca koddaki min motor hız değeri 120 yani düşük olduğundan hareket etmiyo olabilir. Siz bu değeri yükseltin biraz 160 180 arası deneyin

        2. Oğuzhan

          aynı sorun bende de vardı ya motorların baglantıları kısa devre yapıyordur ya da pil gücünüz yetersiz geliyordur

  152. selim

    Efendim kütüphaneyi indirdim fakat hata veriyor TRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN); böyle yazıyor ne yapabilirim

    1. Sezgin GÜL

      hata vermemesi lazım sürüm farkından kaynaklanabilir. Bir de o kısım QTRSensorsRC qtrrc((unsigned char[]) { 19,18,17,16,15} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN); bu şekilde mi siz de ?

      1. selim

        evet aynen yazdığınız gibi

        1. Sezgin GÜL

          derlemede sorun yok sürümü değiştirin ondan kaynaklı olabilir

          1. selim

            teşekkürler halletim sağolun

          2. selim

            Araba çizgiyi görüyor fakat sadece bir teker oynuyor ikisi birden oynamıyor

  153. Mustafa İlker

    Hocam bu sensörü digital olarak kullanacağımızda ilk başta 10 nf lık kondansatörü doldurup boşaltmamız mı gerekiyor bunu niçin yapıyoruz onuda anlamadım kalibrasyon dedikleri olay bunu yaparken mi oluyor açıklarsanız sevinirim . dijital çıkış allırkende kütüphane almamız gerekiyor mu

    1. Sezgin GÜL

      kalibrasyon olayı aslında referans alma işlemidir. Örneğin beyaz ve siyah algılama sırasında analogdan voltaj değeri okursunuz. Bunlar sizin referans noktalarıdır. Kondansatörün görevi de renkten dolayı devreye gerilim değişkeni verir.Örneğin voltaj değeri 2.5 altı ise LOW 2.5 üstü ise HIGH işlemi yapmasını söylersiniz.

    2. Sezgin GÜL

      Kütüphane kullanmadan her sensörü bağımsız kullanabilirsiniz.

  154. mehmet

    merhaba ben bu sensörü dijital olarak okumak istiyorum fakat okumuyor sebebi nedir acaba mesela en soldaki sensor 1 ise sağdaki motoru tam devir çalıstır motoru en soldakinin yanındaki sensorse yarım devir çalıstır motoru demem gerekiyor bunu nasl yapabilirim

    1. Sezgin GÜL

      Merhaba Mehmet bey, kullandığınız pini input olarak ayarlayın ve analogRead fonksiyonu ile okuyun.

  155. Meltem

    Merhaba, ben daha yeni başladığım için bağlanmaları tam anlayamadım. Motorları motor sürücü kartına nasıl bağladığınız ?

    1. Sezgin GÜL

      Merhaba, projede kullanılan motor sürücü direk arduino üzerine takılıyor ve motorların bağlantıları için de sürücü üzerinde M1, M2, M3, M4 yazan pin girişlerinden motorlarınızın bağlantısını yapıyorsunuz

      1. Meltem

        Çok teşekkürler. Peki pillerin bağlantısını nasıl yapmam gerekiyor acaba ?

        1. Sezgin GÜL

          Rica ederim. Buradan bütün bağlantılara bakabilirsiniz. http://www.robimek.com/wp-content/uploads/af-motor-pin-bağlantısı.png

  156. emre

    kütüphaneyi nereden ekliyoruz

    1. Sezgin GÜL

      arduinonun kurulu olduğu yerde libraries klasörünün içine ekle

  157. emre

    peki ben daha yeni arduino programlamaya başladım allh izin verirse robot yarışmasına katılacağım ve internet üzerinden bilgi topluyorum. sizin yazdığınız programda şu gibi hatalar veriliyor.

    cızgı_ızleyen_robot_ınternet.ino:1:21: fatal error: AFMotor.h: No such file or directory
    compilation terminated.
    Derleme sırasında hata oluştu.

    gibi hatalar veriyor.

    #include
    #include

    bir de buraları anlamadım yardım ederseniz çok sevinirim.

    1. Sezgin GÜL

      afmotor kütüphanesi eklemeniz lazım buradan ekleyin >> http://www.robimek.com/wp-content/uploads/AFMOTOR-master.rar

  158. birkan ersen

    QTR bağlantılarını nasıl yaptınız acaba? 5sensör kullanılmış bunlar hangi pinlere bağlandı?arduino bağlantısını nasıl yaptınız?
    ayrıca programda eksiklikler var mı?

    1. Sezgin GÜL

      Sensör pinlerini A1 den A e kadar ki pinlere bağla. Sensörleri soldan başlayarak sırayla bağla. Yani en soldaki a1 en sağdaki a5 olacak şekilde diğerlerini de sırayla bağla.

  159. Muhammed Türkeri

    seri haberleşme ile ne yapıyor niye seri haberleşme kullanılmış
    cevabınızı bekliyorum

    1. Sezgin GÜL

      Seri haberleşme sensördeki verileri yazdırmak için kullanıldı. Bu verileri sürekli yenileyerek kalibre ediliyor.