Çizgi izleyen robotlarla uğraşanların bildiği sensörlerden birisi Pololu QTR-8RC sensörüdür.  Önümüzdeki günlerde bu sensörle bir uygulama yapmam gerekecek. O yüzden bu konuda biraz araştırma yapmak ve başkalarının da yararlanması amacıyla burada paylaşmaya karar verdim. Bu sensörle  ilgili fikirlerinizi, uyarılarınızı yorum kısmından iletebilirsiniz.

Pololu QTR-8RC Sensörü

qtr-8rc

Polulu QTR-8RC Sensörü Elektronik Devre Şeması

qtr-8rc elektronik şeması Bu sensörde 8 adet IR led/Fototransistör çifti kullanılmıştır.  Akım miktarının yarıya düşürülmesi için ledler çiftler halinde seri olarak bağlanmışlardır. Bir mosfet ledleri korunması amacıyla elektronik devrede kullanılmıştır.  Her sensör ayrı bir I/O çıkışına sahiptir.

Özellikler:

  • Boyutları: 75x 13×3 mm
  • Çalışma voltajı: 3,3-5,0 V
  • Tedarik akımı: 100 mA
  • Çıkış formatı:Dijital I/O uyumlu
  • Çıkış voltaj aralığı: 0 V gerilim ile birlikte
  • Optimal algılama mesafesi: 3 mm
  • Maksimum mesafe algılama: 9,5 mm
  • Ağırlık: 3,09 gr.

QTR-8RC sensörünün giriş çıkışları için dijital sinyal kullanılır. Bu sensöre benzeyen QTR-8A yansıma sensörünün ise çıkışları analogtur.  (Aslında çizgi izleyenden daha iyi performans alabilmek için analog çıkış daha iyi olur bence..) QTR-8RC sensöründe 8 sensör çifti vardır. Ama siz isterseniz bunlardan 2 tanesini ayırıp 6+2 şeklinde de kullanabilirsiniz. Eğer çalışmalarınızda 1 -2-3 sensör çifti gerekiyorsa bunun için de sensör çiftleri bulunuyor http://www.pololu.com/search/compare/123 adresinden diğer sensörleri de görebilirsiniz.

QTR-8RC nasıl çalışıyor?

QTR-8RC yansıma sensörü genellikle bir çizgi sensörü olarak kullanılıyor. Ama genel amaçlı proximity(yakınlık) veya yansıma sensörü olarak da kullanılabilir. Modül üstünde 8 adet IR alıcı ve verici çifti var. Sensörü kullanmak çin öncelikle OUT pinine uygun gerilimi uygulamalısınız. QTR-8RC sensöründe  digital çıkışın HIGH seviyesinden  LOW seviyesine geçme süresini ölçerek karşısında bir cisim olup olmadığını anlayabiliyoruz. QTR-8RC sensöründe 11 adet pin bağlantısı var. Biri GND, biri VCC, biri LED ON ve 8 tane sensör çıktısı. GND ve VCC’yi bağlayın 3.3V veya 5V ile besleyebilirsiniz. LED ON tasarruf için tasarlanmış. Uygulamanızda sensörü kullanmadığınız anlar varsa  LED ON pinini GND yapıp ledleri kapatabilirsiniz  ama hiç bağlamasanız da olur.  Zaten bu pin devrede kendiliğinden HIGH durumundadır. QTR-8RC Sensör çıkışlarını denetleyicinizin digital pinlerine bağlayın. Donanım kısmı bu kadar.

 

Pin bağlantısı:

 

polulu

Gelelim yazılım kısmına:

QTR-8RC sensörünü arduino ile kullanacaksanız bunun için hazır bir kod kütüphanesi var. Şu linkten ulaşabilirsiniz: https://github.com/pololu/qtr-sensors-arduino  Aşağıda arduino için kodlama örneği var:

 

#include <QTRSensors.h>

// This example is designed for use with eight QTR-1RC sensors or the eight sensors of a
// QTR-8RC module.  These reflectance sensors should be connected to digital inputs 3 to 10.
// The QTR-8RC's emitter control pin (LEDON) can optionally be connected to digital pin 2, 
// or you can leave it disconnected and change the EMITTER_PIN #define below from 2 to 
// QTR_NO_EMITTER_PIN.

// The setup phase of this example calibrates the sensor for ten seconds and turns on
// the LED built in to the Arduino on pin 13 while calibration is going on.
// During this phase, you should expose each reflectance sensor to the lightest and 
// darkest readings they will encounter.
// For example, if you are making a line follower, you should slide the sensors across the
// line during the calibration phase so that each sensor can get a reading of how dark the
// line is and how light the ground is.  Improper calibration will result in poor readings.
// If you want to skip the calibration phase, you can get the raw sensor readings
// (pulse times from 0 to 2500 us) by calling qtrrc.read(sensorValues) instead of
// qtrrc.readLine(sensorValues).

// The main loop of the example reads the calibrated sensor values and uses them to
// estimate the position of a line.  You can test this by taping a piece of 3/4" black
// electrical tape to a piece of white paper and sliding the sensor across it.  It
// prints the sensor values to the serial monitor as numbers from 0 (maximum reflectance) 
// to 1000 (minimum reflectance) followed by the estimated location of the line as a number
// from 0 to 5000.  1000 means the line is directly under sensor 1, 2000 means directly
// under sensor 2, etc.  0 means the line is directly under sensor 0 or was last seen by
// sensor 0 before being lost.  5000 means the line is directly under sensor 5 or was
// last seen by sensor 5 before being lost.


#define NUM_SENSORS   8     // number of sensors used
#define TIMEOUT       2500  // waits for 2500 microseconds for sensor outputs to go low
#define EMITTER_PIN   2     // emitter is controlled by digital pin 2

// sensors 0 through 7 are connected to digital pins 3 through 10, respectively
QTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10},
  NUM_SENSORS, TIMEOUT, EMITTER_PIN); 
unsigned int sensorValues[NUM_SENSORS];


void setup()
{
  delay(500);
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);    // turn on Arduino's LED to indicate we are in calibration mode
  for (int i = 0; i < 400; i++)  // make the calibration take about 10 seconds
  {
    qtrrc.calibrate();       // reads all sensors 10 times at 2500 us per read (i.e. ~25 ms per call)
  }
  digitalWrite(13, LOW);     // turn off Arduino's LED to indicate we are through with calibration

  // print the calibration minimum values measured when emitters were on
  Serial.begin(9600);
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMinimumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  
  // print the calibration maximum values measured when emitters were on
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMaximumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.println();
  delay(1000);
}


void loop()
{
  // read calibrated sensor values and obtain a measure of the line position from 0 to 5000
  // To get raw sensor values, call:
  //  qtrrc.read(sensorValues); instead of unsigned int position = qtrrc.readLine(sensorValues);
  unsigned int position = qtrrc.readLine(sensorValues);

  // print the sensor values as numbers from 0 to 1000, where 0 means maximum reflectance and
  // 1000 means minimum reflectance, followed by the line position
  for (unsigned char i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(sensorValues[i]);
    Serial.print('\t');
  }
  //Serial.println(); // uncomment this line if you are using raw values
  Serial.println(position); // comment this line out if you are using raw values
  
  delay(250);
}

 

 

Son olarak   Sayın Mehmet Akif Sönmezin paylaştığı çizgi izleyen ve bu sensörün kullanımıyla ilgili kodları da ekleyelim: pololudeneme çizgi-izleyen-8-sensörlü-pwm

QTR-8RC  videoları:

 

Ekleme: Eğer “QTRSensorsRC does not name ..”  şeklinde bir hata alırsanız sensörün kütüphanesini kurmamışsınız demektir. Arduino/libraries/qtr8rc  klasörü var mı bakın yoksa kurun.  Kütüphane: https://github.com/pololu/qtr-sensors-arduino/tree/master/QTRSensors

1 Yorum