Kızılötesi (IR) Çizgi Sensörü
Kızılötesi çizgi sensörü, zemine kızılötesi ışık gönderip geri yansıyan miktarı ölçerek yüzeyin açık mı koyu mu olduğunu anlar. Çizgi izleyen robotların gözü budur.
Aynı prensip engel algılamada da kullanılır: yansıyan ışık varsa önde bir cisim vardır.
Nasıl Çalışır?
Sensörün üzerinde yan yana iki bileşen bulunur:
- IR LED (verici): Sürekli kızılötesi ışık yayar. Gözle görünmez.
- Fototransistör (alıcı): Yansıyan kızılötesi miktarına göre iletkenliği değişir.
Zeminin rengi sonucu belirler:
| Yüzey | Yansıma | Alıcının gördüğü | Dijital çıkış |
|---|---|---|---|
| Beyaz / açık renk | Yüksek | Çok ışık | Genellikle LOW |
| Siyah / koyu renk | Düşük (ışığı yutar) | Az ışık | Genellikle HIGH |
Siyah yüzey kızılötesini emer, beyaz yüzey yansıtır. Sensör aslında rengi değil, yansıtıcılığı ölçer — bu yüzden mat siyah bant ile parlak siyah zemin farklı sonuç verebilir.
Çıkış polaritesi modüle göre değişir. Kendi modülünüzde beyaz zeminin HIGH mı LOW mu verdiğini ilk iş olarak test edin.
Yaygın Modüller
| Model | Tip | Menzil | Not |
|---|---|---|---|
| TCRT5000 | Çizgi (yakın mesafe) | 1 – 25 mm | En yaygın çizgi sensörü |
| QRE1113 | Çizgi | 1 – 5 mm | Daha hassas, yarış robotlarında |
| FC-51 / IR engel modülü | Engel | 2 – 30 cm | Ayarlanabilir mesafe |
| QTR-8A / QTR-8RC | 8’li çizgi dizisi | 3 – 8 mm | Profesyonel çizgi izleyici |
Modül Bağlantısı
Tipik bir TCRT5000 modülünde üç veya dört pin bulunur:
| Pin | Açıklama |
|---|---|
| VCC | 3,3 – 5 V |
| GND | Toprak |
| DO | Dijital çıkış (eşiğe göre HIGH/LOW) |
| AO | Analog çıkış (ham yansıma değeri) |
Kart üzerindeki mavi potansiyometre, DO çıkışının eşiğini ayarlar.
DO mu, AO mu?
DO (dijital) basittir: “siyah” veya “beyaz”. Basit çizgi izleyiciler için yeterlidir.
AO (analog) yansıma miktarını sayı olarak verir. Çizginin ne kadar dışına çıktığınızı bilirsiniz. PID kontrollü, yumuşak dönüş yapan robotlar için gereklidir.
Ciddi bir çizgi izleyici yapıyorsanız AO kullanın.
Dijital Okuma
const int SENSOR_PIN = 2;
void setup() {
pinMode(SENSOR_PIN, INPUT);
Serial.begin(9600);
}
void loop() {
int durum = digitalRead(SENSOR_PIN);
if (durum == HIGH) {
Serial.println("Siyah zemin (cizgi uzerinde)");
} else {
Serial.println("Beyaz zemin");
}
delay(100);
}Analog Okuma ve Kalibrasyon
Analog çıkışın gerçek gücü kalibrasyondadır. Aynı sensör farklı zeminlerde farklı değerler okur; bu yüzden eşiği sabit yazmak yerine ölçerek bulmak gerekir.
const int SENSOR_PIN = A0;
int beyazDeger = 0;
int siyahDeger = 0;
int esik = 0;
void kalibreEt() {
Serial.println("Sensoru BEYAZ zemine tutun, 3 saniye...");
delay(3000);
beyazDeger = analogRead(SENSOR_PIN);
Serial.print("Beyaz: ");
Serial.println(beyazDeger);
Serial.println("Sensoru SIYAH cizgiye tutun, 3 saniye...");
delay(3000);
siyahDeger = analogRead(SENSOR_PIN);
Serial.print("Siyah: ");
Serial.println(siyahDeger);
esik = (beyazDeger + siyahDeger) / 2;
Serial.print("Esik degeri: ");
Serial.println(esik);
}
void setup() {
Serial.begin(9600);
kalibreEt();
}
void loop() {
int deger = analogRead(SENSOR_PIN);
Serial.print(deger);
Serial.print(" -> ");
Serial.println(deger > esik ? "SIYAH" : "BEYAZ");
delay(200);
}Zemin veya aydınlatma değiştiğinde kalibrasyonu tekrarlamak gerekir. Yarışma robotlarında bu yüzden başlangıçta bir kalibrasyon butonu bulunur.
Çizgi İzleyen Robot Mantığı
İki sensörlü (basit)
İki sensör çizginin iki yanına, çizgiyi ortada bırakacak şekilde yerleştirilir.
| Sol sensör | Sağ sensör | Anlam | Hareket |
|---|---|---|---|
| Beyaz | Beyaz | Çizgi ortada | Düz git |
| Siyah | Beyaz | Robot sağa kaymış | Sola dön |
| Beyaz | Siyah | Robot sola kaymış | Sağa dön |
| Siyah | Siyah | Kesişim veya bitiş çizgisi | Dur / özel durum |
const int SOL_SENSOR = 2;
const int SAG_SENSOR = 3;
void ileri() { /* iki motor da ileri */ }
void solaDon() { /* sol motor dur, sag motor ileri */ }
void sagaDon() { /* sag motor dur, sol motor ileri */ }
void dur() { /* iki motor da dur */ }
void loop() {
bool sol = digitalRead(SOL_SENSOR); // HIGH = siyah
bool sag = digitalRead(SAG_SENSOR);
if (!sol && !sag) {
ileri();
} else if (sol && !sag) {
solaDon();
} else if (!sol && sag) {
sagaDon();
} else {
dur();
}
}Bu yöntem çalışır ama robot zikzak çizer. Sensörler arasındaki mesafe çizgi kalınlığına yakın olmalıdır.
Üç ve beş sensörlü
Sensör sayısı arttıkça robot çizgiden ne kadar saptığını daha iyi bilir ve dönüşler yumuşar.
Beş sensörlü bir dizide her sensöre bir ağırlık verilir (−2, −1, 0, +1, +2). Okunan değerlerin ağırlıklı ortalaması hata değerini verir:
const int SENSOR_SAYISI = 5;
const int pinler[SENSOR_SAYISI] = { A0, A1, A2, A3, A4 };
const int agirliklar[SENSOR_SAYISI] = { -2, -1, 0, 1, 2 };
const int ESIK = 500;
float hataHesapla() {
float toplamAgirlik = 0;
int aktifSayisi = 0;
for (int i = 0; i < SENSOR_SAYISI; i++) {
if (analogRead(pinler[i]) > ESIK) { // siyah gorduyse
toplamAgirlik += agirliklar[i];
aktifSayisi++;
}
}
if (aktifSayisi == 0) return 999; // cizgi kayboldu
return toplamAgirlik / aktifSayisi;
}Hata değeri 0 ise robot tam ortadadır. Negatifse sola, pozitifse sağa kaymıştır. Bu hata değeri bir PID kontrolcüsüne verilerek motor hızları ayarlanır — profesyonel çizgi izleyicilerin yaptığı budur.
Sensör Yüksekliği
Bu, çizgi sensörlerinde en sık yapılan mekanik hatadır.
TCRT5000’in optimum çalışma mesafesi zeminden 3 – 8 mm’dir.
- Çok yakın (< 2 mm): Alıcı doyuma girer, beyaz ile siyah arasındaki fark kaybolur.
- Çok uzak (> 15 mm): Yansıyan ışık zayıflar, sensör her yerde “siyah” okur.
Robotun süspansiyonu yoksa ve zemin düz değilse bu mesafe sürekli değişir. Sensör tutucuyu ayarlanabilir yapmak ciddi zaman kazandırır.
Ortam Işığı Sorunu
IR sensörler güneş ışığından ciddi şekilde etkilenir; güneş güçlü bir kızılötesi kaynağıdır.
Belirtileri: robot içeride mükemmel çalışır, pencere kenarında veya dışarıda çıldırır.
Çözümler:
- Sensörleri robotun altına, ışık girmeyecek şekilde yerleştirin.
- Sensör çevresine küçük bir siyah gölgelik / etek ekleyin.
- Modülasyonlu sensör kullanın (38 kHz taşıyıcılı IR alıcılar ortam ışığını filtreler).
- QTR-8RC gibi, ortam ışığını referans alarak fark ölçen dizileri tercih edin.
IR Engel Sensörü (FC-51)
Aynı prensiple çalışır ama zemine değil ileriye bakar. Önünde bir cisim varsa IR ışık yansır ve çıkış aktif olur.
| Özellik | Değer |
|---|---|
| Algılama mesafesi | 2 – 30 cm (potansiyometre ile ayarlanır) |
| Çıkış | Dijital (engel varken genellikle LOW) |
| Besleme | 3,3 – 5 V |
Sınırları: Algılanan mesafe cismin rengine ve yüzeyine bağlıdır. Siyah bir cisim, beyaz bir cisimden çok daha yakında algılanır. Bu yüzden IR engel sensörü mesafe ölçmez, sadece “var/yok” der. Gerçek mesafe için HC-SR04 veya VL53L0X kullanın.
Özet
IR çizgi sensörü, zemine kızılötesi ışık gönderip yansıyan miktarı ölçerek açık ve koyu yüzeyleri ayırt eder. Siyah yüzey ışığı emer, beyaz yüzey yansıtır.
Bu derste şunları öğrendik:
- IR LED ve fototransistör ikilisinin çalışma mantığını
- DO (dijital) ve AO (analog) çıkış farkını
- Zemine göre kalibrasyon yapmayı
- İki, üç ve beş sensörlü çizgi izleme mantığını
- Ağırlıklı ortalama ile hata değeri hesaplamayı
- Sensör yüksekliğinin (3–8 mm) neden kritik olduğunu
- Güneş ışığının yarattığı sorunu ve çözümlerini