Parçalar · 4 dk okuma

IR Alıcı ve Kumanda: Arduino ile Uzaktan Kumandalı Projeler

Kızılötesi (IR) alıcı nasıl çalışır? VS1838B bağlantısı, IRremote kütüphanesiyle tuş kodlarını okuma, NEC protokolü, kumandayla LED ve röle kontrolü, IR LED ile sinyal gönderme, ESP32 ve Pico kullanımı.

Televizyon, klima ve müzik setlerinin kumandaları kızılötesi (IR) ışıkla çalışır. Arduino'ya birkaç liralık bir IR alıcı eklediğinde evdeki neredeyse her kumandanın tuşlarını okuyabilir, bu tuşlarla lamba, LED, motor ya da müzik kontrol edebilirsin. Eşleştirme, uygulama ya da internet gerekmez; kumandayı karta doğrultup tuşa basman yeterlidir. Uzaktan kumandalı ilk projen için en kolay ve en ucuz yol budur.

VS1838B kızılötesi IR alıcı
Kızılötesi alıcı (VS1838B): siyah kubbenin içinde ışığa duyarlı bir diyot ve sinyali çözen küçük bir devre bulunur; 3 bacağı vardır.

Kızılötesi kumanda nasıl çalışır?

Kumandanın ucundaki IR LED, gözün göremediği yaklaşık 940 nm dalga boyunda ışık yayar. Bu ışık sürekli yanmaz; saniyede 38.000 kez yanıp sönen bir taşıyıcı sinyal üzerine bindirilir. Alıcının içindeki devre yalnızca bu frekansta titreyen ışığı dikkate alır; böylece güneş ışığı ve lambalar sinyali bozamaz. Alıcı bu titreşimi temiz dijital darbelere çevirir ve sinyal geldiği sürece çıkışını LOW yapar.

Tuşun hangisi olduğu, darbelerin ve aradaki boşlukların uzunluğuyla kodlanır. Bunun için farklı "diller" yani protokoller vardır: en yaygını NEC'tir (bir adres ve bir komut baytı), ayrıca Sony, RC5 (Philips) ve Samsung protokolleri de sık görülür. Neyse ki çözme işini kütüphane yapar; sen yalnızca tuşun kodunu okursun.

Kumandanın çalışıp çalışmadığını anlamak için telefonunun kamerasını kumandanın LED'ine doğrult ve bir tuşa bas. Gözünle göremediğin kızılötesi ışığı kamera ekranında mor-beyaz bir yanıp sönme olarak görürsün.

Teknik özellikler (VS1838B)

ÖzellikDeğer
Taşıyıcı frekans38 kHz
Dalga boyuYaklaşık 940 nm
Besleme2,7–5,5 V
Menzil8–10 m (kumandanın piline ve açıya göre)
Görüş açısıYaklaşık ±35°
ÇıkışSinyal varken LOW (aktif LOW)
PinlerOUT, GND, VCC

IR alıcı bağlantısı

Alıcı piniArduino UnoESP32Raspberry Pi Pico
OUT (S)D2GPIO 15GP16
GND (–)GNDGNDGND
VCC (+)5V3V33V3
Çıplak VS1838B'de pin sırası, kubbe sana bakarken soldan sağa OUT, GND, VCC şeklindedir; kart üzerindeki modüllerde ise kartın üzerindeki yazıyı takip et. VCC ve GND'yi ters bağlamak alıcıyı birkaç saniyede ısıtıp bozar.

IRremote kütüphanesiyle tuş kodlarını okumak

Kütüphane Yöneticisi'nde IRremote ara ve Armin Joachimsmeyer'in kütüphanesini kur. Aşağıdaki kod 4.x sürümüyle çalışır; her tuşa bastığında protokolü, adresi ve komut kodunu Seri Monitör'e yazar. İnternetteki eski örneklerde IRrecv ve decode(&results) gibi komutlar görürsen bunlar eski sürüme aittir.

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4
5void setup() {
6  Serial.begin(9600);
7  IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);   // sinyal gelince dahili LED yanar / onboard LED blinks on signal
8}
9
10void loop() {
11  if (IrReceiver.decode()) {
12    Serial.print("Komut / command: 0x");
13    Serial.println(IrReceiver.decodedIRData.command, HEX);
14    IrReceiver.printIRResultShort(&Serial);        // protokol ve adres / protocol and address
15    IrReceiver.resume();                           // sonraki tuşa hazırlan / ready for the next key
16  }
17}

Kumandanın tuşlarına tek tek basıp çıkan kodları not al. Kitlerde gelen küçük 21 tuşlu kumandalar genellikle NEC protokolünü kullanır ve kodları çoğunlukla aşağıdaki gibidir; yine de kendi kumandanın kodlarını okuyarak doğrula:

TuşKomut (NEC)
CH-0x45
CH0x46
CH+0x47
PREV0x44
NEXT0x40
PLAY/PAUSE0x43
VOL-0x07
VOL+0x15
00x16
10x0C
20x18
30x5E

Kumandayla LED ve röle kontrolü

Kodları öğrendikten sonra her tuşa bir görev verebilirsin. Aşağıdaki örnekte "1" tuşu bir röleyi açıp kapatır, VOL+ ve VOL- ise bir LED'in parlaklığını PWM ile ayarlar. Tuşa basılı tutulduğunda kumanda tekrar sinyali gönderir; aç-kapa gibi işlerde bu tekrarları yok saymak gerekir, yoksa röle bir açılıp bir kapanır. Röle bağlantısı için Röle Modülü Nedir? yazısına bakabilirsin.

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4const int LED_PIN = 9;       // PWM pini / PWM pin
5const int RELAY_PIN = 7;     // aktif LOW röle / active-LOW relay
6
7bool relayOn = false;
8int brightness = 128;
9
10void setup() {
11  pinMode(LED_PIN, OUTPUT);
12  pinMode(RELAY_PIN, OUTPUT);
13  digitalWrite(RELAY_PIN, HIGH);
14  IrReceiver.begin(IR_PIN);
15}
16
17void loop() {
18  if (!IrReceiver.decode()) return;
19  bool repeat = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT;   // tuş basılı tutuluyor / key held down
20  switch (IrReceiver.decodedIRData.command) {
21    case 0x0C:                               // "1": röleyi aç-kapa / toggle the relay
22      if (!repeat) {
23        relayOn = !relayOn;
24        digitalWrite(RELAY_PIN, relayOn ? LOW : HIGH);
25      }
26      break;
27    case 0x15:                               // VOL+: daha parlak / brighter
28      brightness = min(brightness + 15, 255);
29      break;
30    case 0x07:                               // VOL-: daha sönük / dimmer
31      brightness = max(brightness - 15, 0);
32      break;
33  }
34  analogWrite(LED_PIN, brightness);
35  IrReceiver.resume();                       // sonraki tuşa hazırlan / ready for the next key
36}
Arduino Uno'da IRremote kütüphanesi Timer2'yi kullanır. Bu yüzden 3 ve 11. pinlerdeki PWM ve buzzer için kullanılan tone() fonksiyonu kütüphaneyle çakışabilir; LED'i 5, 6, 9 ya da 10. pine bağla.

Arduino ile IR sinyali göndermek

Arduino yalnızca kumandaları dinlemekle kalmaz, kendisi de kumanda olabilir. Bir IR LED'i (940 nm) 100 Ω'luk bir dirençle Uno'nun 3. pinine bağla; menzili artırmak için LED'i bir transistörle sürebilirsin. Önce kontrol etmek istediğin cihazın kumandasını yukarıdaki kodla okuyup adres ve komut değerlerini öğren, sonra aynı kodu Arduino'dan gönder:

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_SEND_PIN = 3;    // IR LED, 100 Ω direnç ile / IR LED with a 100 Ω resistor
4
5void setup() {
6  IrSender.begin(IR_SEND_PIN);
7}
8
9void loop() {
10  IrSender.sendNEC(0x00, 0x46, 0);   // adres, komut, tekrar sayısı / address, command, repeats
11  delay(5000);
12}

ESP32 ve Raspberry Pi Pico ile IR

VS1838B 3,3 V ile sorunsuz çalıştığı için ESP32 ve Pico'ya doğrudan bağlanır. IRremote kütüphanesi ESP32'yi destekler; alıcıyı GPIO 15 gibi herhangi bir giriş pinine bağlayabilirsin. ESP32 ile kumandadan gelen tuşu Wi-Fi üzerinden başka cihazlara iletebilir ya da telefondan gelen komutu IR LED ile televizyona gönderen bir "akıllı kumanda" yapabilirsin. Pico'da MicroPython için Peter Hinch'in micropython_ir kütüphanesi kullanılır:

MicroPython
1from machine import Pin
2from ir_rx.nec import NEC_8          # micropython_ir kütüphanesi / library (Peter Hinch)
3import time
4
5def on_key(command, address, ctrl):
6    if command >= 0:                 # negatif değerler tekrar ya da hata / negatives mean repeat or error
7        print("Komut / command: 0x{:02X}".format(command))
8
9ir = NEC_8(Pin(16, Pin.IN), on_key)  # GP16 → OUT
10
11while True:
12    time.sleep(1)

IR alıcı ve kumanda ile proje fikirleri

  • Kumandalı lamba: Televizyon kumandasının boşta kalan bir tuşuyla 220 V'luk lambayı bir röleyle aç.
  • Renk kumandası: Rakam tuşlarıyla bir RGB LED'in rengini değiştir.
  • Kumandalı robot araba: Yön tuşlarıyla iki motoru yöneten bir araba.
  • Melodi kutusu: Her rakam tuşuna farklı bir melodi ata; ses tarafı için Buzzer Nedir?
  • Öğrenen kumanda: Başka kumandaların kodlarını kaydedip tek bir Arduino'dan gönder.
  • Şifreli kilit: Doğru tuş sırası girildiğinde servo ile kilidi aç.

Sık yapılan hatalar ve çözümleri

  • Hiç kod gelmiyor: OUT kablosu koddaki pinden farklı bir pinde, alıcının bacakları ters ya da kumandanın pili bitmiş; kumandayı telefon kamerasıyla kontrol et.
  • Örnek kod derlenmiyor: İnternetteki eski örnekler IRremote 2.x içindir; 4.x sürümünde IrReceiver.begin() ve IrReceiver.decode() kullanılır.
  • Rastgele kodlar geliyor: Alıcı doğrudan güneş ışığına ya da floresan lambaya bakıyor olabilir; alıcıyı gölgeye al.
  • Aç-kapa tuşu iki kez çalışıyor: Tekrar sinyalleri yok sayılmıyor; IRDATA_FLAGS_IS_REPEAT bayrağını kontrol et.
  • tone() ya da 3 ve 11. pinlerdeki PWM bozuluyor: Uno'da IRremote ile aynı zamanlayıcıyı (Timer2) paylaşıyorlar.
  • IR LED ile gönderim menzili çok kısa: LED'i bir transistörle daha yüksek akımla sür ve cihaza doğru çevir.

IR alıcı, kablosuz kontrolün en basit ve en ucuz yoludur; evdeki eski kumandalar bile yeni projelerinde ikinci bir hayata kavuşur. BlueGrays uygulamasında IR alıcı ile kumanda değeri okuma, LED açıp kapama, kumandayla melodi çalma, 220 V lamba kontrolü ve ESP32 ile evrensel kumanda projelerini devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

IR alıcı kaç metreden sinyal alır?

VS1838B gibi alıcılar, iyi bir kumandayla düz görüş hattında 8–10 metreye kadar sinyal alabilir. Kumandanın pili zayıfladıkça, açı büyüdükçe ve ortamda güçlü ışık oldukça menzil kısalır.

Her kumanda Arduino ile çalışır mı?

38 kHz kullanan kızılötesi kumandaların neredeyse tamamı çalışır ve IRremote yaygın protokollerin çoğunu çözer. 36, 40 ya da 56 kHz kullanan kumandalarla menzil kısalabilir. Radyo frekansıyla (433 MHz gibi) çalışan kumandalar ise IR alıcıyla okunamaz.

IR alıcı güneş altında çalışır mı?

Alıcının içindeki filtre sabit ışığı büyük ölçüde engeller, ama doğrudan güneş ışığı alıcıyı doyurabilir ve menzili ciddi şekilde düşürür. Dış mekânda alıcıyı gölgede ya da küçük bir koruyucu tüpün içinde kullan.

IR kumanda duvarın arkasından çalışır mı?

Hayır. Kızılötesi ışık duvarlardan geçemez; kumanda ile alıcı arasında görüş hattı ya da ışığın yansıyabileceği bir yüzey olmalıdır. Başka odadaki bir cihazı kontrol etmek için RF modülleri ya da Wi-Fi kullanılır.

IRremote'un hangi sürümünü kullanmalıyım?

Güncel 4.x sürümünü kullan. Bu sürümde IrReceiver.begin(), IrReceiver.decode() ve decodedIRData.command kullanılır. İnternetteki eski örneklerde görülen IRrecv irrecv(pin) ve decode(&results) komutları 2.x sürümüne aittir ve yeni sürümle uyumsuzdur.

Telefonumu kumanda olarak kullanabilir miyim?

Bazı Android telefonlarda dahili IR verici bulunur ve uygun uygulamalarla kumanda gibi kullanılabilir. Telefonunda IR yoksa ESP32 ile bir web sayfası kurup telefondan gelen komutu bir IR LED üzerinden cihaza gönderebilirsin.

Tüm projeleri gör
IR Alıcı Ve Kumanda Değer Okuma
#16Başlangıç
Premium

IR Alıcı Ve Kumanda Değer Okuma

IR alıcı modülü ile uzaktan kumandadan gelen kızılötesi sinyallerin HEX değerlerini Serial Monitor'da okuyan proje. IRremote kütüphanesi kullanımını öğretir.

4.5(39)
55
IR Alıcı Ve Kumanda İle Led Açma Kapatma
#17Orta
Premium

IR Alıcı Ve Kumanda İle Led Açma Kapatma

Uzaktan kumandanın farklı tuşlarıyla 3 LED'i bağımsız olarak açıp kapatabilen IR kontrol projesi. Kumanda kodlarını eşleştirme ve çoklu çıkış kontrolünü öğretir.

4.7(45)
66
IR Alıcı, Kumanda ve Buzzer ile Hazır Melodi Çalma
#18Başlangıç
Premium

IR Alıcı, Kumanda ve Buzzer ile Hazır Melodi Çalma

IR kumandanın farklı tuşlarına basarak Mario, Anneler Günü ve Yılbaşı melodilerini buzzer ile çalan proje. Kumanda ile fonksiyon tetikleme ve melodi programlamayı birleştirir.

4.8(57)
74
220V Ampülü Uzaktan Kumanda İle Yakma
#21İleri
Premium

220V Ampülü Uzaktan Kumanda İle Yakma

IR uzaktan kumandanın güç ve sessiz tuşlarıyla 220V ampulü röle üzerinden açıp kapatan proje. Kızılötesi kontrol ile yüksek gerilim anahtarlamayı birleştirir.

4.4(22)
30
Lazerli Güvenlik Sistemi
#23İleri
Premium

Lazerli Güvenlik Sistemi

Lazer ışını kesildiğinde alarmı aktifleyen, buton veya IR kumanda ile sıfırlayabilen gelişmiş güvenlik sistemi. Çoklu giriş kaynağı ve durum yönetimini öğretir.

4.8(60)
77
ESP32 IR Alıcı ile Uzaktan Kumanda (LCD Ekranlı)
#124Orta
Premium

ESP32 IR Alıcı ile Uzaktan Kumanda (LCD Ekranlı)

Bu projede TSOP4838 IR alıcı modülü kullanarak televizyon, klima veya herhangi bir kızılötesi kumandadan gelen sinyalleri ESP32 ile yakalıyoruz. IRremote v4 kütüphanesi ile her tuşun benzersiz kodunu I2C LCD ekranda görüntüleyip kayıt altına alıyoruz. Ardından bu kodları kullanarak bir LED'i kumandayla açıp kapatıyor ve parlaklığını ayarlıyoruz. Eski kumandaları akıllı ev kontrolüne dönüştürmek için mükemmel bir başlangıçtır.

4.7(19)
30
ESP32 IR Universal Remote (IR Alıcı + Kumanda + 3 LED + Buzzer + OLED)
#143İleri
Premium

ESP32 IR Universal Remote (IR Alıcı + Kumanda + 3 LED + Buzzer + OLED)

ESP32 ile hazır bir IR uzaktan kumandayı okuyup kendi cihazını kontrol edebilirsin! Bu projede kızılötesi alıcı (NEC protokolü 38kHz) ile 20 tuşlu bir IR kumandanın sinyallerini yakalıyoruz. Her tuş için farklı aksiyon tanımladık: 1/2/3 tuşları üç ayrı LED'i toggle eder, PWR tuşu hepsini söndürür, 4-9 rakamları OLED'de özel gösterim yapar. SSD1306 OLED ekranda basılan son tuş büyük fontla, yapılan aksiyon açıklaması ve LED durumu canlı gösterilir. Bilinmeyen bir tuş basıldığında OLED'de HEX kodu

4.6(8)
14
Lazerli Uyarı Sistemi
#22Orta
Premium

Lazerli Uyarı Sistemi

Lazer ışını kesildiğinde LDR üzerinden algılayarak buzzer ve LED ile uyarı veren güvenlik projesi. Lazer-LDR çifti ile ışık kesintisi algılama mantığını öğretir.

4.8(64)
82

Televizyon kumandasının nasıl çalıştığını, IR alıcıyı Arduino'ya bağlamayı, tuş kodlarını okumayı, kumandayla lamba ve LED kontrol etmeyi ve Arduino'dan IR sinyali göndermeyi öğren.

IR Alıcı ve Kumanda: Arduino ile Uzaktan Kumandalı Projeler | BlueGrays