Arduino RF Haberleşme-2

Paylaş
Arduino RF Haberleşme-2

Daha önceden “Arduino ile RF Haberleşme” diye bir yazı paylaşmıştık. Şimdi de yine RF ile birşeyler yapmak için kablosuz ileşim sağlayan, düşük maliyetli RFM12B modülünü kullanacağız.

RFM12B nedir,  ne işe yarar, üstünlükleri nelerdir?

İlk önce RFM12B‘ yi biraz tanıyalım.   Yaklaşık 15,9 x16,1mm boyutlarında.  2,2-3.8V aralığında rahatlıkla çalışabiliyor. Düşük maliyetli, yüksek performanslıdır. SPI uyumlu bir arayüze sahiptir. Ayrıca üzerinde analog ve dijital RSSI çıkışları bulunmaktadır. Otomatik anten ayarı yapar. Programlanabilir TX frekans sapması yaklaşık 15-240 kHz aralığındadır. Programlanabilir alıcı bant genişliği ise 67-400 kHz aralığındadır.

RFM12B-Arduino-Board

 Peki RFM12B’yi nerelerde kullanırız?

RFM12B uzaktan kontrollü oyuncaklarda, wireless alarm sistemlerinde, wireless sensörlerde, wireless mouse ve klavyelerde, ev otomasyonlarında ve wireless veri toplamak için kullanılabilir.

Peki biz ne yapalım?

Görüldüğü üzere diğer ucuz RF modüllerden daha yüksek özelliklere sahip olan RFM12B modülleri veri yollama ve almak için ideal. RFM12B sayesinde iki tane Arduino’yu haberleştirebiliriz.

Şu özelliği de söyle biz diğerlerini kullanmayalım?

RF modüller, sinyal iletimini verimli şekilde yapabilmek için değişik modülasyon teknikleri kullanır. Bazı modüller genlik kaydırmalı anahtarlama (ASK) modülasyonunu kullanırken, bazıları da frekans kaydırmalı anahtarlama (FSK) modülasyonunu kullanır. Yapılacak uygulamanın tipine göre uygun modülasyon türünü seçmek gerekir. Örneğin, gürültülü ortamlarda FSK tip modülleri kullanmak daha iyi sonuç vermektedir.

Peki RFM12B?

RFM12B frekans kaydırmalı anahtarlama(FSK ) modülasyonunu  kullanır.

Şekil1. Dijital Sinyal ve FSK sinyal arasındaki ilişki

FSK modülatörler LM566 VCO kullanır. Bununla ilgili yani VCO (Voltage Controlled Oscillator-Gerilim Kontrollü Osilatör) yazsını bir iki güne Arduino Türkiye farkı ile bulacaksınız. VCO ile yaptığım bir çalışmanın sonuçlarını da ayrıca bu yazı da paylaşacağım… Şimdi konumuza dönelim.

Peki Arduino İle Nasıl Kullanacağız?

RFM12B ile iki adet Arduino’yu haberleştirebiliriz RFM12B ‘de bir çift değerleri okur ve gönderir ve diğeri alınan değeri görüntüler . Her iki çifti aynı şekilde bağlanır. RFM12B’yi Şekil2’deki gibi bağlayalım.

Şekil2.RFM12B ve Arduino Bağlantısı

 

Verici tarafı kod:

//Analog input değerlerini 4 interger değer.

#include <RF12.h>;  /*https://github.com/jcw/jeelib/blob/master/RF12.h  
adresinden indirebilirsiniz*/
#include <Ports.h>;

// RF12B sabitlerini tanımlayalım:
const byte network = 100; /* network grup ( 1-255 aralığında olabilir).
Modüllerin kendi aralarında haberleşebilmeleri 
için  alıcı ve verici değerleri aynı olmalı. Yani burada ikisi de 100 
olacak alıcı tarafında da 100 değerrini kullanacağız*/
const byte myNodeID = 1; // alıcıya özel benzersiz ID 1- 30 aralığında
//RF12B frekansı ; RF12_433MHZ, RF12_868MHZ veya RF12_915MHZ olabilir.
const byte freq = RF12_433MHZ; // Frekans modüllerle eşleştirilmeli
const byte RF12_NORMAL_SENDWAIT= 0;
void setup()
{
rf12_initialize(myNodeID, freq, network); /* RFM12'yi başlangıç 
durumuna  getirelim yukarıda nodeID frekans
ve network değerlerini girmiştik*/
}
const int payloadCount = 3; //"payload" içindeki int numaraları
int payload[payloadCount];
void loop()
{
for( int i= 0; i < payloadCount; i++)
{
payload[i] = analogRead(i);
}
while (!rf12_canSend()) // driver yollama için hazırmı?
rf12_recvDone(); //
rf12_sendStart(rf12_hdr, payload, payloadCount*sizeof(int));
rf12_sendWait(RF12_NORMAL_SENDWAIT); // gönderme tamamlandığında bekle
delay(1000); //
}

 Alıcı Taraf Kodu:

/*
RFM12B alıcı tarafında 4 adet payload adlı analog değeri serial 
monitorden göreceğiz.Hadi bakalım görelim
*/

#include <RF12.h>; 
#include <Ports.h>;
const byte network = 100; //evet verici tarafında söylediğimiz 100 değeri
const byte myNodeID = 2; //alıcı için node ID(1-30 arası olabilir)
const byte freq = RF12_433MHZ; 
void setup()
{
rf12_initialize(myNodeID,freq,network); 
Serial.begin(9600); //Serial iletişimi başladı
Serial.println("RFM12B Alıcı Hazır");
Serial.println(network,DEC); // network değerini göster bize (100)
Serial.println(myNodeID,DEC); // nodeID'yi de göster zahmet olmaz ise (1)
}
const int payloadCount = 3; 
void loop()
{
if (rf12_recvDone() &&a rf12_crc == 0 && (rf12_hdr &amp; RF12_HDR_CTL) == 0)
/* bunlarda ne demeyelim ve 
RF12.h dosyasına zahmet olmazsa bir göz atalım*/
{
int *payload = (int*)rf12_data; /* rf12 veri tamponunda 
int'lere  bir dizi olarak eriş*/
for( int i= 0; i < payloadCount; i++)
{
Serial.print(payload[i]);
Serial.print("Değerler");
}
Serial.println();
}
}

UYARI: Eğer RF12.h dosyasını indirip arduino lib içerisine atmazsanız “RF12_433MHZ was not declared in this scope “diye bir uyarı alırsınız. 

Evet kod kısmını da tamamladık .  Biz burada loop içerisinde payload isimli diziyi gönderiyoruz ve alıcı tarafından görüyoruz…

Bağlantıları hallettik peki ya anten?

3 farklı ISM [1]  bant frekansından; 915 Mhz için 78 mm, 868 Mhz için 82 mm ve 433 Mhz için 165 mm anten boyları kullanılabilir.  Eğer 3.3 voltluk Fio veya Arduino Pro kullanacaksanız dirençleri devreden çıkarın ve Arduino’nun 10, 11 ve 13’üncü pinleri ile RFM12B ilgili pinlerine bağlayın.

 

RFM12B bu kadar üstün  özelliğini saydık peki ya Fiyatı?

RFM12B gerçekten bu kadar özelliği olmasına rağmen ucuz bir modül. Yaklaşık 19TL ‘ye sizde bir RFM12B sahibi olabilirsiniz.

Sonuç

Yazı içerisinde dediğim gibi ileriki günlerde VCO konusu hakkında bir yazı yayınlayacağım.  Arduino Türkiye’de takipte kalın. Bazen gerçekten herkesin istediği bir konu bulmak zor oluyor. Eğer yazı altına yorum olarak istediğiniz konuları ve yazı hakkında görüşlerinizi yazarsanız iyi olur. Herkese iyi çalışmalar diliyorum. Sağlıkla ve Arduino ile kalın ….

 

[1] ISM: industrial, scientific and medical (ISM) radio bands

 

 

 Kaynaklar

[1] Jeelib, “Wireless Communication” ,2012, https://github.com/jcw/jeelib/blob/master/RF12.h

 

 

 

Devamını oku

Project Aslan, Arduino DUE Kullanan Bir Robot İşaret Dili Çevirmeni

Project Aslan, Arduino DUE Kullanan Bir Robot İşaret Dili Çevirmeni

Genellikle robotikleri endüstriyel veya araştırma alanlarına uygulandığı zaman görüyoruz, ancak günlük yaşamda da yardımcı olabilecekleri çok yol var: Örneğin, görme engelli insanlar için kişisel rehber görevi gören mutfak botu, engellilerin yemek yapmasına yardımcı olabilir. Veya – ve bu gerçek – işaret dili çevirmeni işlevi gören robot kolu. Sınıflarda, mahkemelerde ve evde, bu

Arduino Turkiye tarafından
Arduino DUE ile Yaşayabileceğiniz Sorunların Çözümleri

Arduino DUE ile Yaşayabileceğiniz Sorunların Çözümleri

Elinizden hatırı sayılır miktarda Arduino DUE geçtiyse (veya sadece şanssız gününüzdeyseniz), düzgün çalışmayan en az bir tane cihazla karşılaşma olasılığınız yüksek. Bunun için her zaman cihazı çöpe atmanız gerekmeyebilir. Birçok Arduino DUE sorununu çözmek için çeşitli yöntemler var. Diyelim ki Arduino DUE ile çalışmaya başlayacaksınız. Bunun için Arduino’yu açtınız

Arduino Turkiye tarafından
STM32 Mikro Denetleyiciler Arduino

STM32 Mikro Denetleyiciler Arduino Dünyasında Ne Anlama Geliyor?

Arduino ile tanışanlar genellikle uzun bir yolun başlangıcında oluyor. Çünkü Arduino dünyası vazgeçmesi zor maceralarla dolu. Arduino’yu tanıdıkça bu heyecanınız da artacak. Bu nedenle Arduino dünyasıyla sizi buluşturmak için biz de heyecan duyuyoruz. Çok ucuza elde edebileceğiniz Arduino kiti ve ihtiyaç duyacağınız diğer malzemeler uzun soluklu projeler için yeterli

Arduino Turkiye tarafından