Arduino Uzaktan Kumanda ile LED kontrolü

Arduino üzerindeki LED'i TV uzaktan kumandası ile açıp kapayalım.


Bu işlem için öncelikle kullanacağımız kumandanın kodlarını öğrenmemiz lazım. 
Aşağıda verdiğim kodlar ile bunu kolayca öğrenebilirsiniz.
İhtiyacını olan bir tane Arduino modül, bir uzaktan kumanda ve bir de IR (kızılötesi) alıcı LED.
Ben Arduino UNO kullandım. IR alıcı olarak ex838 kullandım. Kullandığınız IR alıcı bacaklarına göre devreye bağlayın. Şase, +5 v ve out bacakları var.
  • Önce IRkod.ino dosyasını Arduino'ya yükleyin. Kütüphane (IRremote.h ) dosyası ekli dosyalar içinde var. 
  • IR LED'i de A0 pinine bağlayın. Başka bir pine bağlamak isterseniz, programın içinde gerekli değişikliği yapmayı unutmayın. 
  • Kumanda tuşlarına basarak Seri Port Ekranından kumandanızın istediğiniz tuş veya tuşlarının kodlarını bir kenara yazın. 
  • Ben Next UK-660 uydu alıcısı (Next Minix Punto Plus) kumandasını kullandım. uzaktan_kumanda_LED.ino dosyası içindeki kodlar bu kumandaya ait.
  • Sonra öğrendiğiniz kodları uzaktan_kumanda_LED.ino dosyası içindeki uygun yerlere yazın.
  • Kullanmaya başlayın. :)
Aynı mantıkla başka projeler de geliştirebilirsiniz.

IRkod.ino  dosyası kodları (kumanda kodlarını öğrenmek için):


/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */
// Seri Port Ekranında hemen her türlü uzaktan kumanda kodlarını öğrenebilirsiniz

#include <IRremote.h>   

int RECV_PIN = A0;   // başka bir pin de tanımlayabilirsiniz

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Alıcıyı başlat
}

void loop() {
  if (irrecv.decode(&results)) { 
           dump(&results);    
     }
   irrecv.resume(); // Bir sonraki değeri almak için devam et
     delay(1000);
}

void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Mesajın kodu çözülemedi");
  } 
  else {
    if (results->decode_type == NEC) {
      Serial.print("Decoded NEC: ");
    } 
    else if (results->decode_type == SONY) {
      Serial.print("Decoded SONY: ");
    } 
    else if (results->decode_type == RC5) {
      Serial.print("Decoded RC5: ");
    } 
    else if (results->decode_type == RC6) {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }  
  Serial.println("");
}



uzaktan_kumanda_LED.ino (LED'iyakıp söndürmek için)

/*

/* KODLA GİTSİN KODLA GİTSİN KODLA GİTSİN KODLA GİTSİN KODLA GİTSİN KODLA GİTSİN   
 *  
 *  IR UZAKTAN KUMANDA İLE LED KONTROL
 * 
 */
#include <IRremote.h>   // IR alıcılariçin kütüphane

// UZAKTAN KUMANDA KODLARIMIZ
// Next UK-660 uydu alıcısı (Next Minix Punto Plus) kumandası
// siz de kodlarınızı aşağıdaki gibi ekleyin
# define play_song 0x80BF1BE4       // play
# define pause_song 0x80BFE31C      // pause
# define next_song 0x80BFAB54       // next
# define next_ileri  0x80BF53AC     // p+   //next
# define prev_song 0x80BF639C       // prev
# define prev_geri 0x80BF4BB4       // p-   //prev
# define ses_kes 0x80BF39C6         // mute
# define vol_inc 0x80BF837C         // vol +
# define vol_dec 0x80BF9966         // vol -
# define sound_equalizer 0x80BF6B94 // epg
# define reset_dfp 0x80BF738C       // ok       // reset
#define info  0x80BF0BF4            // info     // örneğin: saat/player geçiş 
#define stop_dfp 0x80BF2BD4         // stop
#define usb_dfp 0x80BF4AB5          // USB      // USB GİRİŞ
#define sd_dfp 0x80BF8B74           // SHIFT    // SD KART
#define xx_dfp 0x80BF817E           // APPs     // kullanmadım
#define xxx_dfp 0x80BFC13E          // PICTURE  // kullanmadım
//aşağıdakiler de kullanmadığım tuşları kodları:
//0x80BFE11E // 0
//0x80BF49B6 // 1
//0x80BFC936 // 2
//0x80BF33CC // 3
//0x80BF718E // 4
//0x80BFF10E // 5
//0x80BF13EC // 6
//0x80BF51AE // 7
//0x80BFD12E // 8
//0x80BF23DC // 9
//---------------------------kumanda kodları bitti---------------------------------

const int receive = A0;         // IR pini tanımlıyoruz(IR output çıkışı ==> A0'a)[pin numarasını değiştirebilirsiniz]
IRrecv irrecv(receive);         
decode_results dec;
int led_zaman=0;
int bayrak=1;                  // LED durumunu takip için değişkenimiz

void setup() {
irrecv.enableIRIn();  // IR alıcı...
pinMode(LED_BUILTIN, OUTPUT);  // Arduino'nun üzerindeki yerleşik led'i tanımlama
}
void loop() {
   if(irrecv.decode(&dec))      // IR alıcıdan sinyal alırsa-----------------------------
        {
          if (dec.value==reset_dfp)
          {  ayar();  
          }       
   irrecv.resume();  // IR alıcıdan komut almaya devam et...:)
        }
}

void ayar()
 {
  switch(bayrak)
       {
         case 1 :
         digitalWrite(LED_BUILTIN, HIGH);
         bayrak=2;
         delay (500);
         break;
         case 2 :
         digitalWrite(LED_BUILTIN, LOW);
         bayrak=1;
         delay (500);
         break;
       }
  }


PROGRAM DOSYALARINI İNDİR

KULLANILAN PROGRAMLAYICI: Arduino 1.8.10

Yorumlar