Kategori:

Ardunio

Başlık:

Kızılötesi (IR) kumanda ile led ve servo motor kontrolü

Elinizdeki fazla kumandaları atmayın. Bu etkinlikten sonra artık onları Ardunio ve robotik projelerinizde kullanabileceksiniz. Bilindiği üzere kızılötesi (IR) kumandalar ışıklar vasıtasıyla ikili kodlar gönderir. bu kodlar vasıtasıyla da tv gibi cihazlarda açma, kapatma, ses açma gibi temel komutlar verilir. Robotik projelerinde de Kızılötesi (IR) kumandaların bu özelliklerini kullanarak kısa mesafelerde kablosuz iletişimi kullanarak çeşitli kontrolleri sağlayabiliriz. Buradaki örnekte RGB led ve Servo motor örnekleri üzerinden Ardunio ile kızılötesi (IR) kumandaların kzılötesi alıcı sensör vasıtasıyla haberleşmesi ele alındı. Siz yapacağınız projeye göre bu etkileşimi uyarlayabilirsiniz. Şimdi adım adım bu örnek etkileşimi gerçekleştirelim.

Kullanılan Malzemeler:

  • Ardunio Uno
  • KY-022 Kızılötesi Alıcı Modülü
  • Kızılötesi Kumanda
  • RGB led 220 Ohm Direnç(led için)
  • Servo Motor
  • Breadboard
  • Jumper Kablolar

Projenin Şeması:

Ardunio'da kızılötesi IR kumanda ile kontrol şeması

Yukarıdaki şekilde devreyi oluşturduktan sonra öncelikle kızılötesi algılama modülü için aşağıdaki kütüphane dosyasını indirip Ardunio'da tanımlayalım:

KY-022 Kızılötesi(IR) algılama sensörü için gerekli kütüphane:

http://z3t0.github.io/Arduino-IRremote/

Daha sonra aşağıdaki kaynak kodu Ardunio'ya yükleyelim. 

#include "IRremote.h"  //Kızılötesi alıcı sensör için gerekli kütüphaneyi yüklüyoruz
#include "Servo.h"     //Servo motor için gerekli kütüphaneyi yüklüyoruz

#define bluePin 3
#define redPin 5
#define greenPin 6
Servo srv; 

int RECV_PIN = 11; // Kızılötesi veri girişi için 11 nolu pin ayarlandı
IRrecv irrecv(RECV_PIN); 
decode_results results; // IRremote.h kütüphanesi vasıtasıyla alınan sinyaller decode ediliyor

void setup() { 
  Serial.begin(9600); 
  irrecv.enableIRIn(); // Kızılötesi alıcı çalıştırılıyor
         
  pinMode(bluePin, OUTPUT); 
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);

  srv.attach(10); //Servo motora sinyal göndereceğimiz pin tanımlandı
} 

void loop() { 
  if (irrecv.decode(&results)) {     //Bu if bloğuyla kızılötesi sensörün algılayacağı veriler değişkene aktarılıyor
    Serial.println(results.value, HEX); 
    irrecv.resume(); 
  }
  delay (100); 

  switch(results.value){
    case 0xF7C03F:  //Kumandanın açma tuşuna baıldığında RGB led açılıyor
    rgb(255,255,255); 
    break;
    case 0xF740BF: //Kumandanın kapatma tuşuna basıldığında RGB led kapatılıyor
    rgb(0,0,0);
    break; 
    case 0xF720DF:  //Kırmızı ışık
    rgb(0,255,0);
    break;
    case 0xF7A05F:  //Yeşil ışık
    rgb(0,0,255);
    break;
    case 0xF7609F:  //Mavi ışık
    rgb(255,0,0);
    break;
    case 0xF700FF:  //Servo ileri
    srv.write(0); 
    break;
    case 0xF7807F:  //Sevo geri
    srv.write(180); 
    break;
  }
  
}

void rgb(int blue, int red, int green)
 {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}

Bu kodla kumandanın tuşlarından gelen frekans değerlerine göre Ardunio'ya görevler vermiş olduk. Switch-Case yapısıyla basılan tuşa göre led açma-kapama, ledde mavi, kırmızı, yeşil ışıklar yakma, servo motoru sağa-sola döndürme görevleri verildi. Switch-Case yapısındaki değerleri kumandanın tuşlarına basılmasıyla aldığımız değerlere göre belirledik. Bu değerlerin belirlenmesi için;

Serial.println(results.value, HEX); 

kod satırından faydalanarak basılan tuşun hexadesimal değerini belirliyoruz ve Switch-Case yapısında bu değerleri yazıyoruz. Örneğin açma tuşunun değerini aşağıdaki gibi belirliyoruz:

Ardunio'da kızılötesi IR kumanda ile kontrol değer okuma

459 views
YORUMLAR