Bu yazımızda birçok uygulamada karşımıza çıkan ve ucuzluğu sayesinde heryerde kullanılabilen ir yani kızılötesi sistemler incelenecektir.
Kızılötesi sistemler alıcı ve verici kısım olarak iki bölümden oluşur. Bizim inceleyeceğimiz sistemde verici yani ir sinyalin gönderildiği kısım 21 butonlu basit bir kumandadır. Tuşlara basıldığında 38Khz frekans değerinde sinyaller yollar. Aslında bu bir ışıktır. Gönderilen bu ışığı görecek şekilde yerleştirilen ir alıcımız 1838B dir. Alıcı gönderilen sinyali algılar ve sinyal bacağından dijital veri gönderir.
Basılan her butonun kodlandığı farklı bir dijital veri vardır. Bu gönderilen sinyalin sırasıyla lojik 1 yada 0 olması ile alakalıdır.Mesela örnek olarak ard arda 001100 sinyalleri gelmiş olsun bu kumandadaki 1 butonuna karşılık gelsin. Yani kodlamada böyle olduğunu varsayalım. Bu demek oluyor ki siz kumanda da 1 butonuna bastığınızda ışık söner-söner-yanar-yanar-söner-söner. Tabi burada verici ve alıcınızın kaç bitte çalıştığıda önemlidir. Çalışma mantığının anlaşılması için bu şekilde bir örnek vermeyi uygun buldum.
Örneğin bunu daha iyi anlamak için telefon kameranızı kumandanın ön kısmında bulunan ir lede tutun ve herhangi bir tuşa basın ışığın yanıp söndüğünü göreceksiniz.
Bu çalışmada kullanılan kumandanın üzerindeki tuşların hexa değerleri alttaki resimde mevcuttur. Bunların binary karşılığını görmeniz için kod içerisindeki
Serial.println(cikis.value,HEX); satırını şu şekilde değiştirmeniz yeterli olacaktır:
Serial.println(cikis.value,BIN);
Kızılötesi sistemler alıcı ve verici kısım olarak iki bölümden oluşur. Bizim inceleyeceğimiz sistemde verici yani ir sinyalin gönderildiği kısım 21 butonlu basit bir kumandadır. Tuşlara basıldığında 38Khz frekans değerinde sinyaller yollar. Aslında bu bir ışıktır. Gönderilen bu ışığı görecek şekilde yerleştirilen ir alıcımız 1838B dir. Alıcı gönderilen sinyali algılar ve sinyal bacağından dijital veri gönderir.
Basılan her butonun kodlandığı farklı bir dijital veri vardır. Bu gönderilen sinyalin sırasıyla lojik 1 yada 0 olması ile alakalıdır.Mesela örnek olarak ard arda 001100 sinyalleri gelmiş olsun bu kumandadaki 1 butonuna karşılık gelsin. Yani kodlamada böyle olduğunu varsayalım. Bu demek oluyor ki siz kumanda da 1 butonuna bastığınızda ışık söner-söner-yanar-yanar-söner-söner. Tabi burada verici ve alıcınızın kaç bitte çalıştığıda önemlidir. Çalışma mantığının anlaşılması için bu şekilde bir örnek vermeyi uygun buldum.
Örneğin bunu daha iyi anlamak için telefon kameranızı kumandanın ön kısmında bulunan ir lede tutun ve herhangi bir tuşa basın ışığın yanıp söndüğünü göreceksiniz.
Bu çalışmada kullanılan kumandanın üzerindeki tuşların hexa değerleri alttaki resimde mevcuttur. Bunların binary karşılığını görmeniz için kod içerisindeki
Serial.println(cikis.value,HEX); satırını şu şekilde değiştirmeniz yeterli olacaktır:
Serial.println(cikis.value,BIN);
Çalışma videosu : http://www.youtube.com/watch?v=LuFK1rI53yo&feature=youtu.be
Uygulama kodu:
#include <IRremote.h> // arduino ir kütüphanesi
#include <IRremoteInt.h>
#include <LiquidCrystal.h> //okunan mesafe değerinin 16*2 lcd ekrana basıması için
//lcd ekran ktürüphanesi çağrıldı
#define backlight A3 // LCD arka aydınlatmasını kontrol etmek için A3 pini tanımlanıyor
int ir_pin = 10; //ir alıcı pinin bağlanacağı pin numarası
IRrecv irrecv(ir_pin);
decode_results cikis;
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
void setup()
{
Serial.begin(9600);
pinMode (backlight, OUTPUT);
lcd.begin(16, 2); //lcd tipi
digitalWrite (backlight,HIGH);
lcd.print("golmuhendis.blog");
lcd.setCursor(0,1); //satır,sütün
lcd.print("spot.com.tr");
delay(3000);
lcd.clear();
irrecv.enableIRIn(); // ir alıcıyı aktif eder
}
void loop()
{
if (irrecv.decode(&cikis)) //cikis deiskenin olduğu edresi decode eder
{
Serial.println(cikis.value,HEX);
translateIR(); //gelen veriyi hexadecimal olarak ifade etmek için tanımlanan fonksiyon
irrecv.resume();
}
}
void translateIR() // gelen digital veriyi hex haline donusturur
{
switch(cikis.value)
{
case 0xFFA25D: // vericideki tuşların karşılık geldiği hexa değerleri
lcd.clear();
Serial.println(" CH- ");
lcd.print ("Basilan tus ");
lcd.print("CH-");
break;
case 0xFF629D:
lcd.clear();
Serial.println(" CH ");
lcd.print ("Basilan tus ");
lcd.print("CH");
break;
case 0xFFE21D:
lcd.clear();
Serial.println(" CH+ ");
lcd.print ("Basilan tus ");
lcd.print("CH+");
break;
case 0xFF22DD:
lcd.clear();
Serial.println(" PREV ");
lcd.print ("Basilan tus ");
lcd.print("PREV");
break;
case 0xFF02FD:
lcd.clear();
Serial.println(" NEXT ");
lcd.print ("Basilan tus ");
lcd.print("NEXT");
break;
case 0xFFC23D:
lcd.clear();
Serial.println(" PLAY/PAUSE ");
lcd.print ("Basilan tus ");
lcd.print("PLAY/PAUSE");
break;
case 0xFFE01F:
lcd.clear();
Serial.println(" VOL- ");
lcd.print ("Basilan tus ");
lcd.print("VOL-");
break;
case 0xFFA857:
lcd.clear();
Serial.println(" VOL+ ");
lcd.print ("Basilan tus ");
lcd.print("VOL+");
break;
case 0xFF906F:
lcd.clear();
Serial.println(" EQ ");
lcd.print ("Basilan tus ");
lcd.print("EQ");
break;
case 0xFF6897:
lcd.clear();
Serial.println(" 0 ");
lcd.print ("Basilan tus ");
lcd.print("0");
break;
case 0xFF9867:
lcd.clear();
Serial.println(" 100+ ");
lcd.print ("Basilan tus ");
lcd.print("100+");
break;
case 0xFFB04F:
lcd.clear();
Serial.println(" 200+ ");
lcd.print ("Basilan tus ");
lcd.print("200+");
break;
case 0xFF30CF:
lcd.clear();
Serial.println(" 1 ");
lcd.print ("Basilan tus: ");
lcd.print("1");
break;
case 0xFF18E7:
lcd.clear();
Serial.println(" 2 ");
lcd.print ("Basilan tus: ");
lcd.print("2");
break;
case 0xFF7A85:
lcd.clear();
Serial.println(" 3 ");
lcd.print ("Basilan tus: ");
lcd.print("3");
break;
case 0xFF10EF:
lcd.clear();
Serial.println(" 4 ");
lcd.print ("Basilan tus: ");
lcd.print("4");
break;
case 0xFF38C7:
lcd.clear();
Serial.println(" 5 ");
lcd.print ("Basilan tus: ");
lcd.print("5");
break;
case 0xFF5AA5:
lcd.clear();
Serial.println(" 6 ");
lcd.print ("Basilan tus: ");
lcd.print("6");
break;
case 0xFF42BD:
lcd.clear();
Serial.println(" 7 ");
lcd.print ("Basilan tus: ");
lcd.print("7");
break;
case 0xFF4AB5:
lcd.clear();
Serial.println(" 8 ");
lcd.print ("Basilan tus: ");
lcd.print("8");
break;
case 0xFF52AD:
lcd.clear();
Serial.println(" 9 ");
lcd.print ("Basilan tus: ");
lcd.print("9");
break;
default:
Serial.println(" Yanlis sinyal, isik etkisi olabilir ");
}
}