Kendi evinizdeki herhangi bir IR alıcılı cihazı, örneğin televizyon veya müzik çalarınızı kontrol etmek için Seeeduino XIAO ile kendi evrensel Arduino IR Uzaktan Kumandanızı yapın! Bu basit proje, bir infrared (IR) uzaktan kumanda oluşturmanıza olanak tanıyacak.
Bugünün eğitimini takip ederek bu projeyi kendiniz nasıl inşa edeceğinize dair adım adım bir rehber edinebilirsiniz!

Seeeduino XIAO & Grove ile İnşa Etme
Bu projeyi gerçekleştirmek için Seeeduino XIAO ve onun Seeeduino XIAO Genişletme Kartı’ndan faydalanabiliriz!
Genişletme kartı, lehimleme veya karmaşık kablolama olmadan uyumlu Grove modülleri ile tak-çalıştır yapmamıza olanak tanıyan kullanışlı Grove konektörleri içeriyor. Seeeduino XIAO’nun genişletme kartının pin düzeni aşağıda gösterilmiştir. Gördüğümüz gibi, birçok farklı konektör barındırıyor ve hatta üzerinde bir LED ekranı var!

Gerekenler:
- Kontrol etmek istediğiniz IR alıcılı bir ev aleti
- O ev aleti için IR uzaktan kumanda
Gerekli Parçalar:
- Seeeduino XIAO
- Seeeduino XIAO Genişletme Kartı
- Grove Infrared Emitter
- Grove Infrared Receiver
- Grove 12-Kanal Kapasitif Dokunmatik Tuş Takımı
“İnfrared” Nedir?
İnfrared ışık, hepimizin gördüğü ışığa benzer, ancak farklı bir frekansa ve dalga boyuna sahiptir. Görünür ışık spektrumunun dışında yer aldığından, insanlar için görünmezdir ve gizli kablosuz iletim için harikadır!

Ancak, infrared bir ışık türü olduğu için, iletişimin çalışabilmesi için verici ile alıcı arasında açık bir hat gerektirir. Bu, BLE veya WiFi’nin aksine, IR sinyallerimizin duvarlardan veya diğer opak malzemelerden geçemeyeceği anlamına gelir.
İnfrared İletişim Nasıl Çalışır?
İnfrared iletişim, bir infrared vericiden bir infrared alıcıya infrared ışık deseninin iletilmesiyle sağlanır.

İnfrared sinyalleri, “YÜKSEK” ve “DÜŞÜK” durumlarıyla modüle edilmiş ışık dalgalarının bir dizi pulsundan oluşur. IR iletişiminde, göndermek istediğimiz ‘mesajı’ oluşturmak için YÜKSEK ve DÜŞÜKlerin belirli bir deseni kullanılır, bu da morse koduna benzer. IR sinyalleri genellikle sinyalin başlangıcını işaret eden bir başlık içerir, örneğin uzun bir işaretin ardından bir boşluk gelir.
IR ışığı, ısı üreten her şey tarafından yayılır; güneş, ampullerimiz ve biz! IR sinyal gürültüsü sorununu çözmek için, bu ışık pulsları yalnızca belirli bir frekansta iletilir. Çoğu verici için bu frekans 38 kHz olarak tanımlanmıştır, çünkü bu frekansta IR ışığı doğada nadiren bulunur ve bu nedenle gürültüden ayırt edilebilir. IR alıcıları genellikle yalnızca 38kHz sinyalleri almak için bir filtre ile donatılmıştır.
IR İletişim: İletim Protokolleri
Tüm sinyalin tam zamanlamasını 16 bit tamsayılar olarak depolamak çok fazla bellek kapladığından, IR sinyalleri genellikle 32 bite kadar ikili sayılar olarak depolanır. İletim sırasında, bir IR verici bu ikili sayıyı gerçek IR sinyaline dönüştürürken, diğer tarafta bir IR alıcı alınan IR sinyalini karşılık gelen ikili sayıya çözer.
IR sinyalinin ikiliye dönüştürüldüğü ve ikili olarak geri döndüğü desen, iletim protokolleri olarak bilinir. Daha yaygın protokollerden bazıları Sony, NEC, Matsushita ve RC5’tir.
Örneğin, NEC protokolünde, mantıksal ‘1’, 38 kHz’lik 562.5 µs uzunluğunda bir YÜKSEK puls ile başlar ve ardından 1687.5 µs uzunluğunda bir DÜŞÜK puls gelir. Bu arada, mantıksal ‘0’, 562.5 µs uzunluğunda bir YÜKSEK puls ve ardından 562.5 µs uzunluğunda bir DÜŞÜK puls ile iletilir:
IR İletişim: Onaltılık Kodlar
Baskı yaptığımız her düğme, benzersiz bir onaltılık koda karşılık gelir. Bu, IR sinyaline dönüştürülüp uzaktan kumandamızdan hedef cihazın alıcısına iletilen şeydir.
Bugün kendi IR uzaktan kumandamızı inşa ettiğimiz için, programımızda hedef cihazımızı kontrol etmek için kullanılan belirli IR kodlarını elde edip depolamamız gerekiyor. Bu bilgi, kontrol etmek istediğiniz cihazla birlikte gelen veri sayfasında bulunabilir.
Ancak, eğer yoksa, Seeeduino XIAO’muzla bir IR Alıcı kullanarak uzaktan kumandalarımızın IR kodlarını doğrudan okuyabiliriz.
Evrensel Arduino IR Uzaktan Kumanda: Donanım Kurulumu
Öncelikle, Seeeduino XIAO’nuzu, genişletme kartınızı ve Grove modüllerinizi aşağıdaki şemaya göre kurun. Eğer Seeeduino XIAO ile çalışıyorsanız, öncelikle Seeed Wiki’deki başlangıç kılavuzunu hızlıca gözden geçirmenizi öneririm.
Sonra, Seeeduino XIAO’nuzu USB Type-C kablosu ile PC’nize bağlayın ve donanım için yapmamız gereken tek şey bu! Grove Ekosistemi sayesinde, projelerimiz için donanım kablolamasıyla uğraşmamıza gerçekten gerek kalmadı. Sadece takın, programlayın ve oynayın!
Gerekli Kütüphanelerin Kurulumu
Bugünün eğitimi, aşağıdaki kütüphaneleri kullanacak, bunları ilgili depolardan indirebilirsiniz:
Eğer Arduino kütüphanelerini kurma konusunda yenilseniz, lütfen Seeed Wiki’deki detaylı görsel kılavuzu takip edin.
Hedef Cihazımız için IR Kodlarını Bulma
Projemiz için ilk resmi adım, hedef cihazımıza göndermemiz gereken kodları belirlemektir. Neyse ki, yeni kurduğumuz Seeed Arduino IR kütüphanesi, bunu yapmamıza yardımcı olacak kodlarla birlikte geliyor!
“`html
Seeeduino XIAO’muzu IR Sinyal Çözücü Olarak Ayarlama
Arduino IDE’nizde, Dosya > Örnekler > Seeed Arduino IR yolunu izleyin ve comboDump örneğini açın. Arduino kodu yeni bir pencerede açılmalıdır. Önünüzde, Seeeduino XIAO’nuzun ilettiğiniz IR sinyallerini almasına, çözmesine ve seri monitörünüzde görüntülemesine olanak tanıyan kısa bir program var.
Kodu kullanmadan önce, IR alıcımızın pinini düzenlememiz gerekiyor. IRrecv bildirim satırını, IR alıcınızın bağlı olduğu pin numarasına göre düzenleyin. Biz D5 kullanıyoruz, bu yüzden 5 kullanacağız.
#include <IRLibRecv.h>
IRrecv myReceiver(5); //alıcı için pin numarası <- Bunu pin numaramıza değiştirin
Ardından, myDecoder.dumpResults() fonksiyonundaki parametreyi false olarak değiştirin. Bu, IR sinyal çözümlemesi tarafından bize gösterilen detay miktarını azaltacaktır, çünkü buna bugün ihtiyacımız yok.
myDecoder.dumpResults(false);
Son olarak, kodu aşağıda gösterilen butonla Seeeduino XIAO’nuzda yükleyin.
Ardından, sağdaki büyüteç butonuyla Arduino Seri Monitörünü açın. Her şey yolunda giderse, “IR sinyallerini almaya hazır” yazısını görmelisiniz. Bu, Seeeduino XIAO ile bilgisayar arasındaki seri bağlantının kurulduğunu gösterir.
Temel Uzaktan Kumandamızdan IR Kodlarını Alma
Bu noktada, evrensel Arduino IR uzaktan kumandanızın kontrol etmesini istediğiniz bir cihaz seçtiğinizi umuyorum. Ne olursa olsun, orijinal uzaktan kumandasını alın – Örneğin, müzik çalarınızı kontrol etmek istiyorsanız, IR kodlarını almak için müzik çalarınızın uzaktan kumandasını kullanmanız gerekecek.
Seeeduino XIAO’nuzda program çalışırken ve Seri Monitör açıkken, uzaktan kumandada IR kodunu almak istediğiniz butona basın. En iyi sonuçlar için doğrudan IR alıcınıza yönlendirdiğinizden emin olun!
Seri Monitörünüzde aşağıdakiler yazdırılabilir:
Decoded NEC(1): Value:FD807F (32 bits)
“Decoded” kelimesinden hemen sonra gelen harfler, kullanılan protokolü belirtir. Yukarıdaki örnekte, protokol NEC’dir. “Value” ise alıcımız tarafından alınan IR sinyalinin hex kodudur, bu durumda “FD807F”dir.
Özünde, bu müzik çalarımızın uzaktan kumandasındaki güç butonuna basmamızdan kaynaklanıyorsa, o zaman bu, müzik çalarımızı açmak için Seeeduino XIAO IR uzaktan kumandamızda iletmemiz gereken aynı hex kodudur. Oldukça basit, değil mi?
Şimdi, Seeeduino uzaktan kumandanızda sahip olmak istediğiniz tüm kontroller için hex kodlarını alana kadar adımları tekrarlamanız yeterli.
Bu, ulaşmanız gereken bir örnektir. Kendi kodlarınızın neredeyse kesinlikle farklı olacağını unutmayın!
| Güç | 40BF12ED |
| Oynat / Duraklat | 40BFF20D |
| Ses Artır | 40BFA05F |
| Ses Azalt | 40BFF00F |
Not: En iyi sonuçlar için, odanızda aktif olarak gönderilen başka IR sinyalleri olmadığından emin olun. Aksi takdirde, elde edilen hex kodları doğru olmayabilir.
Uzaktan Kumanda Programını Yazma
Artık her buton için iletmek istediğimiz hex kodlarını topladığımıza göre, Seeeduino XIAO’muz için Arduino kodumuzu yazmamız gerekecek. Temel fikir, her buton basımında Seeeduino XIAO’nun önceden tanımlanmış bir hex koduna dayalı olarak belirli bir IR sinyali iletmesidir.
Öncelikle, aşağıdaki tüm kodu yeni bir Arduino skeçine kopyalayın.
// Ekran Kütüphanelerini Ayarlayın
#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
// Yazdırma geri çağırmaları için fonksiyon
void displayScreen(String message) {
u8x8.clearDisplay();
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(0, 0);
u8x8.print(message);
}
// Tuş Kontrol Kütüphanelerini Ayarlayın
#include "SoftwareSerial.h"
#if defined(ARDUINO_ARCH_AVR)
#define SERIAL Serial
SoftwareSerial mySerial(2,3);
#define TRANS_SERIAL mySerial
#elif defined(ARDUINO_ARCH_SAMD)
#define SERIAL SerialUSB
#define TRANS_SERIAL Serial
#else
#endif
// IR Kütüphanelerini Ayarlayın
#include <IRLibSendBase.h> // Önce gönderim tabanını dahil edin
// Şimdi yalnızca gerçekten kullanmak istediğiniz protokolleri dahil edin.
// En düşük numaralı protokol ilk olmalıdır ama geri kalan
// herhangi bir sırada olabilir.
#include <IRLib_P01_NEC.h>
#include <IRLib_P02_Sony.h>
#include <IRLibCombo.h> // Tüm protokollerden sonra bunu dahil edin
// Yukarıdakilerin tümü, yalnızca istediğiniz protokolleri içeren
// "IRsend" adlı evrensel bir gönderim sınıfı oluşturur.
// Şimdi o göndericinin bir örneğini tanımlayın.
IRsend mySender;
#define IR_SEND_PWM_PIN D0
void setup() {
// Ekranı Ayarlayın
u8x8.begin();
u8x8.setFlipMode(1);
// Butonlar için UART Seri Ayarlayın
TRANS_SERIAL.begin(9600);
}
void loop() {
sendControls();
}
void sendControls() {
while(TRANS_SERIAL.available()) {
uint8_t data = TRANS_SERIAL.read();
switch(data) {
case 0xE1 :
mySender.send(NEC, 0x40bf12ed, 20);
displayScreen("Güç");
break;
case 0xE2 :
mySender.send(NEC, 0x40bff20d, 20);
displayScreen("Oynat/Duraklat");
break;
case 0xE3 :
mySender.send(NEC, 0x40bfa05f, 20);
displayScreen("Ses Artır");
break;
case 0xE4 :
mySender.send(NEC, 0x40bff00f, 20);
displayScreen("Ses Azalt");
break;
default:
break;
}
}
}
IR vericinizin bağlantısını daha önce gösterilen şemadan farklı yaptıysanız, IR vericinizin pin bildirimini düzenlemeniz gerekecek.
#define IR_SEND_PWM_PIN D0
Daha sonra, bu kodu hedef cihazınız için Seeeduino XIAO’nuzda çalışacak şekilde düzenlemek için sendControls() fonksiyonunu düzenlemeniz gerekecek.
void sendControls() {
while(TRANS_SERIAL.available()) {
uint8_t data = TRANS_SERIAL.read();
switch(data) {
case 0xE1 :
My_Sender.send(NEC, 0x40bf12ed, 20);
displayScreen("Güç");
break;
case 0xE2 :
My_Sender.send(NEC, 0x40bff20d, 20);
displayScreen("Oynat/Duraklat");
break;
case 0xE3 :
My_Sender.send(NEC, 0x40bfa05f, 20);
displayScreen("Ses Artır");
break;
case 0xE4 :
My_Sender.send(NEC, 0x40bff00f, 20);
displayScreen("Ses Azalt");
break;
default:
break;
}
}
}
Her durum, uzaktan kumandamızın her buton basımında sahip olmasını istediğimiz davranışı temsil eder. 0xE1, Grove 12-Kanal Kapasitif Dokunmatik Tuş Takımımızdaki 1 numaralı butonu, 0xE2 2’yi, 0xE3 3’ü ve devam eder.
İlk durumu bir örnek olarak alalım:
Tuvaletimizdeki “1” butonuna basıldığında, durum 0xE1’i tetikleyeceğiz. İlk olarak, ilgili IR sinyali gönderilir!
mySender.send(NEC, 0x40bf12ed, 20);
mySender.send() fonksiyonu 3 parametre alır: Protokol, Komut, Bit Sayısı. Bu protokol, daha önce orijinal uzaktan kumandanızın IR kodlarını çözerken bulduğunuz protokole karşılık gelmelidir.
Ayrıca, hex kodlarımızın başında ek bir “0x” olduğunu da fark edeceksiniz. Bu, Arduino’nun kodun onaltılık formatta olduğunu tanıması içindir. Son olarak, son giriş, bir protokolün kullandığı bit sayısını ifade eder. Genel olarak, 20 yeterlidir ve olduğu gibi bırakabilirsiniz.
Son Programı Yükleyin!
Kodu düzenlemeyi tamamladıktan sonra, son ürünü Seeeduino XIAO’nuzda yüklemeyi unutmayın! Artık elinizde çalışan bir evrensel Arduino IR uzaktan kumanda olacak. Eğer uzaktan kumandanızın hedef cihazlarınızı beklenildiği gibi kontrol etmediğini bulursanız, bu sefer dış IR gürültüsünden kaçınarak hex kodlarını elde etmek için çözümleme sürecini tekrarlamanız gerekebilir.
Bu örnekte, dokunmatik paneldeki 12 tuştan yalnızca 4’ünü kullandım, bu yüzden uzaktan kumandanıza kesinlikle daha fazla komut ekleyebilirsiniz! İlginç olan, programınıza farklı cihazları kontrol etmek için farklı hex kodları ekleyebilmenizdir. Böylece, Seeeduino XIAO IR uzaktan kumandanız birden fazla cihazı kontrol etmek için kullanılabilir!
“`
Özet
Ve bu, Seeeduino XIAO ile evrensel bir Arduino IR uzaktan kumanda nasıl oluşturulur konusundaki eğitimimizi tamamlıyor! Seeeduino XIAO’nun, genişletme kartıyla birlikte bile, bu IR uzaktan kumanda projesi gibi küçük elektronikler için harika bir form faktörü sunduğunu göreceksiniz. Ayrıca, genişletme kartı bir JST 2.0 konektörü sunuyor, böylece bu projeyi taşınabilir hale getirmek için bir 3.7V LiPo batarya ekleyebilirsiniz!
Yeni uzaktan kumandanızla neyi kontrol edeceksiniz? Yorumlarda bize bildirin!
Daha fazla Seeeduino XIAO proje fikri için aşağıdaki bağlantılara göz atın:
- Seeeduino XIAO Kaynakları Derlemesi
- Seeeduino XIAO’nun Q-Touch Fonksiyonu ile Bir Meyve Piyanosu Nasıl Yapılır
Ayrıca Seeeduino XIAO 2021 Özeti ve Güncellemesi‘ne de göz atmayı unutmayın!
