Merhaba arkadaşlar. Bu dersimizde Arduino UNO kullanarak kızılötesi uzaktan kumanda uygulaması yapacağız.

Gerekli malzemeler:

BU DERSTEKİ TÜM ÜRÜNLERİ TEK SEPETE TOPLADIK!

Sepetten ihtiyacınız olmayanları çıkarabilirsiniz. Ya da ürün ekleyebilirsiniz. Stokta olmayan ürünler, sepette yer almaz. Bu yüzden lütfen sipariş vermeden kontrol ediniz.

Kızılötesi kumandalar, günlük kullandığımız çoğu elektronik alette sık sık kullandığımız cihazlardır. Neden Arduino’da da kullanmayalım? 🙂 Çalışma prensibi şu şekildedir: kumanda üzerinde bir kızılötesi (infrared, ir) LED bulunur. Bu LED, kumanda üzerindeki herhangi bir tuşa bastığımızda önceden belirlenmiş bir kod verecek şekilde belirli bir frekansta yanıp söner. Çoğu kumanda için bu frekans 38 kHz’tir. 38 kHz’lik taşıyıcı sinyale her bir tuş için farklı bir kod oluşturacak şekilde modülasyon uygulanır. Her marka için farklı modülasyon ve kodlama teknikleri mevcuttur. Projede kullandığımız 38 kHz kızılötesi alıcı, aldığı sinyali demodüle ederek Arduino’ya doğrudan basılan buton ile ilgili kodu göndermektedir. Bu sayede farklı marka ve model kumandaları 38 kHz taşıyıcı sinyale sahip olduğu sürece bu alıcı ile kullanabilmekteyiz.

The_Phillips_RC5_Protocol_11

Bizim kullanacağımız setteki kumandanın tüm butonlarına ait kodlar Arduino’ya yükleyeceğimiz program kodunda tanımlanmıştır. Bu sayede kit ile beraber gelen kumandadaki tüm butonlara birer işlev atamamız mümkün olur. Devremizin bağlantı şeması şu şekildedir:

Devre şeması 17/01/2017 tarihinde güncellenmiştir.

Kızılötesi alıcıyı kullanabilmemiz için, Arduino yazılımına Arduino-IRremote kütüphanesini yüklememiz gereklidir. Bu kütüphaneyi indirdikten sonra C:\Program Files (x86)\Arduino\libraries veya C:\Program Files\Arduino\libraries klasörünün altına “IRremote” ismiyle kaydetmemiz gereklidir. Kütüphaneyi yükledikten sonra aşağıdaki kodu Arduino’muza yüklüyoruz:

#include <IRremote.h>

int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;

#define CH1 0xFFA25D
#define CH 0xFF629D
#define CH2 0xFFE21D
#define PREV 0xFF22DD
#define NEXT 0xFF02FD
#define PLAYPAUSE 0xFFC23D
#define VOL1 0xFFE01F
#define VOL2 0xFFA857
#define EQ 0xFF906F
#define BUTON0 0xFF6897
#define BUTON100 0xFF9867
#define BUTON200 0xFFB04F
#define BUTON1 0xFF30CF
#define BUTON2 0xFF18E7
#define BUTON3 0xFF7A85
#define BUTON4 0xFF10EF
#define BUTON5 0xFF38C7
#define BUTON6 0xFF5AA5
#define BUTON7 0xFF42BD
#define BUTON8 0xFF4AB5
#define BUTON9 0xFF52AD

int led1 = 7;
int led2 = 6;
int led3 = 5;
int led4 = 4;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
}
void loop() {

  if (irrecv.decode(&results))
  {
    if (results.value == BUTON1)
    {
      digitalWrite(led1, !digitalRead(led1));
      if (digitalRead(led1) == HIGH)
      {
        Serial.println("LED 1 yandi");
      }
      else
      {
        Serial.println("LED 1 sondu");
      }
    }
    if (results.value == BUTON2)
    {
      digitalWrite(led2, !digitalRead(led2));
      if (digitalRead(led2) == HIGH)
      {
        Serial.println("LED 2 yandi");
      }
      else
      {
        Serial.println("LED 2 sondu");
      }
    }
    if (results.value == BUTON3)
    {
      digitalWrite(led3, !digitalRead(led3));
      if (digitalRead(led3) == HIGH)
      {
        Serial.println("LED 3 yandi");
      }
      else
      {
        Serial.println("LED 3 sondu");
      }
    }
    if (results.value == BUTON4)
    {
      digitalWrite(led4, !digitalRead(led4));
      if (digitalRead(led4) == HIGH)
      {
        Serial.println("LED 4 yandi");
      }
      else
      {
        Serial.println("LED 4 sondu");
      }
    }
    if (results.value == BUTON0)
    {
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      Serial.println("Tum LED'ler sondu");
    }
    if (results.value == BUTON5)
    {
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, HIGH);
      digitalWrite(led4, HIGH);
      Serial.println("Tum LED'ler yandi");
    }
    irrecv.resume();
  }
}

Bu koda göre, kumandamız üzerindeki 1, 2, 3 ve 4 numaralı butonlar sırasıyla 7, 6, 5 ve 4 numaralı dijital pinlere bağlı olan LED’leri yakıp söndürecektir. 0 tümünü söndürür ve 5 tümünü yakar. Ayrıca seri port ekranını açarsak, butona bastığımızda LED’in değişimini bu ekrandaki ifadelerden de görebiliriz. Sizler de kodun baş kısmındaki #define ile tanımlanan diğer buton kodlarını kullanarak farklı işlevler gerçekleştirecek şekilde programlama yapabilirsiniz.

Eğer kit dahilinde gelen kumanda yerine başka bir kumanda kullanmak istiyorsanız (veya sadece alıcıdan temin ettiyseniz), Arduino programından Dosya>Örnekler>IRremote>IRrecvDump örnek kodunu kullanarak mevcut kumandanızın tuşlarına ait hex kodları tespit edebilir ve bu kodları kullanabilirsiniz.

18 Yorumlar

  1. Mete ben calıstırdım . yazının icerisinde “Kızılötesi alıcıyı kullanabilmemiz için, Arduino yazılımına Arduino-IRremote kütüphanesini yüklememiz gereklidir.” bu kısmı okudun mu?

  2. Merhaba
    Ürünü aldım ancak arduino due ile çalıştıramadım. İlk başta kütüphane hata verdi ve due için kütüphane buldum ve derlemeyi başardım. Programı yüklüyorum ama hala çalışmıyor.

  3. hocam resimdeki gibi bağladığımda alıcı ısınmaya başladı bende ayrıca bacakların üstünde sol taraf d0 orta bacak GND sağ bacak VCC yazıyor bende buna göre bağladım şimdi d0 11 e gnd gnd ye vcc 5v a bağladım doğrumu bilgi verirseniz sevinirim

  4. AS timur kardes ındırdıgınız kutuphanenın zıpten cıkan “Arduino-IRremote-master” klasorunun adını sadece” IRremote ” olarak degıstırın ve o sekılde libraries e atın ben o sekılde calıstırdım programda yazılanla kutuphaneye atılan ısım aynı degıl o yuzden hata verıyor

  5. Simdi Hocam bu olayin en kolay yöntemini anlatmissiniz eyvallah yaratici bir program olmus ama diyelimki 1 numarali kumanda dügmesiyle bir ledi yakmak istiyoruz digitalwrite komutuyla yapiyo ama ayni butonla söndürmeye calissak kodumuzu nasil degistirebiliriz? Counter yöntemiyle denedim ama biyerde logik hatasi yapiyorum bana bu tek butondan acma kapama konusunu anlatabilirmisinz.

    • Öncelikle bool tipinde bir led_durum değişkeni tanımlayın. Varsayılan olarak LOW değerinde olsun. İstediğiniz butonun if’inde ise bu değişkenin değerini led_durum != led_durum; olarak tam tersine çevirin. Böylelikle tek buton ile aç-kapa işlemi yapabilirsiniz.

  6. Selamlar, evdeki televizyonun kumandasi mefta olunca bende aurdino ile kendi kumandami yapmaga karar verdim. Bizikisi eski bir LG televizyon, kumandasinin modülasyon ve kodlamasini bulma sansim var mi? bir suredir ariyorum ancak birsey bulamadim.

CEVAP VER