Arduino ile kullanabileceğimiz kablosuz haberleşme araçlarından biri de Kızılötesi (IR:InfraRed) ışınlar. Bu ışınlar oldukça kullanışlı. Elektromanyetik spektrumda gözle görünen bölgenin daha düşük enerjili alanında yer alıyor. Evlerimizdeki uzaktan kumadaların çoğu bu sistemi kullanıyor. Robotik sistemde ise en çok çizgi izleyen robot projelerinde ve proximity sensör olarak kullanılıyor. Bu iki sistemde de alıcı ve verici LED’ler yan yana bağlanıyor. Alıcıdan çıkan ışınlar engele çarptığında yansıyor ve alıcı LED üzerinden bu veriyi kullanıyorsunuz. Çizgi izleyen robot’ta beyaz zemin ışığı yansıtıyor, siyah (koyu renk) yansıtmıyor. Kullanılan sistem bu kadar.

Bu projede kullanacağımız, evlerimizdeki TV, DVD oynatıcı, uydu alıcı gibi sistemlerde de kullanılan kodlanmış veri. Uzaktan kumanda verici cihazı yaklaşık 38 kHz üzerinden yolladığı sinyalleri belli kodlarla gönderiyor. 38 kHz taşıyıcı sinyal frekansı. Siz kumanda üzerinde bir tuşa bastığınızda sadece o tuşa ait kodu yolluyorsunuz. Alıcı kısımdaki mikrodenetleyici de bu kodu çözüp ona göre işlem yapıyor. Ki biz bunu burada Arduino’ya yaptıracağız. Kumanda olarak herhangi bir kumanda olabilir. Evinizde kullandığınız üzerinde kullanmadığınız tuşları olan da var, hazır bu iş için (biliyorsunuz burada da güzel paralar dönüyor).yapılmış hazır alıcı ve pili dahil satılanlar da. Yaklaşık 10 TL civarındalar. Ama sadece alıcı yarısı fiyatına bulunabiliyor. Ya da evde artık kullanılmayan bir cihazdan da sökebilirsiniz.

IMG_20200407_212546

 

Bacak bağlantılarına dikkat etmek gerekiyor ama; her modelinki aynı değil. Ama neticede hepsi de üç bacaklı: ‘Vcc’, ‘GND’ ve ‘Çıkış’ bacakları.

kum

Yani uygun moodelin bacak bağlantılarına bakıp veri bacağını bir dijital pine bağlıyoruz Vcc, +5 volt hattına bağlanabiliyor. Bu devrede farklı adresleri göstermek için ben evdeki kumandanın üzerindeki 4 rengi göstermek için 4 farklı LED’i 4 farklı çıkışa bağladım. Tabi bunlar kontrol edilebilecek 4 alıcıyı temsil ediyor. Devredeki dirençler 220Ω akım koruma dirençleri

IR__kumanda_sema

Bu alıcıyı kullanmak için kütüphane eklemek gerekiyor. Bir çok kütüphane var. Benim eklediğim kütüphanenin linki aşağıda verildi.  Zip dosyayı indirip Arduino IDE’ye ekledikten sonra :

Dosya > Örnekler > IRremute > IRrecDemo

adım

örneğini açıp Arduino’ya yüklemek gerekiyor. Yalnız ‘RECV_PIN’ alıcının hangi pine bağlı olduğunu gösteriyor. Ben onu 12 numaralı pine bağladığım için, 12 olarak değiştirip programı çalıştırdım. Seri ekranı açıp , kumandayı alıcıya tutup üzerindeki tuşlara basınca seri ekranda o tuşun adresi hex olarak ekranda göründü. Bu hex sayı her tuş için farklı. Burada kullanmak istediğimiz tuşun hex adresini, kendi programımızda kullanmak için kaydediyoruz. Ben de kullanmak istediğim, kumandanın üzerindeki dört renk tuşa ayrı ayrı basıp kodlarını öğrendim. Şimdi kendi kodumuza gelelim: Tavsiyem bu örnek kod üzerinde çalışıp farklı isimle kaydetmek.  Çünkü zaten kendisi kütüphaneyi çağırıp nesne oluşturuyor:

#include <IRremote.h>

IRrecv irrecv(RECV_PIN);

decode_results results;

Bunlar zaten hazır var. LED’lerimizin bağlı olduğu pinleri tanımlayıp, ‘Setup’ içinde bunları çıkış pini olarak ayarlıyoruz.

void loop() {
if (irrecv.decode(&results)) {                      //Eğer tuşa basıldığı algılandıysa
Serial.println(results.value, HEX);            // Seri ekranda hex formatta bu adresi yazdır.
irrecv.resume();                                            // Daha sonraki değer için bekle.
if (results.value == 0xD5257FDB ){           // Okunan; kırmızı tuşun kodu ise,
digitalWrite (red, HIGH);                            // kırmızı LED’i yak diğerlerini söndür.
digitalWrite (green, LOW);digitalWrite (yellow, LOW);digitalWrite (blue, LOW);}
else if (results.value == 0x80A24E43 ){    // Okunan; yeşil tuşun kodu ise,
digitalWrite (green, HIGH);                        //// yeşil LED’i yak diğerlerini söndür.
digitalWrite (red, LOW);digitalWrite (yellow, LOW);digitalWrite (blue, LOW);}
…….
}

‘loop’da değerleri okuyarak başladık. Basit bir ‘if – else if’ karşılaştırması ile okunan hex değerlerine göre ilgili LED yakılıp diğerleri söndürülüyor. Okunan değer hex formatında olduğu için ‘if’ in içindeki eşitlikte bu değerin önüne ‘0x’ eklemeyi unutmuyoruz (…== 0xD5257FDB ).

Bu devre tek alıcı ile birden çok çıkışı çalıştırmak için (Örneğin TV üzerinde; kanal değişimi, ses açma/kapama, parlaklık ayarı, vb.) ideal. Ancak bir proje olarak (odadaki lambayı yakma, vantilatörvçalıştırma gibi) kullanılacaksa her çıkış için bir alıcı devre kullanmak gerekli. Ama basit bir uygulama, herkes yapabilir.

Hoşça kalın…

 

 

 

 

Kütüphane :https://github.com/z3t0/Arduino-IRremote

Devrenin koduna buradan ulaşabilirsiniz.