4 Nisan 2014 Cuma

Arduino - Kızılötesi Kullanarak (Infared Receiver) TV Kumandası ile Led Yakma

Yavaş yavaş kablosuz düzeneklere geçmenin fayda sağlayacağını düşündüm. Bunun için de aralarından en basiti olan kızılötesi haberleşmeyi seçtim. Kısaca bahsetmek gerekirse kızılötesi bizim gözümüzle göremediğimiz ışınlar ve bu ışınları görebilen alıcı ve vericiler sayesinde 2 ayrı bağımsız devre belirli kodlamalar sayesinde haberleşebiliyor.En basitinden telefonunuzun kamerası ile televizyon kumandasının önündeki lede bakarken herhangi bir tuşa bastığınızda led'in yandığını görebilirsiniz. Fakat çıplak gözle kendimiz bu ışınları göremiyoruz.

TV kumandası seçtim çünkü hem bu kumandalardaki kodları çözümlemeyi öğrenmek hem de hazır bir verici olduğu için bizi fazla uğraştan kurtarır diye düşündüm :). 

Kısaca yapacağımız projeyi anlatmam gerekirse önce TV kumandamızdaki tuşların kodlarını arduinomuz sayesinde öğreneceğiz ve bu kodları kullanarak sayısal çıkışlara hükmedeceğiz.


Ama önce aşağıdaki linkten arduino sketch kızılötesi kütüphanesini indirmemiz gerekiyor.

http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip


Bunu arduino'nun kurulu olduğu klasördeki libraries içine atıyoruz. Adını sadece IR yaparsanız iyi olur. Bu kütüphane ile kullanacağımız kodları incelememiz gerekirse;

IRrecv irrecv(receivePin) ; // Adını koyabileceğimiz bir IR alıcı oluşturuyoruz.

irrecv.enableIRIn() ;  // IR ile veri alma işlemini başlatıyoruz.

irrecv.decode(&results); // Alınan kodu çözme teşebbüsüne girer.

results.value ; // Verinin kodudur. (bu değeri kullanacağız)

irrecv.resume(); // Veri alımından sonra diğer kodu almak için başa döner.

Önce aşağıdaki kodları yazıyoruz ve kullandığımız kumandanın kullanmak istediğimiz herhangi 4 tuşunun kodlarını yazıyoruz..Tabi önce Sketch>Import Library > IR'yi tıklıyoruz ki kütüphanemiz eklensin.


#include <IRremote.h>

int RECV_PIN = 11;  //IR'nin 3.bacağını taktığımız pin
IRrecv irrecv(RECV_PIN); 
decode_results kod; // dekode sonucu

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Alma başlıyor
  
}

void loop()
{
  if (irrecv.decode(&kod))
    {
     Serial.println(kod.value, DEC); // Kodun Decimal Değeri
     irrecv.resume();} // Yeni kod alımı

}
  


Benim kumandamda bu değerler çıktı. 1 tuştan 2 farklı değer çıkabilir. Mühim değil, 2 değeri de tek bir değere indirgeyeceğiz bu sorun da ortadan kalkmış olacak. Bunu da aşağıdaki örnekteki gibi yapacağım.

if(k==1874)
return 1;  // 1874 değerim 1 oldu

3 Led kullandım, 3 tuş açmak için kullanacağım , 1 tuşu da kapatmak için kullanacağım. 



#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results kod;

int kumanda(int k)
{

  if(k==3922)
    return 1;
  if(k==3907)
    return 2;  
  if(k==3906)
    return 3;
  if(k==3911)
    return 4;
  if(k==1874)
    return 1;
  if(k==1859)
    return 2;
  if(k==1858)
    return 3;
  if(k==1863)
    return 4;


return -1;    

}

void setup()

  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Serial.begin(9600);
  irrecv.enableIRIn(); 
}

void loop() {
  if (irrecv.decode(&kod)) {

    Serial.println(kumanda(kod.value));

    if(kumanda(kod.value) == 1)
      digitalWrite(9,HIGH);

    if(kumanda(kod.value) == 2)
      digitalWrite(8,HIGH);

    if(kumanda(kod.value) == 3)
      digitalWrite(7,HIGH);

    if(kumanda(kod.value) == 4){

      digitalWrite(7,LOW);    
      digitalWrite(8,LOW);  
      digitalWrite(9,LOW);  
 }
 irrecv.resume(); 
  }
}


Videomuz ;



12 yorum:

  1. çok güzel bi anlatım olmuş

    YanıtlaSil
  2. Kütüphaneyi eklediğim halde Not used: C:\Program Files\Arduino\libraries\RobotIRremote şeklinde bir hata alıyorum?

    YanıtlaSil
    Yanıtlar
    1. Sketch>Import Library > IR yolundan kütüphaneyi programa import ettiniz mi ?

      Sil
    2. baştan 4. kod "decode_results kod; dekode sonucu" eksik var yorum satırı haline getirmeyi unutmuşsunuz.

      Sil
    3. Teşekkürler düzelttim şimdi :).

      Sil
  3. başarılı bir çalışma olmuş. Benim sormak istediğim bu oyuncak helikopterlerin falan ır kumandası oluyor bilirsiniz, onlardaki kodları okumamız mümkünmü?

    YanıtlaSil
  4. her şey güzelde ben yükledim arduinoya ama kumandadan gelen sinyalleri giç göztermiyo nede sıkıntı olabilir acil yardım istiyorum:(

    YanıtlaSil
  5. arduino mega 2560 ile bu sistem kurulurmu aynı şekilde

    YanıtlaSil
  6. devreye gndyi bağlıyınca kısa devre yapıyo lütfen bi cevaplayın

    YanıtlaSil
    Yanıtlar
    1. Öncelikle Arduinonuz ile basit bir uygulama yapın, sıkıntı var mı yok mu kontrol edin.
      Daha sonra gözü ( alıcı ) şemadaki gibi taktığınızdan emin olun çünkü devrede başka bir şey yok, en garantisi de 2.bir sensör ile tekrar deneyin.

      Sil
  7. (10-15cm den çalışıyor) Alıcı verici arasındaki mesafeyi nasıl artırabiliriz Stabil şekilde HEX leri alabilmek kaydıyla ?

    YanıtlaSil