Arduino-IRremote Library Kurulumu ve Kullanımı - Turkish Tutorial
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.
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.
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.
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.
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.
2. Arduino programını açıp sırasıyla Sketch->Include Library->Add .ZIP Library seçeneklerini seçin.
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.
Örnek projemizde kullanacağımız kızılötesi alıcı.
Örnek projemizde kullanacağımız kızılötesi kumanda.
Ö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.
4. void setup() fonksiyonunun içine, seri ve kızılötesi haberleşmeyi başlatacak, aşağıdaki kodları yazın.
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.
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.
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.
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.
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.
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.
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.
8. Bastığınız butonun HEX kodunu ekrana yansıtan ve sonraki değeri almaya yarayan kodu yazın.
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
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
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
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