Arduino ile IR (Infrared) Alıcı (Receiver) ve Verici (Transmitter)

watch_later 2/19/2016
comment 3 Comments
Temel IR İletişimi Kızılötesi (IR) alıcı verici
Alıcı-verici sistemleri genellikle kızılötesi veya radyo frekans sinyallerini kullanır. Kızılötesi alıcı verici sistemi LED teknolojisi ile gerçekleştirilmektedir. LED’ler elektrik enerjisini elektromanyetik enerjiye yani ışığa dönüştüren yarı iletken devre elemanıdır ve yaydığı elektromanyetik dalga frekansı, spektrumun görünür ya da görünür olmayan ışık bölgesine denk düşer. Görünür bölgeye ait sarı, yeşil, kırmızı, mavi renkte LED’ler olduğu gibi  kızıl ötesi (IR) veya mor ötesi (UV) ışık yayan LED'lerde bulunur. Verici devresinde belli bir frekansla elektromanyetik dalga yayan bir LED vardır ve alıcı tarafında ise bu dalgayı algılayan ve algılama sonucunu 1 ya da 0 gibi lojik çıkış vererek devamında bağlı olduğu bir eleman vardır.


arduino

Radyo frekansı ile haberleşme ise elektromanyetik dalgalar yoluyla gerçekleştirilir ve haberleşme yapılan frekans bandı telekomünikasyon kurumunun belirlediği Frekans Tahsis Tablosu'na göre seçilir. Telekomünikasyon kurumu tarafından yayınlanan "kısa mesafe erişimli telsiz cihazlarının kurma ve kullanma esasları" hakkındaki yönetmelikte, kurumun kabul ettiği standart ve teknik özelliklere uygun olmak kaydıyla hangi frekans bantlarında ruhsatsız ve izinsiz olarak yayın yapılabileceği belirtilmiştir. Buna göre, UHF bandının 433.05 MHz ile 434.79 MHz frekansları arasında 10 mW verici gücünü aşmamak koşuluyla radyo frekansı ile haberleşme yapılabilir. Uzaktan kontrol sistemlerinde bilgi sinyali, şifrelenerek ortama iletilir. Bu sayede, aynı frekans bandını kullanan diğer alıcı sistemlerin bu sinyalden etkilenmemesi sağlanır. Şifreleme işlemi, özel kodlayıcı-kod çözücü entegreler ile yapılabileceği gibi, mikrodenetleyici kullanılarak da yapılabilir.


IR Transmitter
IR LED, belirli kızılötesi frekans aralığında kızılötesi ışık yayar. Bu ışığı insan gözüyle görmek mümkün değildir. Infrared dalga boyu sadece 700nm - 1mm aralıklarında ve normal görünür ışık dışındadır. Isı üreten her şey gibi insan vücudu da kızılötesi ışık yayar. Kızılötesi o odaklı olabilir gibi yansıyan ve görünür ışık gibi polarize, görünür ışık ile aynı özelliklere sahiptir. Kızılötesi ışık yaymak dışında, IR LED normal bir LED’lere benzer ve aynı zamanda normal bir LED gibi çalışır, bir LED gibi 20 mA akım tüketir yani 3 V gerilim üretir. 


IR
IR Alıcı ve Verici Simülasyonu
IR Transmitter Devre Şeması
Bu devrede 1 K R1, R2 20 K ve 1 nF C1 kullanıldı. Bu formül kullanılarak devre eleman değerleri hesaplanabilir: 1.44 / ((R1 + 2 * R2) * C1)


Transmitter
IR Verici Devre Şeması
IR Receiver 
IR Receiver modülü kızılötesi dalgaları alır ve çıkışını değiştirir. Alıcı 38 Khz frekans oranında kızılötesi dalgaları algılar. Alıcının çıkışı LOW ise bir kızılötesi dalgası algılanmamıştır. HIGH olduğu durumda ise kızılötesi dalgası algılandığı anlamına gelir. IR alıcının Ground, Vs ve çıkış pini olmak üzere üç pini vardır.

IR Receiver Devre Şeması
IR alıcı devresinde alıcıyı test etmek için, IR Receiver çıkışına bir LED bağlamak gerekir. IR çıkışı OFF olduğunda LED kapalı, çıkış ON olduğunda, LED açık olacaktır. Bu devrede BC557 PNP transistör kullanmak gerekir. PNP transistör tabanına gerilim uygulanamadığında kapalı bir anahtar gibi davranır. NPN transistör PNP transistörün tersine davranır. Yani normalde IR Receiver çıkışı HIGH olduğunda transistör açık anahtar bir gibi davranır ve LED kapalı olacaktır. IR Receiver kızılötesini algıladığında kısa sürede, çıkış LOW olur ve transistör kapalı bir anahtar gibi davranır ve LED açık olacaktır. Transistör ile uygun akım sağlamak için 10 K direnç kullanılır ve bir 470 ohm akım sınırlandırıcı direnç kullanılır. 

Receiver
IR Alıcı Devre Şeması

Yapılan uygulama ile SensoDuino Android uygulaması kullanılarak TV sesini üzerinde ayar yapmayı sağlıyor. TV markası Sony, NEC, Panasonic vb.  gibi önde gelen üreticileri tarafından desteklenen birçok uzaktan kumanda protokolleri IRremote.h kütüphanesi içerisinde mevcuttur.

sensoduino
SensoDuino Uygulaması Kullanım Ekranı
Arduino Sketch:
#include 
#define REMOTE_CODE 0x1CE3E817  //burayı cihazınız IR kodu ile değiştirin

float val_1, val_2, val_3;
IRsend irsend;

void setup() {
  Serial.begin(9600); // 9600 varsayılan baud hızı (HC-06 Bluetooth modülü için)
  Serial.println("ANDROID SENSOR TIP NO");
  Serial.println("1- ACCELEROMETER  (m/s^2 - X,Y,Z)");
  Serial.println("2- MAGNETIC_FIELD (uT - X,Y,Z)");
  Serial.println("3- ORIENTATION (yaw, pitch, roll)");
  Serial.println("4- GYROSCOPE (rad/s - X,Y,Z)");
  Serial.println("5- LIGHT (SI lux)");
  Serial.println("6- PRESSURE (hPa millibar)");
  Serial.println("7- DEVICE TEMPERATURE (C)");
  Serial.println("8- PROXIMITY (Centimeters or 1,0)");
  Serial.println("9- GRAVITY (m/s^2 - X,Y,Z)");
  Serial.println("10- LINEAR_ACCELERATION (m/s^2 - X,Y,Z)");
  Serial.println("11- ROTATION_VECTOR (X,Y,Z)" );
  Serial.println("12- RELATIVE_HUMIDITY (%)");
  Serial.println("13- AMBIENT_TEMPERATURE (C)");
  Serial.println("14- MAGNETIC_FIELD_UNCALIBRATED (uT - X,Y,Z)");
  Serial.println("15- GAME_ROTATION_VECTOR (X,Y,Z)");
  Serial.println("16- GYROSCOPE_UNCALIBRATED (rad/s - X,Y,Z)");
  Serial.println("17- SIGNIFICANT_MOTION (1,0)");
  Serial.println("95 - TIME (H,M,S)");
  Serial.println("96 - DATE (Y,M,D)");
  Serial.println("97 - AUDIO (Vol.)");
  Serial.println("98 - GPS1 (lat., long., alt.)");
  Serial.println("99 - GPS2 (bearing, speed, date/time)");
  Serial.flush();
  pinMode(13, OUTPUT);
}

void loop()
{
  Serial.flush();
  int sensorTip = 0;
  unsigned long logSayac = 0L;

  char getChar = ' ';  // serialden okunan değer
  // seriale veri gelmesini bekle

  if (Serial.available() < 1) return;
  getChar = Serial.read();

  if (getChar != '>') return;

  sensorTip = Serial.parseInt(); // sensör tipini oku
  logSayac = Serial.parseInt();  // tüm sensör okuma sayısı
  val_1 = Serial.parseFloat();  // 1. sensör değeri
  val_2 = Serial.parseFloat();  // 2. sensör değeri
  val_3 = Serial.parseFloat();  // 3. sensör değeri

  if (sensorTip != 97) return;
  // Sensör değeri okunmadığı zaman geri dön yeniden oku
  int sesValue = analogRead(A5);

  float volLimit = sesValue * (32000 / 1023.0);
  // SensoDuino Audio sensöründen dönen değer max 32K
  int sesSeviye = val_1; // SensoDuino ile okunan ses
  if (sesSeviye > volLimit)
    // potansiyometreden okunan değeri eşlik değerle karşılaştır
  {
    digitalWrite(13, HIGH); // IR gönderirken LED açık
    delay(200);
    for (int i = 0; i < 3; i++) { // IR kodunu gönderir.
      irsend.sendNEC(REMOTE_CODE , 32);
      delay(200);

      // uzaktan kumanda protokolü ile eşleşen IRremote
      //fonksiyonları (istenilen cihaz markasına uygun)
      // irsend.sendNEC(REMOTE_CODE, REMOTE_BIT);
      // irsend.sendSony(REMOTE_CODE, REMOTE_BIT);
      // irsend.sendRC5(REMOTE_CODE, REMOTE_BIT);
      // irsend.sendRC6(REMOTE_CODE, REMOTE_BIT);
    }
  }
  digitalWrite(13, LOW); // IR verici kapandığında LED kapalı
}


fritzing
IR Receiver ve Transmitter Fritzing Şeması





Bir sonraki yazımda görüşmek üzere...
avatar

Kolay gelsin, bendeki sıkıntı, 5+1 ses sistemimin kumandası kayboldu ve açma kapama işlemi sadece kumandadan yapıla biliyordu, alıcı devredeki açma komutunu veren sinyali nasıl öğrenebilirim, teşekkürler.

delete 11 Temmuz 2019 08:45
avatar

İr verici için kaç ohm direnç lazım

delete 26 Ağustos 2021 20:02



sentiment_satisfied Emoticon