Merhaba arkadaşlar, bu yazımızda IR Alıcı ve kumanda ile uygulama yapacağız. Kumandadan bastığımız tuşlara göre istediğimiz devre elemanlarını çalıştırabileceğiz. Siz bu uygulamayı istediğiniz gibi değiştirebilirsiniz.

Malzeme Listesi

Devre Şeması

Malzeme listesindeki malzemeleri kullanarak devremizi aşağıdaki şemaya uygun olarak kuralım. Bu devremizde 2 adet led kullandık. Ledleri kumanda ile açma kapatma işlemini yapacağız. 1 adet buzzer kullandık ve kumanda ile buzzerı çalıştırıp kapatabileceğiz. Servo motoru da 0 derece ile 90 derece arasında kumanda ile yönetebileceğiz. Bağlantıları bu şekilde yaptıktan sonra arduino kodlarımıza geçebiliriz.

Arduino Kodları

Daha önce yaptığımız değer okuma uygulamasında kumandamıza ait hex kodlarını bu uygulamamızda kullanacağız. İlk olarak IRremote ve Servo kütüphanelerini projemize ekleyeceğiz. Servo motor kullanımı hakkında bilginiz yoksa  bu yazımıza bakabilirsiniz. Kütüphaneleri ekledikten sonra define ile kumandadaki tuş isimlerini ve hex kodlarını tanımlayacağız. Benim tanımladığım hex kodları farklı olabilir o yüzden tavsiyem değer okuma uygulamasını yaparak bu değerleri kendinizin bulmasıdır. Daha sonra servo, buzzer ve ledlerimizin pin numaralarını define ile tanımlıyoruz. IRrecv sınıfından  irrecv isimli bir nesne oluşturuyoruz “IRrecv irrecv(irPin);” ve parantez içinde ir alıcı modülümüzün sinyal pinini giriyoruz. decode_results türünde results değişkeni oluşturuyoruz “decode_results results;” ve okuduğumuz değerler bu değişkende saklanacaktır. Son olarak ise servo sınıfından servo1 isimli bir servo nesnesi oluşturuyoruz.

Setup fonksiyonunda servomuzun pin numarasını “Servo1.attach(servoPin);” bu kod ile tanımlıyoruz. IR alıcı modülümüzü aktif etmek için de “irrecv.enableIRIn();” kodunu kullanıyoruz. Buzzerımız ve ledlerimizi OUTPUT (çıkış) olarak tanımlıyoruz.

Loop fonksiyonunda eğer kumandadan IR alıcımıza bir değer geldiği anlaşılınca if bloğunun içine giriyoruz. Bu bloğun içinde ise gelen değer ile define ile tanımlanmış kumanda değerlerini karşılaştırıyoruz. Gelen değere göre de işlemler yapıyoruz. Daha detaylı açıklarsak;
TUS1 => Led1 Aç,
TUS2 => Led2 Aç,
TUS3 => Buzzer Aç,
TUS4 => Led1 Kapat, 
TUS5 => Led2 Kapat, 
TUS6 => Buzzer Kapat,
YUKARITUS => Servoyu 90 derece ayarla ve
SAGTUS => Servoyu 0 dereceye ayarla şeklindedir. Siz kendinize göre uygulamayı değiştirebilirsiniz. Herhangi bir işlem yapıldıktan sonra “irrecv.resume();” kodumuza geliyoruz ve bu kodumuz da bir sonraki değeri almak için devam et anlamına geliyor.

Ekstra olarak if bloğunun yapısından bahsetmek istiyorum.
Eğer if bloğu içine bir satırlık bir kod yazacaksak,
if(digitalRead(ButonPin)==HIGH)
    digitalWrite(Led1,HIGH) ;
şeklinde süslü parantezleri “{ }” koymadan kullanabiliriz.

Bir satırdan fazla kod yazarsak;
if(digitalRead(ButonPin)==HIGH){
    digitalWrite(Led1,HIGH); 
    digitalWrite(Led2,HIGH);

şeklinde süslü parantezleri koymak zorundayız.

#include <IRremote.h> 
#include <Servo.h>

#define TUS1 0xFF30CF
#define TUS2 0xFF18E7
#define TUS3 0xFF7A85
#define TUS4 0xFF10EF
#define TUS5 0xFF38C7
#define TUS6 0xFF5AA5
#define YUKARITUS 0xFF42BD
#define SAGTUS 0xFF4AB5

#define servoPin 3
#define led1Pin 5
#define led2Pin 6
#define buzzerPin 7
#define irPin 2

IRrecv irrecv(irPin);
decode_results results;

Servo Servo1;

void setup() {
    Servo1.attach(servoPin);
    irrecv.enableIRIn();
    pinMode(led1Pin,OUTPUT);
    pinMode(led2Pin,OUTPUT);
    pinMod(buzzerPin,OUTPUT);
}
 
void loop() {
    if (irrecv.decode(&results)){ 
        if(results.value==TUS1)  
            digitalWrite(led1Pin,HIGH);    
        else if(results.value==TUS2) 
            digitalWrite(led2Pin,HIGH);    
        else if(results.value==TUS3)
            digitalWrite(buzzerPin,HIGH);    
        else if(results.value==TUS4)
            digitalWrite(led1Pin,LOW);        
        else if(results.value==TUS5)
            digitalWrite(led2Pin,LOW);    
        else if(results.value==TUS6)
            digitalWrite(buzzerPin,LOW);  
        else if(results.value==YUKARITUS)
            Servo1.write(90);
        else if(results.value==SAGTUS)
            Servo1.write(0);
        irrecv.resume();
    }
}

Kodları yazdıktan sonra arduinomuzu bilgisayara bağlayıp yükleme işlemini yapabiliriz. Bu sayede İstiklal Marşı uygulamamız gerçekleşmiş olacak.

IR Alıcı ve kumanda ile uygulama yaptığım yazımı okuduğunuz için teşekkür ederim. Bir sonraki projemizde görüşmek üzere 🙂

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz