IR(Kızılötesi) Işık
Kızılötesi ışık aslında belirli bir renge sahip normal ışıktır. Biz insanlar bu rengi göremeyiz çünkü yaklaşık 950 nm'lik dalga boyu görünür spektrumun altındadır. IR'nin uzaktan kumanda amaçları için seçilmesinin nedenlerinden biri de budur. Onu kullanmak isteriz ama onu görmekle ilgilenmeyiz. Bir diğer neden ise IR LED'lerin yapımının oldukça kolay olması ve bu nedenle çok ucuz olabilmesidir.
Biz insanlar uzaktan kumandadan yayılan Kızılötesi ışığı göremesek de, onu görünür kılamayacağımız anlamına gelmez. Bir video kamera veya dijital fotoğraf makinesi Kızılötesi ışığı "görebilir". Günümüzde en ucuz cep telefonlarında bile dâhili kameralar bulunmaktadır. Uzaktan kumandanızı böyle bir kameraya doğrultun, herhangi bir düğmeye basın ve LED'in titrediğini göreceksiniz.
Ne yazık ki bizim için çok daha fazla Kızılötesi ışık kaynağı var. Güneş en parlak kaynaktır, ancak ampuller, mumlar, merkezi ısıtma sistemi ve hatta vücudumuz kızılötesi ışık yayar. Aslında ısı yayan her şey, kızılötesi ışık da yayar. Bu nedenle, IR mesajımızın alıcıya hatasız bir şekilde ulaşmasını garantilemek için bazı önlemler almalıyız.
IR(Kızılötesi) Işık İletimi
Data iletimi için kullanılan IR ışık, IR modülatör ve demodülatör kullanarak düşük frekanslı darbeleri iletmek ve almak için kullanılır. Düşük frekanslı sinyal yüksek frekanslı sinyal ile modüle edilerek IR LED aracılığıyla gönderilir. Alıcı göz tarafından alınan bu yüksek frekanslı taşıyıcı sinyal, demodülatör tarafından ayrıştırılır ve gerçek sinyali diğer adıyla data sinyalini bizlere verir.
IR Sinyallerinin Kodlanmasında Taşıyıcı Frekans ve Data Sinyali Modülasyonu
IR sinyallerin daha uzak mesafelere gidebilmesi ve ayrıca IR verici Led akımının daha yüksek akımda anahtarlamalı çalışabilmesi için taşıyıcı frekans kullanılır. Data sinyalini direkt olarak gönderici IR Led’e verip göndereyim deseniz mesafe çok küçük olacaktır. Fakat taşıyıcı frekansa bindirip gönderdiğinizde mesafe daha uzun olacaktır. Bundan dolayı kumanda vericisi yapılırken data sinyali ve taşıyıcı frekans birleştirilerek(modüle edilerek) gönderilir. Modülasyonla IR ışık kaynağının yani IR LED’in belirli bir frekansta yanıp sönmesi sağlanır.
Alıcı göz taşıyıcı frekansı yok ederek diğer deyişle taşıyıcı frekansı süzerek bize data sinyalini verir ve bu data sinyalini alıcı devrede işleriz.
Alıcı gözler genellikle 30, 33, 36, 38, 40 veya 56 kHz frekansına maksimum geçirgenlik için ayarlanmıştır ama en çok kullanılan 36Khz ve 38Khz dir.
Aşağıdaki resimde bulunan devre basit olarak taşıyıcı frekans ile data sinyalinin nasıl birleştirildiği(modüle edildiği) görülmektedir.

Devre çalışmasına bakarsak, taşıyıcı frekansın LOW kısmında transistorün beyz ucu toprağa götürülür ve IR Led söner. Taşıyıcı frekansın HIGH kısmında ise, diyot tıkama yönünde çalışacağından kontrol sinyalinin durumuna bağlı olarak IR Led’in durumu belli olur. Bu durum aşağıdaki tablodan daha kolay anlaşılmaktadır.
Modülasyonun Grafik Gösterimi:

Modülasyon ve Demodülasyon İşlemi
Yandaki resimde, IR LED'i çalıştıran modüle edilmiş bir sinyal görebilirsiniz. Algılanan sinyal diğer taraftaki alıcıdan çıkmaktadır. Gelen sinyal alıcı göz tarafından terslendiği için transistörün beyzine gelen darbe dizilerinde alıcı göz çıkışı LOW, boşluk durumunda yani darbe dizilerinin gelmediği durumda ise alıcı göz çıkışı HIGH durumunda olur.
Seri iletişimde genellikle 'Darbeler(İşaretler)' ve 'Boşluklar' dan bahsederiz. Vericide 'Boşluk' durumu; kapalı durumda olan sinyaldir. 'Boşluk' durumu sırasında ışık yayılmaz. Vericide 'Darbe(İşaret)' durumu; IR ışığın belirli bir frekansta açılıp kapanması durumudur. Yani taşıyıcı frekans arka arkaya gönderildiğinde HIGH seviyesi, hiç gönderilmediğinde LOW seviyesi olur. 30kHz ile 60kHz arasındaki taşıyıcı frekansları genellikle tüketici elektroniğinde kullanılır. Ancak en yaygın olanı 38kHz'dir.
Alıcı tarafında, alıcı gözün sinyali terslediği düşünüldüğünde bir 'Boşluk'; genellikle alıcı gözün çıkışının HIGH seviyesiyle temsil edilir. Bir 'Darbe(İşaret)' ise; genellikle alıcı gözün çıkışının LOW seviyesiyle temsil edilir.
Lütfen 'Darbeler(İşaretler)' ve 'Boşluklar' ın iletmek istediğimiz 1'ler ve 0'lar olmadığını unutmayın. 'Darbeler(İşaretler)' ve 'Boşluklar' ile 1'ler ve 0'lar arasındaki gerçek ilişki, kullanılan protokole bağlıdır. Bu konuda daha fazla bilgi, protokolleri açıklayan sayfalarda bulunabilir.
Örnek: Philips RC-5 Protocol, NEC Protocol, Sony SIRC Protocol
Modülatör ve Demodülatör Devrelerinde Düşük Frekanslı Darbeler İçin Dalga Formları

Kızılötesi Uzaktan Kumanda Modülasyonu ve Kodlama Teorisi
Uzaktan kumanda uygulamalarında kullanılan kızılötesi ışığın modüle edilmesinin bir diğer amacı, alıcının istenen sinyaller ile diğer tüm kızılötesi gürültü kaynakları arasında ayrım yapabilmesini sağlamaktır. İstenmeyen gürültü ile yararlı kızılötesi sinyaller arasında ayrım yapmak için kullanılan birkaç farklı modülasyon ve kodlama tekniği vardır.
Temel olarak üç modülasyon tekniği kullanılır:
1. Genlik Modülasyonu, Açık-Kapalı Anahtarlama, OOK(Amplitude Modulation, On-Off Keying, OOK).
2. FSK, Frekans Kaydırma Anahtarlaması, Frekans Modülasyonu(FSK, Frequency Shift Keying, Frequency Modulation).
3. Flaş, 'Darbe' Modülasyonu, Temel Bant(Flash, ‘Pulse’ Modulation, Base Band).
Genlik Modülasyonu, Açık-Kapalı Anahtarlama
Genlik modülasyonunun kullanılması, kızılötesi sinyallerin belirli bir frekansta (genellikle 30–60 kHz) bir grup darbe oluşturduğu ve hiçbir sinyalin üretilmediği bir alanla sınırlandırıldığı en eski ve en basit tekniklerden biridir.
Genlik modülasyon sistemleri aşağıda anlatıldığı gibi çeşitli kodlama yöntemleri kullanır. Başka kodlama türleri de vardır ama burada en sık kullanılanlar anlatılmıştır.
Darbe Mesafesi Kodlaması(Pulse Distance Encoding)
Darbeler arasındaki mesafe sırasıyla lojik '1' veya lojik '0'ı tanımlar, darbe genişliği sabittir.

Darbe Genişliği Kodlaması(Pulse Width Encoding)
Darbe genişliği sırasıyla lojik '1' veya lojik '0'ı tanımlar, darbe mesafesi sabittir.

Darbe Pozisyonu Kodlaması(Pulse Position Encoding (NRZ)
Burada, zaman ölçeği sabit uzunluk aralıklarına bölünmüştür. Örneğin; bir darbenin varlığı lojik '1'i, yokluğu ise lojik '0'ı belirtir.

Manchester (İki Fazlı) Kodlaması(Manchester (Biphase) Encoding)
Her bit, farklı seviyeye sahip olan iki yarım bitten oluşur. Yani darbeden boşluğa veya boşluktan darbeye geçiş vardır. Geçişin polaritesi mantıksal seviyeyi tanımlar. Örneğin darbeden boşluğa lojik '1'i, boşluktan darbeye lojik '0'ı belirtir.

FSK, Frekans Kaydırma Anahtarlaması, Frekans Modülasyonu(Frequency Modulation)
Bir frekans modülasyonu, veri mantık seviyeleri için farklı modülasyon frekansları kullanır. Genellikle darbeler arasında boşluk yoktur. Frekans modülasyonu, esas olarak demodülasyon karmaşıklığı ve verici tarafındaki güç tüketimi açısından verimsizlik nedeniyle yaygın olarak kullanılmaz.

Flaş, 'Darbe' Modülasyonu, Temel Bant((Flash, ‘Pulse’ Modulation, Base Band)
Aslında, 'darbe' modülasyonu herhangi bir modülasyon biçimini değil, kısa darbeleri (CMT terminolojisinde, temel bant modu) kullanır. Bu tür 'modülasyon', güç tüketimi açısından oldukça etkilidir(darbeler genellikle onlarca mikrosaniye aralığındadır). Bir dezavantajı, kod çözmenin karmaşıklığı ve PC tabanlı kızılötesi sistemlerin (IrDA) yanlış alıcı tetiklemesine neden olabilmesidir. Tipik olarak, darbeler arasındaki mesafe sırasıyla lojik '1' veya lojik '0'ı tanımlar.

Genlik Modülasyonunda Darbe Mesafesi Kodlaması ve Protokolü
NEC Protokolü
Bu protokol genellikle Japon şirketleri (NEC ve diğerleri) tarafından kullanılır. Samsung da bu protokolü ufak değişiklikle kullanır. Taşıyıcı frekans 38kHz’dir. Verilerden önce, alıcının otomatik kazanç kontrolünü (AGC) yerleştirmek için 9 milisaniyelik bir darbe dizisi sinyali ve ardından 4,5 milisaniyelik bir LOW sinyali iletilir. Ardından 8 bit adres ve 8 bit komut iletilir. Adres ve komut güvenilirlik için iki kez iletilir. İkinci seferde tüm bitler ters çevrilir ve alınan mesajın doğrulanması için kullanılabilir. Son bitin değerini belirleyebilmek için mesajın sonu 560 μs’lik darbe dizisi sinyali(yaklaşık 21 periyot) ile sonlandırılır. NEC protokolü start ve stop sinyali hariç 32 bitliktir.
NEC Protokolü Bit Kodlama:

Lojik '1' : 560 μs darbe dizisi sinyalini takiben 1690 μs boşluk sinyalini ifade eder.
Lojik '0' : 560 μs darbe dizisi sinyalini takiben 560 μs boşluk sinyalini ifade eder.
Taşıyıcı frekansı: 38 kHz'dir.
NEC Protokolü Veri Çerçeve Yapısı:
Bu protokolle önce LSB iletilir sonra MSB iletilir. Örneğin; aşağıdaki veri çerçevesinde Adres= 10101000’dır ama önce LSB gönderildiği için Adres=00010101 şeklinde gönderilir.

NEC Protokolü Tekrarlama Çerçevesi Yapısı:
Uzaktan kumandadaki tuş basılı kalsa bile bir komut yalnızca bir kez iletilir. Tuş basılı kaldığı sürece her 110 ms'de bir tekrar kodu iletilir. Bu tekrar kodu basitçe 9 ms'lik bir AGC darbesi, ardından 2,25 ms'lik bir boşluk ve 560 µs’lik darbe dizisi sinyaliyle sonlandırılır.

NEC Protokolü Tam Dizi Yapısı:

Genişletilmiş NEC Protokolü
NEC protokolü o kadar yaygın olarak kullanılıyor ki artık 8 bitlik(256 farklı adres) adres sayısı tükenmiş durumdadır. Bu nedenle 16 bitlik(65536 farklı adres) adresler kullanılmaya başlanmıştır. Adres aralığı bu şekilde genişletildiğinden toplam mesaj süresi artık sabit değildir. Komut yedekliliği hâlâ korunmaktadır ve her adres hâlâ 256 farklı komutu işleyebilir.
Samsung Protokolü
Samsung firması da NEC protokolü kullanılır. Fakat ufak farklılık vardır:
NEC protokolü : 9ms + 4.5ms + adres + adres tersi + komut + komut tersi + stop
Samsung protokolü : 4.5ms + 4.5ms + adres + adres + komut + komut tersi + stop
Şeklindedir. Samsung protokolünden gelen sinyali yakalayıp analiz ederken, NEC protokolünde kullandığınız programın aynısını kullanabilirsiniz. Sadece NEC protokolünün start palsindaki 9ms’lik kısmın, Samsung protokolünde 4.5ms olduğunu göz önüne alarak programımızda değişiklik yapmanız yeterlidir. Kodlama kısmında analiz ederken zaten adresin tersi ve komutun tersini dikkate almayız.
Sharp Protokolü
Sharp protokolü de darbe mesafesi kodlamasını kullanır. Sharp firması tarafından üretilen VCR player’larda kullanılır. Taşıyıcı frekans 38kHz’dir. Verilerden önce, start pulse gönderilmez. Önce 5 bit adres, ardından 8 bit komut gönderilir. Komutun ardından genişletme(Exp.) ve kontrol(Chk.) bitleri gönderilir. Mantıksal "1"in iletilmesi toplam 2ms sürerken, mantıksal "0"’in iletilmesi toplamda 1ms'dir. Bu protokolle önce LSB iletilir sonra MSB iletilir.


Tam bir komut dizisi 2 mesajdan oluşur. İlk iletim tam olarak yukarıda açıklandığı gibidir. İkinci iletim, ilkini 40 ms'lik bir gecikmeden sonra takip eder ve temelde aynı bilgileri içerir. Tek fark, adres alanından gelenler hariç tüm bitlerin ters çevrilmiş olmasıdır. Bu şekilde alıcı, alınan mesajın güvenilir olup olmadığını doğrulayabilir.

Genlik Modülasyonunda Darbe Genişliği Kodlaması ve Protokolü
SIRC olarak da bilinen darbe genişliği protokolü, Sony tarafından geliştirilmiştir. Darbe genişliği kodlaması ve genlik modülasyonu kullanır. Veri yükü 12 bittir. 7 bit komut ve 5 bit adresten oluşur (Protokolün bazı sürümleri; 7 bit komut ve 8 bit adresten oluşan 15 bit. Bazıları; 7 bit komut, 5 bit adres, 8 genişletilmiş bitten oluşan 20 bitten oluşur). Verilerden önce, alıcının otomatik kazanç kontrolünü (AGC) yerleştirmek için 2,4 milisaniyelik bir darbe dizisi sinyali ve ardından 0,6 milisaniyelik bir LOW sinyali iletilir.
Darbe Genişliği Protokolü Bit Kodlama

Lojik '1' : 1200 μs darbe periyodu ve ardından 600 μs boşluk periyodu olarak gösterilir.
Lojik '0' : 600 μs darbe periyodu ve ardından 600 μs boşluk periyodu olarak gösterilir.
Taşıyıcı Frekans: 40 kHz'dir.
Darbe Genişliği Protokolü Veri Çerçeve Yapısı
Bu protokolle önce LSB iletilir sonra MSB iletilir. Örneğin; aşağıdaki veri çerçevesinde Adres= 10011’dir ama önce LSB gönderildiği için Adres=11001 şeklinde gönderilir.

Darbe Genişliği Protokolü Tam Dizi Yapısı
Bu protokol için otomatik tekrarlama işlevi, veri çerçevelerinin tekrarlanmasıyla olur. Veri çerçeveleri, tuşa basılı kaldığı sürece her 45 ms'de bir tekrarlanır.

Genlik Modülasyonunda Manchester Kodlaması ve Protokolü
RC5 protokolü de denir. RC5 protokolü Philips tarafından geliştirilmiştir ve hobiciler arasında en popüler protokollerden biridir. Manchester (Bifaz) kodlamasını ve genlik modülasyonunu kullanır. Veri yükü 5 bit adres ve 6 bit komuttan oluşur((RC5X için 7 komut biti)). Veri iletimi 3 başlangıç biti ile başlar. Bunlar; 2 adet '1' biti (S1 ve S2) ve 1 adet toggle(geçiş) biti (T)’dir. Toggle(geçiş) biti, bir tuş bırakıldığında her seferinde tersine çevrilir. Farklı tuş basımları arasında '1' - '0' veya '0' - '1' olarak değişir. Bu şekilde alıcı, basılı kalan veya tekrar tekrar basılan bir tuş arasında ayrım yapabilir. Yani alıcının uzun bir tuş basımının, birkaç kısa tuş basımından ayırt edebilmesi için kullanılır.
Manchester(RC5) Protokolü Bit Kodlaması

Lojik ‘1’ : 889 μs boşluk periyodu ve ardından 889 μs darbe periyodu olarak gösterilir.
Lojik ‘0’ : 889 μs boşluk periyodu ve ardından 889 μs darbe periyodu olarak gösterilir.
Her bit 1778 μs uzunluğundadır.
Taşıyıcı frekans: 36 kHz'dir.
Manchester RC5 Protokolü Veri Çerçeve Yapısı
Bu protokolle önce MSB iletilir sonra LSB iletilir. Bazen bir mesaj, başlangıç biti S1'in ilk yarısı boşta kaldığı için daha kısa görünebilir. Mesajın son biti mantıksal "0" ise mesajın son yarısı da boştur. Örneğin; aşağıdaki veri çerçevesinde Adres = 10110’dır ve yine aynı sıralama ile iletilir.

Manchester RC5 Protokolü Tam Dizi Yapısı
Bu protokol için otomatik tekrarlama işlevi, aynı toggle(geçiş) bitine sahip tekrarlanan veri çerçevelerinden oluşur. Tuşa tekrar basılırsa, bir sonraki iletim aynı veriyi tutar ancak toggle(geçiş) biti '1'den '0'a veya tam tersine değiştirilir. Ayrıca, S2 başlangıç bitinin artık sabit olmadığı, bunun yerine ters çevrilmiş 6. adres biti olarak yorumlandığı bu protokolün genişletilmiş bir RC5X versiyonu da vardır.
Bir tuş basılı kaldığı sürece mesaj her 114 ms'de bir tekrarlanacaktır. Toggle(geçiş) biti, tüm bu tekrarlanan mesajlar boyunca aynı mantıksal seviyeyi koruyacaktır. Bu otomatik tekrar özelliğini yorumlamak alıcı yazılımına bağlıdır.

NEC Protokolünde IR Sinyallerinin Kodunun Çözülmesi ve Demodülasyon
Yukarıdaki konuda anlatılan “Darbe Mesafesi Kodlaması” ile gönderilen IR sinyalin, nasıl yakalanıp analiz edileceğinden bahsedeceğiz. 38 kHz'de modüle edilmiş bir IR sinyalini alan ve karşılık gelen 1'lere ve 0'lara çözen bir IR alıcı göz kullanacağız. Bu TSOP4838, TL1838, TSOP1738 vb. alıcı göz olabilir. Darbe Mesafesi Kodlaması ile gönderilen IR sinyalin, alıcı göz tarafından terslendiğine de dikkat edilmelidir. Sinyalin hangi kısmına göre analiz edip program yazacağımıza kendimiz karar vereceğiz. Orijinal sinyale göre karar vereceksek, LOW seviyesi büyük olana 1 dememiz gerekir. Şayet alıcı gözün terslemesine göre karar vereceksek, HIGH seviyesi büyük olana 1 dememiz gerekir.
Yandaki IR alıcıdaki D-Out pini normalde HIGH durumundadır. Bir sinyal algılandığında LOW olur. Burada bir ters çevirme olduğunu unutmayın. IR alıcıda D-Out pinindeki LOW bir sinyal iletilen sinyaldeki '1‘e, HIGH bir sinyal iletilen sinyaldeki ‘0’a karşılık gelir.
İnternette NEC protokol dediğinizde size herhangi bir tuşa ait sinyal resmi gelecektir. Fakat gelen sinyal TSOP4838 tarafından terslendiği için gelen sinyal resmi gerçek sinyalin tersi olarak görünecektir. Genelde Arduino kütüphaneleri bu terslenmiş sinyale göre kodu çözer. Kendi programınızı bu terslenmiş sinyale göre yapabilirsiniz. Ya da sinyali aşağıdaki resimdeki gibi tek bir transistör kullanarak tekrar tersleyerek orijinal sinyale dönüştüren bir devre kurup, girişine de alıcı gözü bağlayıp programınızı ona göre yapabilirsiniz.

Doğrusu hangisi derseniz orijinal sinyalin şekline uygun olandır.
Ek olarak IR alıcı doğrudan güneş ışığına maruz bırakılmamalıdır. Sinyalde karışıklıklar olabilir. Bunun için IR alıcısını korumaya dikkat edin. Çıkış sinyalinin 38 Khz’de modüle edilmesi gerektiği unutulmamalıdır.
Arduino kullananlar bilirler. IR kütüphaneleri vardır. Bu kütüphaneler kullanılarak yazılan programlar ile kumandanın herhangi bir tuşunun kodu seri monitörde görülür. Fakat IR sinyalin yapısı, nasıl kodlandığı ve kodunun nasıl çözüldüğü gibi detaylara hâkim olmak için kendi programımızı yazmak konuyu daha derinlemesine anlamamızı sağlayacaktır.
Kütüphanesiz çalışmada başlıca 2 yöntem izlenebilir:
Bu yöntemlerden kolay olanı pulseIn() komutudur. Bu komut ile IR alıcıdaki D-Out pinindeki HIGH seviyesinin ne kadar süre devam ettiği, LOW seviyesinin ne kadar süre devam ettiği, mikro saniyeler cinsinden kaydedilir.
Zor olanı ise Timer kesmesini kullanarak protokole uygun zaman aralıklarında sinyalin durumuna bakmaktır.
digitalRead() komutunu kullanmamalıyız. Çünkü çok yavaş ve oldukça verimsizdir. Bu bize çok yanlış zamanlamalar verir.
ÖNEMLİ:
Sinyal resimlerine bakarken LSB(Least Significant Bit - En Az Anlamlı) ve MSB(Most Significant Bit - En Anlamlı) göreceksiniz. Darbe Mesafe Protokolünde önce LSB iletilir sonra MSB iletilir. Fakat bazı protokollerde önce MSB, sonra LSB gönderildiği durum olabilir. Buna dikkat etmek gerekir.
Bir diğer dikkat edilmesi gereken konu ise; matematikte soldaki sıfırın bir önemi yoktur. Bazı binary yazan programlar en soldaki 0 değerini atıp sonucu öyle gösterir. Bundan dolayı gönderilen veriyi doğru olarak alamayabiliriz. Örneğin 32 bitlik veri alıyorsak tamamı 0 bile olsa bunu ekrana yazdırabilmeliyiz.
Örnek; NEC Protokolü Demodülasyonu

Orijinal sinyal 38kHz taşıyıcı frekans ile modüle edildikten sonra IR LED ile alıcı göze gönderilir. Alıcı göz sinyali çözer – demodüle eder ve tersleyerek çıktı verir. Yukarıdaki şeklin en altındaki sinyal görüntüsü, alıcı gözün D-Out pininden aldığımız sinyaldir.
D-Out’tan aldığımız sinyalin bir bölümünü yakınlaştıracak olursak, 0 ve 1 bitlerinin sürelerini görebiliriz. Alıcı göz tarafından orijinal sinyalin terslendiğini unutmayınız. Aşağıdaki gibi:

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
NOT: Yukarıdaki konularda bahsettiğimiz modülasyon teknikleri içerisindeki protokollerde bitlerin nasıl oluşturulduğunu, sürelerini, verilerin start - stop pulse’lerini vb. gördük. Fakat bu protokolleri üreten firmalar, protokolleri burada anlatılanlara göre belirlemek zorunda değillerdir. Bunlar firmaların kendi oluşturdukları standartlardır. Her firma kendi bit sürelerini, start - stop bitlerini vb. farklı değerlerde de belirleyebilir. Bu nedenle, IR kumanda kod çözümü programı yazmadan önce, kumandamızın kodlamasının nasıl yapıldığını, IR alıcı göz çıkışına bağlayacağımız osiloskop ile tespit etmemiz daha doğru olacaktır.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★





