Arduino-IRremote Library Kurulumu ve Kullanımı - Turkish Tutorial

in #utopian-io8 years ago (edited)

This is a Turkish tutorial of an open source Arduino library, which is meant for using your Arduino as a “Infrared Remote” like the ones we use for controlling our TV’s. I will show you how to install the library to Arduino Ide and make an example project with the library, throughout this tutorial while giving information about infrared technology and infrared remotes.

Merhaba, bu yazıda Arduino mikrokontrolörünüze “Infrared Remote” yani kızılötesi kumanda olma özelliği ekleyen, açık kaynak bir IR kütüphanesinden bahsedeceğim. Yazı boyunca kızılötesi teknolojisi ve kızılötesi kumandalar hakkında bilgi vererek , bu IR (Infrared Remote) kütüphanesinin kurulumunu ve kızılötesi LED modülü ile yapacağımız örnek bir proje kodlarını görebilirsiniz.

ornek.jpg
Arduino kullanılarak yapılmış bir kızılötesi kumanda projesi.


Infrared Remote (Kızılötesi Kumanda) Teknolojisi Nasıl Çalışır

Kızılötesi kumanda (Infrared remote) teknolojisini anlamak için once kızılötesi ışınlar hakkında bilgi sahibi olmak gerekir. Kızılötesi ışınlar, dalga boyu 750 nm – 1 mikrometre arası değişen, insane gözü tarafından görülemeyen elektromanyetik ışınımlardır. Güneş ışınlarının %47’sini oluşturan kızılötesi ışınlar “IR-A”, “IR-B” ve “IR-C” olarak üç farklı bantta sınıflandırılmıştır. IR-A bandındaki kızılötesi ışınlar 700-1400 nm uzunluğunda, IR-B bandındaki kızılötesi ışınlar 1400-3000 nm uzunluğunda, IR-C bandındaki kızılötesi ışınlar ise 3000 nm – 1 mikrometre uzunluğundadır.

spektrum.png
Işık spektrumu. Kızılötesi ışık görülür ışıktan daha düşük frekansa sahiptir.

Kızılötesi ışınlar astronomi, askeri, iletişim, meteoroloji, tıp, klimatoloji, spektroskopi gibi alanların yanında bir çok sivil alanda da kullanılır. Kızılötesi ışınların bir kullanım alanı da evlerimizde kullandığımız televizyonların kumandalarındadır.

kopek.jpg
Kızılötesi kamerasıyla görüntülenen bir köpek.

Kızılötesi kumandalar, 1970’li yılların sonları 1980’li yılların başlarında kullanılmaya başlanmıştır. Kızılötesi kumandaların çalışma mantığı kısaca şöyle özetlenebilir. Kumandanın kızılötesi ışın kaynağı (günümüzde bu iş için kızılötesi LED’ler kullanılmaktadır.) önceden belirlenmiş binary kodu verecek şekilde yanıp söner. Her fonksiyon için değişik bir binary kod vardır, örneğin cihazı kapamak veya açmak için bir kod, ses aç/kapa komutu için farklı bir kod vardır. Kumandadan çıkan kızılötesi ışınları almak için kızılötesi bir receiver gerekir. Receiver’a gelen ışınlar cihazın mikroişlemcisinin anlayabileceği şekilde kodu decode (çözer) eder ve mikroişlemciye kodu gönderir. Mikroişlemci ise istenen görevi yerine getirir.

mantık.png
Kızılötesi kumanda çalışma prensibini gösteren şema.


IR (Infrared Remote) Kütüphanesinin Arduino IDE’sine Kurulumu

Arduino-IRremote kütüphanesi tüm Arduino, Teensy ve çoğu ATmega mikroçiplerini içeren kartlarda çalışır. Bu kütüphanenin Arduino IDE’sine kurulumu aşağıda adım adım anlatılmıştır.

1. https://github.com/z3t0/Arduino-IRremote adresinden kütüphaneyi indirin.

indir.png

2. Arduino programını açıp sırasıyla Sketch->Include Library->Add .ZIP Library seçeneklerini seçin.

ekle.png

3. Arduino-IRremote-master.zip dosyasını seçin ve Open'a tıklayın.


IR (Infrared Remote) Kütüphanesinin Kullanımı

Arduino-IRremote kütüphanesinin kullanımını basit bir örnek ile adım adım göstereceğim. Kütüphanenin temellerini öğrendikten sonra başka projelerde kullanırsanız lütfen yorumlarda belirtin.

Bu örnek projemizde bir kızılötesi LED modül, bir kızılötesi alıcı (herhangi bir alıcı olabilir), 4 adet istediğiniz renkte LED ve 4 adet 220 Ohm (200-500 Ohm arası olabilir) kullanarak kızılötesi kumanda yapacağız. Bu işlem için Arduino mikrokontrolörümüzü kızılötesi kumanda şeklinde kullanıp 4 adet LED’i yakıp söndüreceğiz. Bu işlemi yapmadan önce sahip olduğumuz kızılötesi kumandanın tuşlarının döndürdüğü HEX kodunu belirlememiz gerekecek.

receiver.jpg
Örnek projemizde kullanacağımız kızılötesi alıcı.

kumanda.png
Örnek projemizde kullanacağımız kızılötesi kumanda.

arduino_baglanti.png
Örnek projemiz için Arduino bağlantı şeması.

Kızılötesi kumandamızın butonlarının HEX kodlarını belirleyen program

1. Yeni bir sketch açın ve "Kumanda_HEX" olarak kaydedin.

2. Öncelikle kütüphanemizi sketch’imize eklemek için, kodun en başına, #include <IRremote.h> yazın.

3. Kütüphaneyi ekledikten sonra kızılötesi alıcınızın pinini atayın. Ardından kızılötesi alıcısını belirlenen pine bağlayacak komutu yazın. Kızılötesi alıcıya gelecek kodu decode (çözme) işlemini sağlayan kütüphane fonksiyonunu ekleyin.

hex-1.PNG

4. void setup() fonksiyonunun içine, seri ve kızılötesi haberleşmeyi başlatacak, aşağıdaki kodları yazın.

hex-2.PNG

5. void loop() fonksiyonunun içine, decode edilen kodları HEX kod şeklinde çıktısını alacak kodları yazın. Kodun sonuna ekranda okuma adına karışıklık olmaması adına delay süresi ekleyin.

hex-3.PNG

6. Programı “Upload” butonuna basarak Arduino mikrokontrolörünüze yükleyin. Kızılötesi kumandanızda istediğiniz 4 butona basın. Tuşlara bastıkça ekranda çeşitli HEX kodları görünmeye başlayacaktır. Bu HEX kodları bastığınız tuşlara aittir. Belirlediğiniz 4 butonun HEX kodlarını not alın.

IR_hex.png


Kızılötesi kumanda ile 4 adet LED’i kontrol eden program.

1. Yeni bir sketch açın ve "IR_Kumanda_Deneme" olarak kaydedin.

2. Öncelikle kütüphanemizi sketch’imize eklemek için, kodun en başına, #include <IRremote.h> yazın.

3. Kütüphaneyi ekledikten sonra kızılötesi alıcının ve LED’lerin pinlerini atayın.

kumanda-1.PNG

4. Kullanılan LED’lerin durumunu belirten bir tablo yaratın. LED’lerin ilk durumunu “0” yani kapalı olarak tanımlayın. Ardından önceki programda bulduğunuz 4 butona ait 4 HEX kodunu “kod1”, “kod2”, “kod3”, “kod4” şeklinde tanımlayın.

kumanda-2.PNG

5. Kızılötesi alıcısını belirlediğiniz pine atayan kütüphane fonksiyonunu yazın ve kızılötesi alıcıya gelen sinyali decode (çözme) etmeyi sağlayan aşağıdaki kodu ekleyin.

kumanda-3.PNG

6. void setup() fonksiyonunun içine, seri ve kızılötesi haberleşmeyi başlatacak, aşağıdaki kodları yazın. Ardından LED’leri output (çıkış) olarak atayın.

kumanda-4.PNG

7. void loop() fonksiyonunun içine, bir kızılötesi sinyal algılandığında çalışacak if koşulu ekleyin. If koşulunun içine case-switch komutu ekleyin. 4 buton ile 4 LED’i kontrol edeceğinizden, 4 adet case belirleyin. Her case için, kızılötesi kumandada ilgili butona basılması halinde LED’in önce açık, bir daha basılması halinde LED’in kapalı hale gelmesini sağlayacak if koşulunu yazın.

kumanda-5.PNG

kumanda-6.PNG

8. Bastığınız butonun HEX kodunu ekrana yansıtan ve sonraki değeri almaya yarayan kodu yazın.

kumanda-7.PNG

9. Programı “Upload” butonuna basarak Arduino mikrokontrolörünüze yükleyin.


Bu yazımda Arduino mikrokontrolörü için "z3t0" adlı GitHub kullanıcısı tarafından yazılmış " Arduino-IRremote -Library" kütüphanesinin kurulumu, kızılötesi teknolojisi ve kızılötesi kumandalar hakkında bilgi vererek, basit bir kızılötesi kumanda örneği yaparak kütüphanenin kullanımını gösterdim. Umuyorum ki vermiş olduğum bilgileri beğenirsiniz, okuduğunuz için teşekkürler. Başka yazılarda görüşmek dileğiyle.

Kütüphane hakkında daha fazla bilgi ve kaynak için aşağıdaki linki kullanabilirsiniz.

GitHub: https://github.com/z3t0/Arduino-IRremote

Örnek projenin kaynak kodu:

Kumanda_HEX


#include <IRremote.h>

int receiver_pin = 2;         // Alıcı cihazımızın pinini atıyoruz.

IRrecv irrecv(receiver_pin);  // Kızılötesi alıcısını belirlediğimiz pine tanımlıyoruz.

decode_results results;       // Alıcıya gelen sinyali decode (çözme) işlemini sağlayan kod.


void setup()
{
  Serial.begin(9600);         // 9600 baud rate'de seri haberleşmeyi başlatır.
  irrecv.enableIRIn();        // Kızılötesi haberleşmeyi başlatır.
}



void loop() {
  if (irrecv.decode(&results)) {
    
    Serial.println(value);    // Değeri ekrana print eder.
    irrecv.resume();          // Sonraki değeri alma komutu.
    delay(10);                 
  }
}

IR_Kumanda_Deneme

#include <IRremote.h>
 
int receiver_pin = 2;      // Alıcı cihazımızın pinini atıyoruz.
int LED1 = 4;              // LED çıkış pinlerini atıyoruz.
int LED2 = 5;
int LED3 = 6;
int LED4 = 7;


int durumLED[] = {0,0,0,0}; // Kullandığımız LED'lerin durumunu 
                            // belirten tablo (0- Kapalı, 1- Açık)

#define kod1  0xFF38C7     // Kullandığımız kızılötesi kumanda için 
#define kod2  0xFF10EF     // önceden bulduğumuz, herhangi 4 adet butonun 
#define kod3  0xFF30CF     // HEX kodlarını binary code olarak
#define kod4  0xFF9867     // tanımlıyoruz.
 
IRrecv irrecv(receiver_pin); // Kızılötesi alıcısını belirlediğimiz pine tanımlıyoruz.
 
decode_sonuc sonuc;      // Alıcıya gelen sinyali decode (çözme) işlemini sağlayan kod.
 
void setup()
{
  Serial.begin(9600);         // 9600 baud rate'de seri haberleşmeyi başlatır.
  irrecv.enableIRIn();        // Kızılötesi haberleşmeyi başlatır.
  
  pinMode(LED1, OUTPUT);      // LED'lerimizi çıkış (output) olarak atıyoruz.
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);

}
 
void loop() {
  if (irrecv.decode(&sonuc)) {           // Sinyal algılama koşulu.
       
    int deger = sonuc.deger;   
    switch(deger) {
      
       case kod1:                         // Birinci LED'imizin, kumanda üzerinde
         if(durumLED[1] == 1) {           // birinci butona basıldığında
            digitalWrite(LED1, LOW);      // yanmasını veya sönmesini sağlayan kod.
            durumLED[1] = 0;            
         } else {                      
             digitalWrite(LED1, HIGH); 
             durumLED[1] = 1;           
         }
          break; 
          
       case kod2:
         if(durumLED[2] == 1) {
            digitalWrite(LED2, LOW);
            durumLED[2] = 0;
         } else {
             digitalWrite(LED2, HIGH);
             durumLED[2] = 1;
         }
          break;
          
       case kod3:
         if(durumLED[3] == 1) {
            digitalWrite(LED3, LOW);
            durumLED[3] = 0;
         } else {
             digitalWrite(LED3, HIGH);
             durumLED[3] = 1;
         }
          break;      
          
                 case kod4:
         if(durumLED[4] == 1) {         
            digitalWrite(LED1, LOW);    
            durumLED[4] = 0;            
         } else {                      
             digitalWrite(LED1, HIGH); 
             durumLED[4] = 1;           
         }
          break;     
    }
    
    
    Serial.println(deger);    // Değeri ekrana print eder.
    irrecv.resume();          // Sonraki değeri alma komutu.
    delay(10);                 
  }
}



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @drencolha I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • This is your first accepted contribution here in Utopian. Welcome!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Coin Marketplace

STEEM 0.13
TRX 0.34
JST 0.034
BTC 111832.53
ETH 4314.30
SBD 0.85