BAĞLAN

Arduino ile Çizgi izleyen Robot Yapımı

  • Görüntülenme 20281
  • PAYLAŞ
    • 444
    •  
    • 14
    •  
    • 1
    •  
    •  
    • 1
    •  
    •  
      460
      Paylaşım

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

    Robotta kullanılan komponentler:

    1. Arduino Uno
    2. QTR-8RC Kızılötesi Sensör
    3. L293D Motor sürücü kartı
    4. Robot Kit

    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();
    }
    }

    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:

    //Robimek Robotik Sistemler - 2016
    //Ç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


    PAYLAŞ
    • 444
    •  
    • 14
    •  
    • 1
    •  
    •  
    • 1
    •  
    •  
      460
      Paylaşım
    Sezgin GÜL

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    264 Yorum - "Arduino ile Çizgi izleyen Robot Yapımı"

    avatar
    Sıralama:   En Yeniler | Eskiler | Beğenilenler
    musa
    Ziyaretçi

    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ı

    Doğukan
    Ziyaretçi

    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

    mert
    Ziyaretçi

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

    mert baskın
    Ziyaretçi

    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

    Mehmet
    Ziyaretçi

    gerçekten

    Nadir
    Ziyaretçi

    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

    Bahattinates
    Ziyaretçi

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

    Doğukan
    Ziyaretçi

    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

    PINAR
    Ziyaretçi

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

    Fırat KAYA
    Ziyaretçi

    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

    Fırat KAYA
    Ziyaretçi

    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

    mehmet
    Ziyaretçi

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

    wpDiscuz

    Yeni Projeler More

    • 16 Şubat 2017
      1 hafta ÖNCE 2 Yorum

      Öğrenme Fonksiyonuna Sahip Hareket Kopyalayan Robot Kol Yapımı

      Bu projede öğrenme yoluyla hareket kopyalayan robot kol yapımından bahsedeceğim. Endüstride kullanılan robot kollar, her zaman aynı hareketleri yapmaya odaklıdır. Örneğin ürün bandından bir nesneyi alıp başka bir banda aktarımını yapan robot kollar sürekli aynı hareketi yapmaktadır. Bu hareketler önceden öğretilerek robot kola aktarılır. Burada da aynı mantıkla robot ...

    • 11 Şubat 2017
      2 hafta ÖNCE 10 Yorum

      Arduino İle Labirent Çözen Robot Yapımı

      Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ ...

    • 07 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile MLX90614 Kızılötesi Sıcaklık Sensörü Kullanımı

      Cisme temas etmeden, cismin sıcaklığını ölçen MLX90614 kızılötesi sıcaklık sensöründen bahsedeceğim. Dahili bir 17-bit ADC ve güçlü bir DSP, MLX90614'ün ölçümlerinde yüksek doğruluk ve çözünürlük verir. Vücut sıcaklığı ölçmek için uygundur. Ayrıca hareket algılamada da kullanabilirsiniz. MLX90614 Özellikler: Ortam sıcaklığı ölçme aralığı -40 ile + 125 ° C Nesne ...

    • 05 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile Yazıyı Sese Dönüştüren Emic 2 Modülü Kullanımı

      Robotunuzu konuşturmak ve neler olup bittiğini söyletmek ister misiniz ? Emic 2 yazıyı sese çeviren modülle kolaylıkla projeleriniz konuşabilir. Emic-2, Parallax tarafından, ses sentezini tamamen zahmetsiz kılmak için Grand Idea Studio ile birlikte tasarlanmıştır.

    • 31 Ocak 2017
      4 hafta ÖNCE 7 Yorum

      Arduino ile DHT22 Sıcaklık Nem Sensörü Kullanımı

      DHT sensörleri, kapasitif nem sensörü ve bir termistör olmak üzere iki parçadan oluşur. DHT11 ve DHT22 olan iki DHT modelini ele alalım. Görünüm ve pin yapısı olarak benzer görünmelerine rağmen farklı ölçüm hassasiyetlerine sahiptirler. Aşağıda iki modelin karşılaştırmasına bakalım.

    Bizi Takip Et

    Son Yorumlar

    Sezgin GÜL
    Sezgin GÜL 2017-02-25 23:01:46
    merhaba batuhan, hatanın sebebi AFMotor.h kütüphanesini yüklemediğinden kaynaklanmış. Kütüphaneyi buradan indirebilirsin http://www.robimek.com/wp-content/uploads/AFMOTOR-master.rar
    batuhan 2017-02-25 21:52:21
    sezgin bey öncelikle çok teşekkür ediyorum proje için ; Arduino ya kodu derlediğimde şöyle bir sorun ile karşılaşıyorum Arduino:1.8.1 (Windows.....
    Emin ERKMEN 2017-02-25 19:55:34
    Bu robotun üstüne ekleme yapabilir misiniz? 1 hafta içinde? Bu bizim için çok önemli.
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 19:48:46
    Çizgili olan labirenti çözen robotlarda o özellik mevcut. İlerleyen günlerde o tarz proje paylaşacağım.
    Emin ERKMEN 2017-02-25 19:34:28
    Peki bu robot. En kısa yolu nasıl bulabilir. İkinci kez aynı labirentten geçtiği zaman en kısa yoldan gitmesi için ne.....
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 18:10:10
    Kodlarda sorun yok videodaki robotta kullanılan kodlardır. Motor yönlerini doğru taktınız mı. Yön komutlarında doğru yönde dönüyorlar mı bunları da.....
    Emin ERKMEN 2017-02-25 18:03:27
    kodlarda sıkıntı yok yani?
    Sezgin GÜL
    Sezgin GÜL 2017-02-25 17:17:46
    Bağlantılarınız doğru ve sensörlerin konumları uygun ise enerji yetersizliğinden kaynaklanabilir