Arduino RF Haberleşme
Öncelikle herkesin geçmiş Ramazan bayramını kutluyorum. Bayramdan önce aldığım 434 MHz rf alıcı-verici modülleri ile ilgili bir yazı ile karşınızdayım. Eğer ben ebay?dan alırım 1.95$ veririm bir kuruşta fazla vermem diyorsanız yurtdışından gelmesini 1 ay bekleyebilirsiniz. Fakat ben bunları her zaman aldığım genelde Türkiye?de toptan fiyatı düzeyinde satış yaptığını düşündüğüm bluemavi.com?dan aldım. Kabataştan tramvaya bindim, tophane durağında inerek bluemavi satış yerine gittim ve kendim teslim aldım. Aşağıda fiyat listesinden aşağı yukarı kendinize göre bir hesap yaparak karar verirsiniz.
Başlangıç olarak yapmak istediğimiz iki tane arduino arasında bu alıcı ve verici devrelerimizi kullanarak veri yolmamak. Kısaca RF dediğimiz radyo frekansı 3 Hz ile 30 GHz arası frekanslardır. Uzun mesafe haberleşmeleri için uygun değildir. 434 MHZ?lik alıcı-verici ile gerilim kaynağı, kullandığımız antene ve alıcı-verici arası engel olup olmadığına bağlı olarak yaklaşık 90-100 metre arasında haberleşebiliriz. Bağlantılar için genelde verici bilgileri modül üzerinde yazar fakat aldığınız vericinin datasheetine bakarak emin olabilirsiniz. Şekil-1 ?deki gibi bağlantıları gerçekleştirelim.
Şekil-1
Alıcı bağlantılarını Şekil-2 ?deki gibi yapalım. Benim aldığım alıcı PIN?leri şu şekildeydi. 1:GND 2:Digital output 3:Linear Out 4:VCC 5:VCC 6:GND 7:GND 8:Anten
Şimdi yazacağımız kod parçası vericiden gönderilen mesajı alıcıya gönderecek ve serial monitor üzerinden görüntüleyeceğiz. Kablosuz donanımımıza arayüzü sağlamak için VirtualWire kütüphanesini kullanacağız.
Kütüphaneyi http://www.open.com.au/mikem/arduino/VirtualWire-1.5.zip adresinden indirebilir veya http://www.open.com.au/mikem/arduino/VirtualWire.pdf adresinden inceleyebilirsiniz.
Verici Kodu
/*
Bu kod verici ile virtualwire kütüphanesini
kullanarak alıcıya mesaj göndermemizi sağlar.
*/
#include <VirtualWire.h> //kütüphanemizi ekledik.
void setup()
{
vw_set_tx_pin(12);// edit okoman: bu parametre programda yoktu sonradan eklendi
vw_setup(2000); //2sn?de bir çalıştırmak için (edit okoman: yaklaşık veri trahasfer hızıdır hatalı açıklama yapılmış) virtualwire?ı başlatır.
}
void loop()
{
send("hello");//göndereceğimiz mesaj
delay(1000); //1sn bekle
}
void send (char *message) /*mesajı ulaştırmak için
loop kodu send fonksiyonunu çağırır ve bu da mesajın ulaştırılması
için bekler.*/
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // mesaj gidene kadar bekle.
}
Alıcı Kodu
/*
Arduino?ya bağladığımız alıcıda görünen
vericiden gönderilmiş mesajı serial monitorde
görüntülemek için
*/
#include <VirtualWire.h> // Kütüphaneyi ekledik.
byte message[VW_MAX_MESSAGE_LEN]; // gelen mesajları tutmak için
byte msgLength = VW_MAX_MESSAGE_LEN; // mesaj boyutu
void setup()
{
Serial.begin(9600);
Serial.println("Ready"); //Serial Monitor?de gözükecek mesaj
vw_setup(2000); /*2sn?de bir çalıştırmak için (edit okoman: yaklaşık veri trahasfer hızıdır hatalı açıklama yapılmış)virtualwire?ı başlatır.*/
vw_rx_start(); // Alıcı başlat
}
void loop() {
if (vw_get_message(message, &msgLength)) /*mesaj hazır ise tamam ve mesaj serial monitorde gözükür*/
{ Serial.print("Got: ");
for (int i = 0; i < msgLength; i++){
Serial.write(message[i]);
}
Serial.println();
}
}
Sonuçlar
Arduino ile RF modülleri kullanarak güzel projeler yapabiliriz. Pahalı olan wireless modüllere bir alternatif olarak gösterilebilir. “Anne benim neden iki tane arduinom yok, bana neden bir tane daha arduino almıyorsun” diyenler varsa . Usb-serial converter kullanarak arduino ile bilgisayarınızı haberleştirebilir hatta sohbet ettirebilirsiniz. İki tane arduinom var ben zaten yastığımın altında arduino olmadan yatamam diyorsanız bir arduino’ya verici , diğerine alıcı ile bir lcd bağlarsınız millette görsün ne yapabiliyor bu arduino diye yaptıklarınız serial monitöre gömülü kalmasın : ) Herkese iyi çalışmalar diliyorum.
Kaynaklar
[1] http://www.open.com.au/mikem/arduino/VirtualWire/
[2] Micheal Margolis, “Arduino Cookbook” ,2nd ed, O’Reilly Media, Aralık 2011,425- 429



