Arduino
OKUDUĞUNUZ KONU
Arduino ile uzaktan kumanda kullanımı “TK19 modülü”
6

Arduino ile uzaktan kumanda kullanımı “TK19 modülü”

Yazar : Cem PEHLİVAN22 Aralık 2016

Evinizde veya çevrenizde illaki bir uzaktan kumanda vardır. Bu uzaktan kumanda ile arduinonuzu kontrol edebilseydiniz nasıl olurdu? Çok güzel olurdu 🙂 Düşünsenize bi TV kumandasında ortalama 30-40 buton var. Arduinomuza tek modül ile 30-40 buton bağlamış oluyoruz hemde uzaktan kontrollü. Evet bunu TK19 modülü ile yapabiliyoruz. TK19 dediğime bakmayın. Piyasada birçok farklı model mevcut. Genel adı IR receiver yani Kızılötesi Alıcı olarak geçiyor. Hani şu TV nin önünde olan ve kumandayı tuttuğumuz ufak siyah nokta olan kısım. Benim kullandığım modülün numarası TK19, bu modülü 2 liraya almıştım. Bu kadar ucuz olması ise ayrı bi güzel değil mi?

Bu projemizde 4 ledin kontrolünü uzaktan kumandamız ile yapacağız.

Gerekli malzemeler

  • Arduino prototipleme kartı
  • 4 adet led
  • 4 adet 220 ohm direnç
  • TK19 kızılötesi alıcı

3 bacaklı olan bu modül 5v ile besleniyor. Soldan sağa sırasıyla: GND, +5V, OUT. Bu sıralama ve besleme kullandığınız modüle, üreticisine göre değişebilir. Modülünüzün datasheet’ine bakmayı unutmayın.

Bağlantıyı aşağıdaki gibi yapıyoruz.

Kodumuzu yazmaya başlamadan önce uzaktan kumandanın çalışma mantığına biraz değinelim. Uzaktan kumandada herhangi bir butona bastığımızda o butona atanmış olan mesaj kızılötesi titreşimler ile dağıtılır. Alıcılar ise bu kızılötesi titreşimleri algılar ve yorumlar. Bu titreşimin frekansı 38 KHz olduğu için insanlar tarafından algılanmaz. Alınan bu mesaj ile mikroişlemcide basit if else kontrolü ile istenilen görevi yaptırır. Kanal değiştirir, ses açar vs.

Elimizdeki kumandanın tuşlarına bastığımızda hangi mesajları gönderdiğini bulmamız lazım ki görev atayabilelim. Öncelikle IR kütüphanesini Arduino programımıza yüklememiz gerekli. Buradaki 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 kaydediyoruz. Daha sonra aşağıdaki kodu arduinomuza yüklüyoruz ve seri port ekranını açıp kumandamızdan görev vermek istediğimiz tuşlara basıyoruz.


/*
Arduino ile uzaktan kumanda kullanımı "TK19 modülü"
www.projehocam.com
Yazar: Cem PEHLİVAN
*/

#include <IRremote.h>

#define TK19_PIN 2
IRrecv irrecv(TK19_PIN);
decode_results results;

void setup()
{
 Serial.begin(9600);
 irrecv.enableIRIn();
}

void loop() {
 if (irrecv.decode(&results))
 {
 Serial.println(results.value, HEX); // gelen mesajı daha kolay anlayabilmek için hexadecimal formatta ekrana yazdırıyoruz.
 irrecv.resume();
 }
 delay(100);
}

Seri port ekranımıza bakalım

 

Gördüğünüz gibi her tuşun ayrı bir kodu var. Ben kumandamdaki 1, 2, 3, ve 4 numaralı tuşlara atama yapacağım. Hadi kodumuzu düzenleyelim.


/*
Arduino ile uzaktan kumanda kullanımı "TK19 modülü"
 www.projehocam.com
 Yazar: Cem PEHLİVAN
*/

#include <IRremote.h>

#define TK19_PIN 2
IRrecv irrecv(TK19_PIN);
decode_results results;

#define BUTON1 0xFFA25D
#define BUTON2 0xFF629D
#define BUTON3 0xFFE21D
#define BUTON4 0xFF22DD

#define led1 7
#define led2 6
#define led3 5
#define 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");
 }
 }
 irrecv.resume();
 }
 delay(100);
}

1,2,3, veya 4 nolu tuşlara bastığımızda ledler yanacak, tekrar bastığımızda sönecek. Buton tanımlamalarında FFA25D gibi ifadenin başına 0x yazmamızın sebebi bu mesajın hexadecimal olduğunu belirtmek için.
İpucu : #define ile yapılan tanımlamalar arduino hafızasında yer kaplamaz. Lakin #define ile tanımladığınız değişkene sonradan farklı değer atayamazsınız. örneğin sayaç değişkeni tanımlayacaksanız #define kullanmayınız.

Başka bir projede görüşmek üzere..

SİZCE NASIL OLMUŞ?
Beğendim
78%
İlginç
15%
Eh İşte
4%
Anlamadım
0%
Kötü
0%
Berbat
4%
YAZAR HAKKINDA
Cem PEHLİVAN
23 yaşındayım ve aktif olarak özel bir şirkette yazılım ekibinde çalışıyorum. Hakim olduğum diller; Html, Css, Javascript, Php & Mysql, C#, .net Mvc. Kendime yetecek kadar da Java(Android platformunda) bilgim var.
6 YORUMLAR
  • can
    31 Ocak 2017 at 12:05

    hocam ben yapıyorum sürekli farklı bir kod çıkıyor her bastığımda ayrı bir kod geliyo

    • Cem PEHLİVAN
      31 Ocak 2017 at 19:16

      TV’nizin kumandasının pili tükenmeye başladığında TV ye belli bir mesafe yaklaştıktan sonra kumandadan kanal değiştirebilirsiniz. Yani pil zayıfladığında ve TV ye uzak olduğunuzda kanal değiştiremezsiniz. Yazıda bahsettiğim gibi; tuşa bastığımızda kızılötesi titreşimler etrafa yayılır. Pil zayıf olduğunda ve alıcıya uzak olduğunuzda bütün titreşimler alıcıya ulaşmaz ve alıcı bunu farklı bir mesajmış gibi yorumlar. Sizde arduino seri portunda sürekli farklı mesajlar görürsünüz. Tavsiyem; kumanda pilinizi değiştirin ve kumanda kalitenize göre sensöre olması gereken en fazla uzaklığınızı kendiniz belirleyin ve bunun dışına çıkmayın 🙂 Ufak bir ayrıntı; bazı kumandalarda tuşa basılı tutulduğunda (ses açma tuşu gibi) önce tuşun kendi kodunu gönderir A1B2C3 gibi daha sonra ise FFFFFF kodunu sürekli gönderir. Yani en son basılan A1B2C3 tuşuna basılı tutuluyor olarak arduinoda yorumlayabilirsiniz.

  • Ayhan
    18 Şubat 2017 at 00:35

    Merhaba ledler kmanda tuşuna basılınca yansa bırakılınca sönse bunun için kod nasıl düzenlenir acaba.Teşekkürler

    • Cem PEHLİVAN
      24 Şubat 2017 at 11:13

      Merhaba Ayhan, bunun için kumandadaki tuşun basılı tutulup tutulmadığını algılamamız gerekli. Örnek olarak TV kumandasındaki ses açma veya kısma tuşu. basılı tuttuğumuz süre boyunca işlem yapıyor. Keza diğer tuşlar da bu işi yapabilir. Bazı kumandalarda tuşa basılı tutulduğunda örneğin basılan tuşun kodu “A1B2C3” olsun. sürekli arka arkaya bu kodu gönderir. Bazı kumandalarda ise tuşa basılı tutulduğunda bir defa kendi kodunu gönderir yani örneğin “A1B2C3” gönderir ve tuşa basılı tutuluyorsa arkasında “FFFFFF” gönderir. Kendi kullandığın kumandanın nasıl bir işlem yaptığını yazımızdaki ilk kodu arduinona yükleyerek bakabilirsin. daha sonra ikinci kodda buton bölümünden herhangi birinde ;

      if (results.value == BUTON1)
      {
      digitalWrite(led1, HIGH);
      delay(100);
      digitalWrite(led1, LOW);
      }

      kodun en altında bulunan “delay(100);” satırını ise silmeni tavsiye ederim.

  • Metin Ay
    23 Şubat 2017 at 14:53

    merhabalar hocam bu projeyi biraz daha genişletmek istiyorum ben kumandayla arduino yu kontrol edip arduinodan evdeki lambaları kontrol etmek istiyorum böyle bir şey yapılabilir mi acaba ? bu konu hakkında yardımcı olursanız sevinirim teşekkürler.

    • Cem PEHLİVAN
      24 Şubat 2017 at 12:10

      Merhabalar, evet tabiiki yapılabilir. Bildiğiniz gibi arduino ile şebeke akımını kontrol edebilmek için Röle Kartı gerekli. Elektriğini açıp kapamak istediğiniz bütün cihazları lambaları vs. bu kartta toplamanız gerekli. Evdeki bütün lambalara giden kabloları nasıl toplarsınız bilmiyorum. Zahmetli bir iş. Bütün odalara yakın olan ortak nokta evin koridoru olsun. bütün odalarda lambayı açıp kapatan anahtardan kablo çekmek gerekli. Dediğim gibi bu çok zahmetli olan ve ucuz olan kısmı. Evde kablo karmaşası olmasın derseniz de, her lamba için;

      arduino nano veya pro mini,
      tekli röle kartı,
      usb power bank veya elektriği şebekeden alayım derseniz 12v trafo,
      bluetooth, wifi, mikrafon veya kızılötesi alıcı modülü, artık hangisi ile kontrol etmek istiyorsanız.

      Kızılötesi alıcı kullanırsanız her odadaki arduinoya farklı bir tuş atayıp bütün odaları tek kumanda ile kontrol edebilirsiniz.
      Evinizde wifi var ise wifi modülü kullanmanız daha maliyetli olsa da daha kullanışlı olabilir. Bütün arduinolar wifi a bağlanır ve sabit ip alır. siz de cep telefonu veya bilgisayarınızdan internet olan her yerden lambayı yönetebilirsiniz. Tabii sadece lamba için düşünmemek lazım. Aynı malzemeler ile kombinizi veya klimanızı, su ısıtıcınızı uzaktan açup kapatmanız mümkün. Eve gelmeden önce cep telefonunuzdan kombinizi açarsınız ve eviniz siz gelmeden ısınır 🙂

      Artık gerisi hayal gücünüze kalmış. Arduino ile röle kartı kullanmayı öğrendikten sonra evinizdeki bütün elektrikli cihazları kontrol etmeniz mümkün.

YORUM YAP