Çifti yaklaşık 5TL civarında olan iki modül kendi arasında haberleşebiliyor. Bu tek yönlü bir haberleşme ama. Yani biri verici diğeri alıcı olarak çalışıyor. Küçük boyutlarıyla  kapalı mekanlarda kullanılabilecek gibi görünüyor.

alıcı_verici_boyutlar

Yaklaşık 19mm x 19mm boyutlarıyla daha küçük olan verici modül üzerinde 433MHz lik kristal göze batıyor. Ayrıca bir bobin de göze çarpıyor. 3 bağlantı bacağı ile bağlantısının kolay olduğu belli. Bir veri bacağı dışındakiler zaten Vcc ve Gnd bacakları. 3.5 ile 12 volt arasında çalıştığı, gerilim arttıkça mesafenin de arttığı söyleniyor. Ama izlediğim videolar bunun doğru olmadığını, 5 volt seviyesinde en kararlı çalışmanın gerçekleştiğini söylüyor. 20- 100 metre mesafede veri yollayabildiği söyleniyor. Aslında bu modülün uzaktan kumandalarda sıkça kullanıldığını söylersek, zaten daha fazla menzile gerek yok. Neden mi? Çünkü nRF24L01’deki gibi aynı ortamda farklı adreslerde birbirlerinin sinyalini bozmayacak şekilde yapılmamışlar. Dolayısıyla garajın kapısını açarken komşunun garaj kapısını da açabilirsiniz. 433MHz de izin verilen frekanslar arasında. Bu modüllerin 315 MHz frekansında çalışanları da var. Alıcı modül ise yaklaşık 30mm x 14 mm boyutlarında ve daha çok devre elemanı içeriyor. Smd parçaların yanında LM358, ayarlı kondansatör ve bobin dikkat çekiyor. 5 voltluk bir gerilimle çalışıyor. .Bu modüllerin devresini de çıkartmışlar, ilgilenenlere.

Her iki modül üzerinde anten takılabilecek delikler mevcut. Anten derken tek damarlı bir kablo yeterli. Uzunluğu mu? Genelde radyo frekans sinyallerinde kullanılan antenler dalga boyunda, yarısı, ya da 1/4’ü uzunlukta kullanılıyor. Peki dalga boyu ne? Bir dalganın frekansı ile dalga boyunun çarpımı ışık hızını veriyor!

dalga_boyu

Yani yaklaşık 69 cm, 34.5 cm ya da 17.2 cm telleri bağlayabilirsiniz. Hatta çok uzun olur diyorsanız bunu bir kalem etrafına sarıp, helezon şekline de getirebilirsiniz. Dediğim gibi bu modülün çok uzak menzili olması gerekmiyor. Ben kısa mesafe olduğu için gerek duymadım. Çin’den bu RF modülün biraz daha gelişmişi ve üzerinde 4 kanal çıkış olan PT2262 ile kodlanan verici ile üzerinde PT2272 kod çözücü tarafından 4 çıkışı kontrol eden alıcı modelleri, piller de dahil 20TL civarında alınabiliyor. Benim aldığım tamamen aynı olup, sadece frekansı 315 MHz. Bu modüller de çok kullanışlı. Üzerinde 5 çıkış bulunuyor. 4 çıkışa da role bağlanarak kullanılabilir. 5.çıkış ortak, hangi çıkışı aktif ederseniz edin, o da aktif oluyor. Sadece bir LED bağlayıp sinyal aldığını kontrol için kullanılabilir.

315_hazır

 

433__anahtar_1

Şimdi nasıl çalıştığına bakalım: Öncelikle şunu söylemek lazım: Alıcı da da vericide de tek veri çıkışı var (Vericide iki pin var ama ikisi de aynı yere bağlı). Tek hat üzerinden haberleşme hemen ipucu veriyor. Seri iletişim! Dolayısıyla tek hat üzerinden veri alınıyor. Hem de nRF24L01’dekinden çok daha basit bir yöntemle. En basit haliyle; 433MHZ’lik kristal sürekli sinyal üretiyor. Ancak sadece veri girişinden ‘1’, ‘HIGH’, 5 volt verdiğiniz zaman bu sinyal çıkışa yönlendiriliyor. Yani veri girişi sadece bir anahtar görevi yapıyor. Bu sisteme ASK (Amplitude Shifting Keying)deniliyor. Bunun anlamı genlik kaydırma ile anahtarlama. Bu FM/AM radyolardaki AM gibi düşünülebilir. Yani çıkışta genlik var mı, yok mu ona bakılıyor! Frekansla işimiz yok. O zaten sabit 433 MHz. Yani bizim veri girişi 433MHz olarak alıcıya aktarılıyor. Bu kadar kolay(aslında üst üste bindirmeli, genliğin daha da arttığı durumlar da var. Ama bizi aşıyor!).

resonator-anahtar_2

deneme_seması

Bu kadar basit çalışan bir devreyi önce basit bir düzenekle test ettim. Her iki modüle de +5 volt ve Gnd hattları bağlandıktan sonra, verici modülün data girişine bir buton bağlayarak +5 volt hattına çektim. Alıcının çıkışını da bir dirençle LED’i sari bağlayıp GND hattına bağlayıp geçekten data girildiğinde iletim olup olmadığını kontrol ettim. Evet çalışıyor gibi. Ancak çok fazla parazit alıyor. Bazen butondan elinizi çektiğinizde LED’in parlaklığı önce artıyor, sonra sönüyordu. Bazen butona basmadan da LED yanıyordu. Elimdeki verici ve alıcıları bozuk olduğunu düşünüp yenisini sipariş ettim. Ama videoda görüyorsunuz, çık şey değişmedi. Allahtan kod ile birlikte Arduino ile daha kararlı çalışıyor. Ama nRF24L01 tamamıyla daha kararlı. Çok daha avantajlı.

Bu çalışmada ne yaptık. Artık LED yakmayalım diye LM 35 sıcaklık sensörü ile ölçtüğümüz değeri verici ile diğer Arduino’ya yolladık. Alıcıdan ölçtüğümüz değer de biraz daha havalı olsun diye 1602 LCD ekran kullandık. Her iki modül ile daha önce önce çalışmıştık.

Bağlantılar kolay; sadece data kabloları Arduino’nun dijital pinlerine bağlanıyor. Tek kablo seri iletişim demek. Ama bu nRF24L01 gibi değil! saat, MOSI, MISO yok! Sadece tek hat! Kod için şunu söyleyebilirim. Kütüphane eklenmesi gerekli. SPI kullanılabiliyor ki kütüphanesi zaten Arduino IDE üzerinde var. Bununla birlikte kullanılan diğer kütüphanelerden biri “Virtual Wire”. Bu SPI ile birlikte kullanılabiliyor. Bu kütüphaneyi indirmeniz ve Arduino’ya eklemeniz gerekiyor. Yine bu ve benzeri RF iletişimler için kullanılan daha gelişmiş bir kütüphane de “Radio Head“. Ben bu kütüphaneyi kullandım. Çünkü Türkçe kaynaklarda genelde “Virtual Wire” kullanılmış. Bu kütüphanenin kullanılması için vericinin veri girişi Arduino’nun12 numaralı bacağına, alıcının data girişi ise 11 numaralı bacağına yapılmalı. Değiştirmek kod içinde yapılabiliyor ama şu anda gerekmiyor. Dediğim gibi bu kütüphane oldukça gelişmiş ve çok sayıda modülün RF iletişimine destek veriyor. Bu girişten sonra kodlarımızı inceleyebiliriz. Önce verici modüle bakalım:

#include <RH_ASK.h> //Radio Head, Amplitude Shifting Keyin kütüphanesi
#include <SPI.h> // SPI kütüphanesi
#define tempPin A5 // LM35 data girişi A5

Öncelikle “RH_Ask” ve “SPI” kütüphanelerini ekledik. LM35 sıcaklık sensörünü 5 numaralı analog girişe bağladık.

float temp; // Sıcaklık değeri
String str_temp;

Şimdi “temp” zaten ölçtüğümüz, ve istediğimizde seri ekranda görebileceğimiz ondalıklı, santigrat derece cinsinden sıcaklık değeri. peki “String str_temp; ” ne işe yarıyor? Bu modül haberleşirken değerleri “string” olarak yapıyor. Hangi kütüphaneyi kullanırsanız kullanın fark etmiyor. Okunan değerler bir dizi karakter şekline dönüştürülmeli. Bu tanımlama onun için önemli.

RH_ASK rf_driver; ‘rf_driver’ isimli bir nesne oluşturuluyor. Bunu da sıkça gördük.

rf_driver.init(); Setup kısmında bu nesne başlatılıyor. (Belki çok önemli değil ama bu başlatma sırasında, parantez içine; veri hızı, verici bacağı, alıcı bacağı, ptt (press to talk) sanırım telsiz haberleşmesi için ‘bas konuş’) buton bacağı parametreleri girilebiliyor)

Loop içerisindeki ilgili bölüm:

str_temp = String(temp); 
static char *msg = str_temp.c_str();
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();

Ölçülen değer string’e dönüştürülüyor. Daha sonra değeri değişen (*) bir msg değişkeninin içine bu değer atanıyor. Sonra bu mesaj bir byte’lık paketler halinde ve genişliği de belirtilerek yollanıyor. (uint8_t: 8 bitlik unsigned integer). Sonra da bu gönderme işleminin tamamlanması bekleniyor.

Alıcı modülde de başlangıçta aynı kütüphaneler ekleniyor, rf_driver nesnesi oluşturuluyor. Setup’ta bu nesne başlatılıyor. Tamamen verici ile aynı. Loop’ta olanlar:

uint8_t buf[5];   Bir byte’lık bir tampon (buffer) değişkene kaç basamak veri geleceği tanımlanıyor. Burada ondalık nokta da sayılmalı. Ben 5 seçtim.
uint8_t buflen = sizeof(buf); Bu değer ‘buflen’ isimli tampondaki değerlerin uzunluğunu gösteren değişkene atanıyor. Unutmayın tüm veriler string (dizi) şeklinde.

if (rf_driver.recv(buf, &buflen))
{
str_temp = String((char*)buf);
}

Burada olan şey veri girişi yukarıda belirten uzunlukta başarı ile sağlandıysa, bu değeri ‘str_temp’ isimli değişkene at. (Bu değişken yine programın başında ‘string str_temp‘ olarak tanıtılmıştı.) Bu değişken artık yazdırılmaya hazır olan değeri taşıyan değişken. Program bu kadar. LCD ekran kütüphane çağrılması, nesne oluşturulup başlatılması, imleç ayarları gibi kısımlar daha önce anlatıldığı için o kısımlara hiç girilmedi. Kodların tamamına aşağıdan ulaşabilirsiniz.

Hoşça kalın…

 

Kodlar Alıcı/Verici

RadioHead: http://www.airspayce.com/mikem/arduino/RadioHead/

Virtual Wire :https://www.resistorpark.com/arduino-virtualwire-library-download/

Kaynak: https://lastminuteengineers.com/433mhz-rf-wireless-arduino-tutorial/

Kaynak: https://dronebotworkshop.com/433mhz-rf-modules-arduino/