Evinizdeki televizyonu, müzik çalarınızı veya klimanızı kontrol ettiğiniz kızılötesi (IR) kumandalarla kendi elektronik projelerinizi de yönetebileceğinizi biliyor muydunuz? Bu detaylı rehberde, bir Arduino, VS1838B kızılötesi alıcı sensör ve RGB LED kullanarak uzaktan kumandalı basit ama son derece etkili bir proje geliştireceğiz. Projemizin amacı şu olacak: Kumandadan “0” tuşuna bastığımızda LED’imiz kırmızı, “1” tuşuna bastığımızda yeşil, “2” tuşuna bastığımızda ise mavi yanacak.
Kızılötesi (IR) İletişim Nasıl Çalışır?
Kızılötesi ışık, yaklaşık 950 nm dalga boyuna sahip olduğu için insan gözüyle görülemeyen bir ışık türüdür. Kumandanızın tuşuna bastığınızda, kumandanın ucundaki kızılötesi LED çok hızlı bir şekilde yanıp sönerek bir veri paketi gönderir. Doğadaki diğer ısı ve ışık kaynaklarından (örneğin güneş ışığı veya ampuller) gelen kızılötesi dalgalarla karışmaması için, bu sinyaller genellikle 38 kHz frekansında (saniyede 38.000 kez) modüle edilir. Alıcı sensörümüz (VS1838B) sadece bu özel 38 kHz’lik sinyallere odaklanacak şekilde tasarlanmıştır, böylece çevresel gürültüleri filtreler.
Proje İçin Gerekli Malzemeler
Bu eğlenceli projeyi gerçekleştirmek için aşağıdaki donanımlara ihtiyacımız var:
- Arduino UNO (veya Nano, Mega gibi herhangi bir uyumlu kart)
- VS1838B Kızılötesi (IR) Alıcı Sensör (KY-022 modülü de sıklıkla kullanılır)
- Kızılötesi Kumanda (Evinizdeki eski bir TV kumandası veya Arduino setlerinden çıkan standart mini kumandalar olabilir)
- 1 Adet RGB LED (veya Kırmızı, Yeşil ve Mavi renklerde 3 adet standart LED)
- 3 Adet 220 Ohm Direnç (LED’lerin bozulmasını engellemek için)
- Breadboard (Devre Tahtası) ve Jumper Kablolar
Devre ve Donanım Bağlantıları

Bağlantıları yaparken dikkat etmeniz gereken en önemli nokta, IR alıcının bacak (pin) yapısıdır. Pinlerin yanlış bağlanması sensörün içindeki çipin yanmasına neden olabilir.
IR Alıcı (VS1838B) Bağlantısı: Sensörün mercek kısmı (bombeli siyah kısım) size bakarken bacak sıralaması genellikle şu şekildedir:
- Sol Bacak (OUT / Sinyal): Arduino’nun dijital 2 numaralı pinine bağlanır.
- Orta Bacak (GND): Arduino’nun GND (toprak) pinine bağlanır.
- Sağ Bacak (VCC): Arduino’nun 5V pinine bağlanır. (Not: Eğer KY-022 gibi bir modül kullanıyorsanız, modül üzerindeki S, – ve + işaretlerine dikkat ederek bağlayın.)
RGB LED Bağlantısı: RGB LED’ler aslında tek bir paket içine yerleştirilmiş üç farklı (Kırmızı, Yeşil, Mavi) LED’dir. Ortak bacak (en uzun bacak), LED’in türüne göre GND (Ortak Katot) veya 5V (Ortak Anot) pinine bağlanır. Biz Ortak Katot kullandığımızı varsayarak:
- Ortak Bacak (Uzun Bacak): Arduino’nun GND pinine bağlanır.
- Kırmızı (Red) Bacak: Araya 220 ohm direnç konularak Arduino’nun 9 numaralı dijital pinine bağlanır.
- Yeşil (Green) Bacak: Araya 220 ohm direnç konularak Arduino’nun 10 numaralı dijital pinine bağlanır.
- Mavi (Blue) Bacak: Araya 220 ohm direnç konularak Arduino’nun 11 numaralı dijital pinine bağlanır.
——————————————————————————–
Adım 1: Kumanda Tuşlarının Kodlarını (Değerlerini) Okuma
Her kumandanın gönderdiği sinyal değerleri farklıdır. Bu yüzden LED’lerimizi yakmadan önce, kendi kumandamızdaki 0, 1 ve 2 tuşlarına bastığımızda Arduino’ya hangi şifreli değerlerin ulaştığını bulmalıyız.
Öncelikle Arduino IDE programını açın ve Araçlar (Tools) -> Kütüphaneleri Yönet (Manage Libraries) sekmesinden IRremote (yazar: shirriff vb.) kütüphanesinin en güncel versiyonunu (v4.x) yükleyin. Ardından aşağıdaki kodu Arduino’ya yükleyin:
#include <IRremote.hpp> // Yeni nesil kütüphane kütüphanesini dahil ediyoruz
const int IR_PIN = 2; // Alıcımızın sinyal bacağını 2. pine bağladık
void setup() {
Serial.begin(115200); // Seri haberleşmeyi başlatıyoruz
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); // IR alıcıyı başlatıyoruz
Serial.println("IR Alıcı Hazır. Lütfen kumandadan tuşlara basın.");
}
void loop() {
if (IrReceiver.decode()) { // Eğer bir sinyal başarıyla çözümlendiyse
Serial.print("Basılan Tuşun Kodu: ");
Serial.println(IrReceiver.decodedIRData.command); // Tuş kodunu ekrana yazdır
IrReceiver.resume(); // Bir sonraki sinyali beklemek için alıcıyı sıfırla
}
}
Kodu yükledikten sonra Seri Port Ekranını (Serial Monitor) açın ve sağ alt köşeden Baud hızını 115200 olarak seçin. Kumandanızdan sırasıyla 0, 1 ve 2 tuşlarına basın. Ekranda örneğin 0 için 0x0C, 1 için 0x10, 2 için 0x11 gibi numaralar göreceksiniz. Bu numaraları not edin!.
——————————————————————————–
Adım 2: Kumanda ile RGB LED Kontrol Kodu (Ana Proje)
Şimdi öğrendiğimiz bu değerleri kullanarak ana projemizi yazalım. Ben örnek olması açısından 0 tuşunu 22, 1 tuşunu 12, 2 tuşunu ise 24 olarak varsayarak kodluyorum. Siz kendi not ettiğiniz değerleri kullanmalısınız.
#include <IRremote.h>
#define IR_PIN 2
#define RED 9
#define GREEN 10
#define BLUE 11
void setup() {
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
}
void loop() {
if (IrReceiver.decode()) {
switch (IrReceiver.decodedIRData.command) {
case 0x0C: // 0 tuşu
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
break;
case 0x10: // 1 tuşu
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
break;
case 0x11: // 2 tuşu
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
break;
}
IrReceiver.resume();
}
}
——————————————————————————–
Yeni Başlayanlar İçin Kod Yapılarının Detaylı Açıklaması
Yukarıdaki kodda yazdığımız komutların arka planda ne işe yaradığını anlamak, bu işin mantığını kavramanız için çok önemlidir:
1. #include <IRremote.hpp> Ne İşe Yarar? Sensörden gelen o karmaşık görünmez ışık dalgalarını bizim anlayabileceğimiz sayılara çevirmek çok zor bir matematiksel işlemdir. Bu zor işlemi bizim yerimize yapan hazır koda “Kütüphane” diyoruz. IRremote.hpp diyerek, “Lütfen daha önceden başkalarının yazdığı kızılötesi okuma yeteneklerini benim koduma dahil et” demiş oluyoruz. Eski versiyonlarda bu .h uzantılıydı ancak yeni (3.x ve 4.x) versiyonlarda daha verimli çalışması için .hpp uzantısına geçilmiştir.
2. IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); Bu komut, sensörümüzün uyanıp çevreyi dinlemeye başladığı noktadır.
- IR_PIN: Sensörün Arduino’nun hangi kulağıyla (piniyle) dinleyeceğini belirtir (biz 2. pini seçtik).
- ENABLE_LED_FEEDBACK: Bu harika bir özelliktir. Kumandadan bir tuşa bastığınızda Arduino’nun üzerindeki dâhili küçük sarı LED’in (L isimli LED) sinyal geldiğini onaylamak için yanıp sönmesini sağlar. Böylece sensörün çalışıp çalışmadığını kodunuzda sorun olsa bile fiziksel olarak görebilirsiniz.
3. if (IrReceiver.decode()) decode(), İngilizcede “şifreyi çözmek” demektir. Bu satır Arduino’ya şunu söyler: “Eğer sensörden tam ve geçerli bir kızılötesi şifre geldiğini algılarsan, bu şifreyi çöz ve hemen altındaki süslü parantezlerin { } içindeki işlemleri yapmaya başla”. Sensöre sinyal gelmiyorsa bu blok tamamen atlanır.
4. IrReceiver.decodedIRData.command Eğer şifre başarıyla çözüldüyse, içindeki asıl tuş numarasına ulaşmamız gerekir. Modern kütüphanede, gelen tüm veriler bir paket (struktur) halinde gelir. Paketin içindeki .command kısmı, kumandanın hangi fonksiyon (örneğin ses açma, kanal değiştirme veya 1 numaralı tuş) tuşuna basıldığını belirten kısa ve temiz değerdir. İşte biz bu değeri alıp switch-case (durum seçme) yapısıyla eşleştirip renkleri yönetiyoruz.
5. IrReceiver.resume(); En kritik komutlardan biridir. “Resume”, kaldığın yerden devam et demektir. Eğer bu komutu yazmayı unutursanız, Arduino ilk tuş basımını mükemmel bir şekilde okur ve LED’i yakar, ancak ondan sonra sensör bir nevi “kilitlenir” ve yeni sinyal kabul etmez. resume(), Arduino’ya “Tamam, ben bu sinyalle işimi bitirdim, hafızayı temizle ve bir sonraki sinyal için tekrar pürdikkat dinlemeye başla” talimatını verir.
Sık Karşılaşılan Sorunlar ve Çözümleri
- Sistem çalışmıyor ve hiç değer alamıyorum: İlk olarak pencerelerden gelen direkt güneş ışığının sensörün üzerine vurmadığından emin olun. Güneş de güçlü bir kızılötesi kaynağıdır ve sensörü kör edebilir.
- Sürekli “FFFFFFFF” veya “0xFFFFFF” okuyorum: Eski kütüphane versiyonlarında, kumanda tuşuna basılı tuttuğunuzda bu tekrar kodları geliyordu. Yeni
.hppkütüphanesini kullanmak bu tekrarları daha temiz yönetir. Sinyalin bozuk gelmemesi için bağlantıların sağlam olduğundan emin olun.
Bu rehberi tamamladığınızda, evinizdeki herhangi bir kumandayı Arduino’nuza bağlamanın temel mantığını anlamış olacaksınız. Artık LED yerine bir röle modülü bağlayarak odanızın lambasını yakabilir veya küçük bir motor bağlayarak bir robot arabaya yön verebilirsiniz!




