IR Kontrol

Başlatan hamzahaluk, 11 Ekim 2014, 01:40:59

hamzahaluk

İlk defa kablosuz, IR alıcı-verici ile (http://www.robotistan.com/IR-Alici-Verici-Kumanda-Seti-IR-Receiver-Module-Wireless-Remote-Control-Kit,PR-1788.html) motor kontrolü yapmak istiyorum. PROTON programını kullanıyorum. Fakat yabancı olduğum bir konu;
1.) Kumanda ve PIC arasındaki bilgi alıp gönderme işini yazılımsal olarak nasıl çözebilirim?
2.) Kumanda üzerinde 21 tane buton var, kumanda üzerinde ki butonlarla ilgili olarakta tuş1:0xFFA25D, tuş2:0xFFE21D, gibi 21 tuşa hexadecimal değerler verilmiş. Bunlar ne anlama geliyor?

ete



Her bir IR kumanda bir bilgi verme protokolü ile çalışır. Buna protokol diyoruz çünki değişik ticari firmalar kendi haberleşme protokollerini üretmişlerdir. Sayarsak, Phillips RC5 , Sony Sirc, Nec, Nokia, gibi protokoller var piyasada. Öncelikle senin elindeki hangi ptotokolü kullanıyor öğrenmek gerekir.
Bütün protokollerde ortak nokta veri denilen yollanan bilginin bir paket den oluşmasıdır. Bunu bir trene benzetebiliriz. Paketin en başında start biti yer alır. Bu paket başının alıcı tarafından kolaylıkla yakalanabilmesi için oraya yerleştirilir ve protokollere göre şekli farklıdır.
Ardından bazılarında kontrol biti, toggle biti gibi yakalamayı dahada kolaylaştıran ilave bitler yer alır.
Onun ardından genelde cihaz kodu ve son olatakda basılan tuşun kodu yer alır. Senin Tus1 ve Tus2 diye belirttiğin şeyler basılan tuş karşılıklarıdır. Anlamadığım kısmı tuş karşılıkları genelde byte (8bit) olur. Seninkiler 16 bit (değişik olan kısım) gözüküyor.

Şayet bir açıklama var ise kumandanın hangi protokolde çalıştığını öğren. Açıklama yok ise, kesinlikle kumanda çıkışı bir skop yada lojik analizör ile gözlenmelidir. Böylece çıkan data nın önce şekli sonra bit oluşturma şekilleri ve süreleri görülüp ona görede alıcıda işlemci yardımı ile bir alma protokolü oluşturulabilir.
Veri paketi içinde start bitini atlarsak tuş ve cihaz kodlarının sayılardan oluştuğunu söyleyebiliriz. Protokol gereği bu sayıların her bir biti genelde iki bitten oluşturulur. Örnek vermek gerekirse,
RC5 protokolünde ;
"1" biligisi 900us lik bir high+900us lik bir low palsinden oluşur.
"0" bilgisi 900us lik bir low+900uslik bir high bilgisinden oluşur.
Her protokolde şekil ve süreler farklıdır.
Bunların çözülmesi gerekiyor.
Sorularının cevaplarını aşağı yukarı verdim. Toparlarsak,
1- pic ile bu sistemin kontrol edilmesi için öncelikle protokolün belirlenmesi gerekiyor.
2- verilen rakamlar tuş kodu olarak gözüküyor ama değerler büyük.

Ete

hamzahaluk

Hocam kumanda ile ilgili şu açıklama yapılmış," Alıcı kısmında 38 KHz'lik 1838B kızılötesi alıcı göz bulunmaktadır. Bununla beraber istenilirse farklı 38 KHz'lik alıcılar ile beraber de kullanılabilir. Kumanda ise 21 butonlu ve tüm butonları kullanılabilir halde bir üründür. Açık alanda 8 metreye kadar haberleşme sağlanabilmektedir. Alıcı 60º'lik bir görme açısına sahiptir. "  denmiş.

Ayrıca arduino programı için sunulan örnek kütüphanede "Added panasonic and JVC protocol" açıklamasına yer verilmiş. (https://github.com/shirriff/Arduino-IRremote/tree/master/examples)

İşimize yarar mı acaba ?

Bir de arduino programlama kartı için örnek bir program yazılmış bu kumanda için şu şekilde;
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define CH1 0xFFA25D
#define CH 0xFF629D
#define CH2 0xFFE21D
#define PREV 0xFF22DD
#define NEXT 0xFF02FD
#define PLAYPAUSE 0xFFC23D
#define VOL1 0xFFE01F
#define VOL2 0xFFA857
#define EQ 0xFF906F
#define BUTON0 0xFF6897
#define BUTON100 0xFF9867
#define BUTON200 0xFFB04F
#define BUTON1 0xFF30CF
#define BUTON2 0xFF18E7
#define BUTON3 0xFF7A85
#define BUTON4 0xFF10EF
#define BUTON5 0xFF38C7
#define BUTON6 0xFF5AA5
#define BUTON7 0xFF42BD
#define BUTON8 0xFF4AB5
#define BUTON9 0xFF52AD

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results))
{
if (results.value == CH1)
{
Serial.println("CH-");
}
if (results.value == CH)
{
Serial.println("CH");
}
if (results.value == CH2)
{
Serial.println("CH+");
}
if (results.value == PREV)
{
Serial.println("PREV");
}
if (results.value == NEXT)
{
Serial.println("NEXT");
}
if (results.value == PLAYPAUSE)
{
Serial.println("PLAY/PAUSE");
}
if (results.value == VOL1)
{
Serial.println("VOL-");
}
if (results.value == VOL2)
{
Serial.println("VOL+");
}
if (results.value == EQ)
{
Serial.println("EQ");
}
if (results.value == BUTON0)
{
Serial.println("BUTON0");
}
if (results.value == BUTON100)
{
Serial.println("BUTON100+");
}
if (results.value == BUTON200)
{
Serial.println("BUTON200+");
}
if (results.value == BUTON1)
{
Serial.println("BUTON1");
}
if (results.value == BUTON2)
{
Serial.println("BUTON2");
}
if (results.value == BUTON3)
{
Serial.println("BUTON3");
}
if (results.value == BUTON4)
{
Serial.println("BUTON4");
}
if (results.value == BUTON5)
{
Serial.println("BUTON5");
}
if (results.value == BUTON6)
{
Serial.println("BUTON6");
}
if (results.value == BUTON7)
{
Serial.println("BUTON7");
}
if (results.value == BUTON8)
{
Serial.println("BUTON8");
}
if (results.value == BUTON9)
{
Serial.println("BUTON9");
}
irrecv.resume();
}
}

ete

İşine yarayacak tek bilgi 38khz lik bir göz kullanılacağı bilgisidir. Oradaki açıklamalara baktım.
Adam bir çok protokol için tek kütüphane hazırlamış. Program içinden seçilerek sana hangisi lazım ise seçiyorsun sanırım. C diline aşina olmadığım için daha fazla bilgi edinemedim.

Ete

İlyas KAYA

Protonda bir işinize yaramaz. ETE hocanın da dediği gibi bütün protokoller için adamlar oturmuş kütüphane yazmış.
Hatta listesinide vereyim.

#define NEC 1
#define SONY 2
#define RC5 3
#define RC6 4
#define DISH 5
#define SHARP 6
#define PANASONIC 7
#define JVC 8
#define SANYO 9
#define MITSUBISHI 10
#define SAMSUNG 11
#define LG 12
#define UNKNOWN -1

Çözülen kod için protokol numarası vermişler. eğer 1 ise NEC , 2 ise SONY gibi..

Arduino ile çok rahat bir şekilde kullanabilirsiniz.
Kendiniz yapmak isterseniz önce kumandanın hangi protokolü kullandığını bilmelisiniz.

IR alıcının çıkışını osiloskop ile yada PC osiloskop ile bakıp protokolleri karşılaştırmalısınız.
Hangi protokol ise o protokole göre alıcı programı yazılmalıdır.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

hamzahaluk

Anladım, teşekkür ederim

Powered by EzPortal