Televizyon kumandasının ucundaki o küçük LED'in nasıl bir sırrı var? Aslında o, bizim göremediğimiz bir ışıkla (Kızılötesi) mors alfabesi gibi şifreli sinyaller gönderiyor. Bu projede o şifreleri çözecek ve kumanda ile LED yakacağız.

1. Gözün Görmediği Sinyaller

IR (Infrared) alıcı modülü, kumandadan gelen 38kHz frekansındaki ışık parlamalarını yakalar ve bunları Arduino'nun anlayacağı HEX (Onalılık) Kodlara çevirir.

TV Kumandası KIZILÖTESİ SİNYAL 010110... (Binary) 0xFFA25D HEX Kodu
Deney: Cep telefonunuzun kamerasını açıp TV kumandasının ucuna bakın ve bir tuşa basın. Çıplak gözle göremediğiniz o mor ışığı kamerada göreceksiniz! 📸

2. IR Alıcı Modülü (VS1838B)

Modülün üzerinde genellikle 3 bacak bulunur. DİKKAT: Çin malı modüllerde pin sırası bazen farklı olabilir (Sinyal ortada veya kenarda olabilir). Modülün üzerindeki minik yazılara (S, -, +) mutlaka bakın.

  • 🔌 S (Signal) ➔ Arduino Pin 11
  • 🔌 + (VCC) ➔ 5V
  • 🔌 - (GND) ➔ GND

3. Kütüphane Kurulumu

⚠️ Eski Kodlara Aldanmayın!

İnternetteki çoğu eğitim IRremote kütüphanesinin eski sürümünü (2.0) kullanır. O kodlar yeni sürümde (3.0 ve üzeri) ÇALIŞMAZ ve hata verir.


Biz en güncel ve doğru yapıyı kullanacağız. Lütfen Arduino Kütüphane Yöneticisi'nden "IRremote by Armin Joachimsmeyer" kütüphanesini kurun.

4. Adım 1: Kumanda Kodlarını Öğrenme

Önce hangi tuşun hangi kodu gönderdiğini öğrenmeliyiz. Bu kodu yükleyin, Seri Monitör'ü açın ve kumandaya basın.

IR_Kod_Okuyucu.ino Güncel (v3.0+)
#include <IRremote.hpp> // Dikkat: .h değil .hpp uzantısı

const int irPin = 11; // Sinyal Pini

void setup() {
  Serial.begin(9600);
  
  // Alıcıyı Başlat
  IrReceiver.begin(irPin, ENABLE_LED_FEEDBACK);
  
  Serial.println("Hazir! Kumandaya basin...");
}

void loop() {
  // Sinyal geldi mi?
  if (IrReceiver.decode()) {
    
    // Gelen veriyi HEX formatında yazdır
    // Eski kodlarda 'results.value' kullanılırdı, artık bu kullanılıyor:
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    
    // Bir sonraki sinyal için dinlemeye devam et
    IrReceiver.resume(); 
  }
}
        

5. Adım 2: LED Kontrolü

Seri monitörden tuşunuzun kodunu öğrendiniz mi? Örneğin benim kumandamda "1" tuşu 0xF30CFF00 kodunu veriyor. Şimdi bunu bir koşula (if) bağlayalım.

IR_LED_Kontrol.ino C++
#include <IRremote.hpp>

const int irPin = 11;
const int ledPin = 3; 

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  IrReceiver.begin(irPin, ENABLE_LED_FEEDBACK);
}

void loop() {
  if (IrReceiver.decode()) {
    
    // Gelen kodu değişkene al
    unsigned long gelenKod = IrReceiver.decodedIRData.decodedRawData;
    
    Serial.println(gelenKod, HEX);

    // Kendi kumandanızın kodunu buraya yazın (0x ile başlamalı)
    if (gelenKod == 0xF30CFF00) { 
      digitalWrite(ledPin, HIGH); // LED Yak
      Serial.println("LED ACILDI");
    }
    
    else if (gelenKod == 0xE718FF00) { // Başka bir tuş
      digitalWrite(ledPin, LOW);  // LED Söndür
      Serial.println("LED KAPANDI");
    }

    IrReceiver.resume();
  }
}
        

6. Sık Karşılaşılan Sorunlar

IR alıcılar güneş ışığından veya güçlü floresan lambalardan etkilenebilir. Modülün üzerine elinizle gölge yapıp tekrar deneyin.

Bu bir hata değildir. Çoğu kumanda, tuşa basılı tuttuğunuzda "Tekrar Kodu" (Repeat Code) olarak FFFFFFFF gönderir. Kodunuzda bu değeri göz ardı etmelisiniz.