Arduino - Uzaktan Kumanda ile Servo Motor Kontrolü - TK19 MODÜLÜ-Infrared Receiver

Bu programda TK19 kızıl ötesi algılayıcı(Infrared Receiver), Servo Motor ve ledleri bir devrede kullanacağız. Uzaktan kumanda ile servo motoru hareketlendirip ledleri yakacağız.


Gerekli Malzemeler
  • Arduino Uno 
  • 4 adet led
  • 4 adet 220 ohm direnç
  • TK19 kızılötesi alıcı
  • 1 adet kumanda
  • 1 Adet Servo Motor
TK19 Modülü: Uzaktan kumanda modülü olarak biliniyor. 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.
Kumandadan bastığınız tuş, modül vasıtası ile sabit bir değer gönderiyor. Programa başlamadan önce hangi tuşun hangi değeri gönderdiğini bilmemiz gerekiyor. Ayrıca bu modülün bir de kütüphanesi bulunmakta.Bu kütüphaneyi (IRremote) 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.
Tuşların gönderdiği değerleri küçük bir programla seriporttan görmemiz gerekiyor. Bunun için aşağıdaki kodları kullanıyoruz.


#include <IRremote.h> //kütüphaneyi gösteriyoruz.
 #define TK19_PIN 2 //2 nolu pine tk19 a bağladık.
IRrecv irrecv(TK19_PIN);//irrecv nesnesini tanımlıyoruz.
decode_results results; //TK19`un okuduğu değeri almak için
//results değişkenini tanımlıyoruz
void setup()
{
 Serial.begin(9600);
 irrecv.enableIRIn(); //TK19 kızıl ötesi başlatılıyor.
}
void loop() {
 if (irrecv.decode(&results)) //kızıl ötesi değer results değişkenine atandığında...
 {
 Serial.println(results.value, HEX); // değeri hexadecimal formatta seriporta yazdır.
 irrecv.resume();
 }
 delay(100);
}

Programı karta gönderdikten sonra seriportan tuşların hangi değerleri
gönderdiğini not almamnız gerekiyor.

Resimdeki gibi her tuş sabit farklı bir değer gönderiyor.
Bendeki kumandanın gönderdiği değerler:
Yukarı ok=3D9AE3F7
Aşağı ok=1BC0157B
Sağ ok=449E79F
Sol Ok=8C22657B

Bu değerleri aldıktan sonra devreyi kuralım:

Bu iki devreyi uygun şekilde tek devre olarak kuruyoruz. TK19 için dişi jumper kablolar gerebilir. 5v à gidecek kablolara breadboardun 4 kenarında GND`ye gidecek kabloları breadboardun eksi kenarında birleştirelim. 

Gelelim kodlara:
 Aşağıdaki kodlara göre kumandadan
 Yukarı ok tuşuna bastığımızda 1 nolu led yanacak servo motor 45 derecelik açıya yapacak.
Aşağı ok tuşuna bastığımızda 2 nolu led yanacak servo motor 90 derecelik açı yapacak.
Sağ ok tuşuna bastığımızda 3 nolu led yanacak servo motor 135 derecelik açı yapacak.
Sol ok tuşuna bastığımızda 4 nolu led yanacak servo motor 180 derecelik açı yapacak.
Ledlerin biri yandığında diğer ledler sönecek. 



#include <IRremote.h> // Kütüphaneleri çağırıyoruz.
#include <Servo.h>


#define TK19_PIN 2 // 2 Nolu pine TK19 bağlandı.

IRrecv irrecv(TK19_PIN);  // servo ve irrecv nesneleri oluşturuldu.
Servo myservo;
decode_results results;

#define BUTON1 0x3D9AE3F7  // butonların değerleri değişkenlere atandı.
#define BUTON2 0x1BC0157B
#define BUTON3 0x449E79F
#define BUTON4 0x8C22657B

#define led1 7  //ledler 7,6,5,4 nolu pinlere bağlandı.
#define led2 6
#define led3 5
#define led4 4


void setup() {
 pinMode(led1, OUTPUT); // ledler output olarak ayarlandı.
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
  myservo.attach(9); // Serve 9 Nolu pine bağlandı.
 Serial.begin(9600);
 irrecv.enableIRIn(); //kızıl ötesi sensör açıldı.
}

void loop() {

if (irrecv.decode(&results))
 {
 if (results.value == BUTON1)  // kızıl ötesinden okunan değer buton1 ise..
 {
 
  myservo.write(45); // servo 45 derece açı yapacak.
 
 digitalWrite(led1, HIGH); //led1 yanacak. diğer ledler sönecek.
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 }
 if (results.value == BUTON2) // kızıl ötesinden okunan değer buton2 ise..
 {
  myservo.write(90);          //servo 90 derece açı yapacak.
 digitalWrite(led2, HIGH);    //led2 yanacak. diğer ledler sönecek.
 digitalWrite(led1, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 }
 }
 if (results.value == BUTON3) // kızıl ötesinden okunan değer buton3 ise..
 {
  myservo.write(135);       //servo 135 derece açı yapacak.
 digitalWrite(led3, HIGH); //led3 yanacak. diğer ledler sönecek.
 digitalWrite(led2, LOW);
 digitalWrite(led1, LOW);
 digitalWrite(led4, LOW);
 }
 if (results.value == BUTON4) // kızıl ötesinden okunan değer buton3 ise..
 {
  myservo.write(180);      //servo 180 derece açı yapacak.
 digitalWrite(led4, HIGH); //led4 yanacak. Diğer ledler sönecek.
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led1, LOW);
 }
   irrecv.resume();

 delay(100);
}

Bir başka projede görüşmek üzere kalın sağlıcakla...
Sinan KARDAŞ




Yorumlar