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.
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.
#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.
#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
FFFFFFFF gönderir. Kodunuzda bu değeri göz ardı etmelisiniz.