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

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
83%
İlginç
8%
Eh İşte
8%
Anlamadım
0%
Kötü
0%
Berbat
0%
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.
YORUMLAR

YORUM YAP