433 MHz RF Modüller
RF modüller, radyo frekansı (RF) kullanarak, görüş hattı gerektirmeyen, uzun mesafelerde veri alış-verişi yapılabilen elektronik devrelerdir. Bir RF modülü: RF Vericisi (Tx) ve RF Alıcısı (Rx) olmak üzere iki bileşenden oluşur. Bu iki modül birlikte radyo dalgalarını kullanarak dijital veri gönderip alabilen bir iletişim sistemi oluştururlar. Bir RF modülü, genellikle 30 kHz ile 300 GHz arasında değişen Ultra Yüksek Frekans (UHF) radyo frekans spektrumunda çalışır. Konumuzda bahsi geçen RF modüller için en yaygın kullanılan frekanslardan biri, menzil ve güç verimliliği arasında iyi bir denge sunan 433 MHz'dir. 433 MHz frekansı, kısa menzilli cihazlar için ayrılmış radyo spektrumunun bir parçasıdır. Yani bunları kullanmak için özel bir lisansa ihtiyacınız yoktur. 433 MHz frekans bandı, uzaktan kumandalar, ev otomasyon sistemleri, kablosuz güvenlik sistemleri, araba alarm sistemleri, kablosuz sayaç okuma ve düşük güçlü kablosuz sensör ağları gibi çeşitli uygulamalar için popüler bir seçimdir. RF modüllerin etkili menzili; verici gücü, anten özellikleri ve çevre koşulları gibi çeşitli faktörlere bağlıdır. Bu modüller 20-100 metreye kadar mesafelerde veri iletebilir.
Bu RF sisteminde dijital veriler, analog radyo sinyali ile modüle edilerek gönderilir. Modülasyonda dijital veriler, taşıyıcı dalganın genliğindeki değişimlerle temsil edilir. Bu modülasyon türüne, Genlik Kaydırmalı Anahtarlama (ASK) yöntemi denir. RF alıcı-verici modüllerinde, bir verici yalnızca bilgi gönderebilir ve bir alıcı yalnızca veri alabilir. Yani veri bir uçtan diğerine gönderilebilir. Tersi mümkün değildir.
RF modülleri, bir RF Verici ve bir RF Alıcının oluşur. RF modüllerinde veri iletimi ve alımı seri olarak gerçekleşir. RF vericisi, seri verileri data pininden alır ve RF anteni aracılığıyla kablosuz olarak iletir. İletim 1 Kbps - 10 Kbps hızında gerçekleşir. RF alıcısı, gelen seri verileri alır ve data pininden dışarıya verir.
RF modüller orta düzey veri hızlarını destekleyebilirler. Yüksek hızlı veri iletimi için genellikle daha yüksek frekans bantları (örneğin 2,4 GHz veya 5 GHz) tercih edilir. 433 MHz RF kullanmanın bazı avantajları arasında, daha düşük frekanslara (örneğin 315 MHz) kıyasla daha uzun menzil, engellerden daha iyi nüfuz etme ve nispeten düşük güç tüketimi sayılabilir. Ayrıca, 433 MHz bandı genellikle yaygın olarak kullanılan 2,4 GHz bandından daha az kalabalık olduğundan olası paraziti azdır.
Bu RF modüller, NRF24L01 2.4 GHz Transceiver Modül gibi aynı ortamda farklı adreslerde birbirlerinin sinyalini bozmayacak şekilde yapılmamışlardır. Bu nedenle aynı ortamda birbirlerinin sinyaline etki etme durumları olabilir. Dolayısıyla garajın kapısını açarken komşunun garaj kapısını da açabilirsiniz.
433 MHz RF Verici ve Alıcı Modülünün Özellikleri
Alıcı (Rx):
Çalışma Frekansı: 433 MHz
Hassasiyet: -105 dBm'ye kadar
Akım Tüketimi: ~5,5 mA’dan az
Çalışma Voltajı: 5V
Düşük Güçte Çalışma
Verici (Tx):
Frekans Aralığı: 433,92 MHz
Besleme Voltajı: 3,5V – 12V
Çıkış Gücü: 4 dBm ila 12 dBm
Akım Tüketimi: 9 - 40 mA
Veri Hızı: 1 Kbps ila 10 Kbps
433 MHz RF Verici ve Alıcı Modülünün İç Yapısı-Devre Şeması

Dalga Boyu, Frekans ve Anten Boyu
λ = c / f
λ :dalga boyudur (metre cinsinden)
c :ışık hızıdır (yaklaşık 3 × 10^8 m/s)
f :frekanstır (Hertz cinsinden)
433MHz'de ise buna karşılık gelen dalga boyu yaklaşık 0,69 metredir.
Anten boyu = λ / 4
Genelde radyo frekans sinyallerinde kullanılan antenler dalga boyunun yarısı, ya da 1/4’ü uzunlukta kullanılıyor. 433MHz'de ise buna karşılık gelen anten boyu yaklaşık 17,3 cm’dir. Bu uzunluk fazla ise bunu bir kalem etrafına sarıp, helezon şekline de getirebilirsiniz. Fakat bu durum sargılar arasında bir indüktans oluşturur. Bu durum antenin empedansını değiştirerek iletim menzilinizi olumsuz etkileyebilir.
Üzerinde Kodlayıcı ve Kod Çözücü Çipi Bulunan RF Modüller
Bu RF modüllerin, PT2262 kodlayıcı ve PT2272 kod çözücü entegrelerin üzerinde bulunduğu modüller de piyasada yer almaktadır. PT2262’li 4 Kanal RF Verici Modülü, 4 km'ye kadar uzun mesafeli kablosuz haberleşme sağlayabilir. Verici üzerinde bulunan PT2262 çipi ile veriler kodlanır ve gönderilir. Alıcı üzerinde bulunan PT2272 çipi ile kod çözülür ve veriler alınır.
PT2262 ve PT2272 yerine HT12D ve HT12E entegreleri de kullanılabilir. HT12E, RF vericisi için verileri kodlamak, HT12D ise RF alıcısı tarafından alınan verileri çözmek için kullanılır.
433 MHz RF Modül Basit İletişim Örneği
Aşağıdaki şemada herhangi bir mikrodenetleyici ya da kodlayıcı entegre kullanmadan 433 MHz RF modülü yardımıyla, bir LED'i kablosuz olarak yakabileceğimiz basit bir devre yer almaktadır.

Bu örnekte RF modüller NRF24L01 gibi kararlı çalışmayabilir. Butondan elimizi çektiğimizde LED’in parlaklığının önce artıp sonra azaldığı ya da butona basmadan LED’in yandığı gibi durumlarla karşılaşmak mümkün. Bunu önlemek için vericide DATA pini boştayken, "anten" gibi davranıp parazit kapmaması için butona basılmadığı zaman 10K direnç ile GND’ye götürülmüştür. Alıcı tarafında ise, LED'in parazitlerden dolayı çok hızlı titremesini engellemek için DATA çıkışı ile GND arasına küçük bir elektrolitik kondansatör (örneğin 1µF veya 10µF) eklenmiştir. Bu modül Arduino ile daha kararlı çalışmaktadır.
433 MHz RF Verici ve Alıcı Modüllerinin Yapısı ve Çalışması
RF Transmitter(Verici - Tx) Yapısı

Data : Veri giriş pinidir. İletmek istenen dijital veriler seri olarak bu pine verilir.
Vcc : Modülün güç pinidir. 3,5 V ile 12 V arasında herhangi bir pozitif DC voltajını kullanabilirsiniz. RF çıkış gücünün doğrudan besleme voltajıyla ilişkili olduğunu unutmayın. Voltaj ne kadar yüksekse, iletim menzili de o kadar uzun olur.
Gnd : Modülün toprak pinidir.
Anten : Harici bir anten bağlamak için kullanılır. Optimum menzil ve performans için bu pine 17,3 cm uzunluğunda bir kablo bağlamanız önerilir.
Bu modülün kalbi, "Yüzey Akustik Dalgası" rezonatörü anlamına gelen bir SAW rezonatörüdür. Bu özel bileşen, 433.xx MHz'de çalışacak şekilde ayarlanmıştır. Bu modül ayrıca bir anahtarlama transistörü ve birlikte çalışan birkaç pasif bileşen içerir.
RF Receiver(Alıcı - Rx) Yapısı

Data : Veri çıkış pinidir. Vericiden alınan dijital verileri seri halde çıkış olarak verir. 2 adet data pini vardır. Her iki pin de dâhili olarak birbirine bağlıdır. Bu nedenle herhangi birini kullanabilirsiniz.
Vcc : Modülün güç pinidir. Vericinin aksine, alıcının düzgün çalışması için özel olarak 5V besleme voltajına ihtiyacı vardır.
Gnd : Modülün toprak pinidir.
Anten : Harici bir anten bağlamak için kullanılır. Optimum menzil ve performans için bu pine 17,3 cm uzunluğunda sağlam bir kablo bağlamanız önerilir.
Bu modül, 433 MHz aralığında istenmeyen sinyalleri engelleyen bir filtre devresi içerir. Ayrıca, modül üzerinde alınan radyo dalgalarının işlenmeden önce gücünü artıran birkaç amplifikatör (OP-Amp) yer alır. Yükseltme işleminden sonra sinyal bir PLL (Faz Kilitleme Döngüsü) devresinden geçer. Bu da gürültüye ve parazite karşı daha dirençli, daha temiz bir çıkış sinyaliyle sonuçlanır.
RF Modüllerin Veri İletim Metodu ASK(Amplitude Shift Keying - Genlik Kaydırma Anahtarlaması)
Bu modüller ASK(Genlik Kaydırma Anahtarlaması) adı verilen bir teknik kullanarak dijital verileri iletmektedirler. Bu, kablosuz olarak bilgi göndermek için hem basit hem de etkili bir dijital modülasyon türüdür. Gönderilen veriler, yalnızca vericiyle aynı frekansta çalışan RF alıcısı tarafından alınır.
Genlik Kaydırmalı Anahtarlamada, veri göndermek için yüksek frekanslı bir taşıyıcı dalga kullanılır. Bu taşıyıcı dalga, sabit frekanslı (kullandığımız RF modüllerde 433 MHz) sürekli bir sinüs dalgasıdır. Dijital bilgi göndermek için, dalga ikili verilerimizi temsil edecek şekilde değiştirilir.
İkili bir "1" göndermek istediğimizde, taşıyıcı dalga tam güçte iletilir. İkili bir "0" göndermek istediğimizde ise taşıyıcı dalga hiç iletilmez. Yani veri girişi sadece bir anahtar görevi yaparak 433 MHz’lik sinyalin gönderilip gönderilmeyeceğini belirler. Bu, bir el fenerini açıp kapatarak Mors alfabesi göndermenize benzer. Veriler, alıcıya seri olarak gönderilir. Aşağıdaki görsel, ikili verileri, taşıyıcı dalgayı ve ortaya çıkan ASK modülasyonlu dalgayı göstermektedir. Burada taşıyıcı dalganın genliği ikili '1'leri ve '0'ları temsil edecek şekilde değişmektedir.

Bu çizimde de görebileceğiniz gibi, sinyalin genliği, iletilen sinyalin '1' veya '0' olmasına bağlı olarak iki seviye arasında kaymaktadır.
Fakat taşıyıcı dalganın iletildiği-iletilmediği yani açık-kapalı durumlar arasındaki bu geçişin bazı dezavantajları da vardır. Amplifikatörler ve diğer bazı RF bileşenleri için bu durum streslidir. Taşıyıcı sinyaldeki hızlı yükselme ve düşme süreleri spektral yeniden büyüme gibi istenmeyen etkilere neden olabilir.
ASK’nın Diğer Kullanım Metodları
Yukarıda anlatılan metod ASK’nın en eski ve en kolay kullanım şeklidir. Taşıyıcı sinyalin genliğinin %100 ve %0 olduğu duruma göre verinin iletilmesi yöntemidir. Morse kodları da bu şekilde gönderilir.

Şu an bahsettiğimiz diğer yöntem ise, taşıyıcı genliğinin tamamen 0 olmadığı, iki veya daha fazla farklı seviyelerde olduğu yöntemdir. Buna NFC örnek olarak verilebilir. Yandaki resimde genliğin %100 ve %0’dan büyük olduğu durumla ilgili örnek bir görsel yer almaktadır.
Örnek: NFC(Near Field Communication)
Her iki ASK’yı da kullanan uygulama alanı, açılımı “Yakın Alan İletişimi” olan NFC’dir.

Bir diğer ASK yönteminde ise taşıyıcı genlik 4 farklı seviye alır. Her seviye iki biti temsil edebilir. Ancak bu yöntemin kullanımı oldukça nadirdir. Çünkü genlik sayısı arttıkça, gürültü, daha sık bit hatalarına neden olabilmektedir.

ASK'nın basit kablosuz cihazlar için popüler olmasını sağlayan avantajlarından biri, uygulaması inanılmaz derecede basittir. ASK sinyallerini oluşturmak veya algılamak için karmaşık donanımlara ihtiyacınız yoktur. Bu da bu modülleri birçok proje için uygun fiyatlı ve erişilebilir kılar. Bunun yanında, ASK, Frekans Kaydırma Anahtarlaması (FSK) gibi diğer bazı modülasyon tekniklerine kıyasla daha az bant genişliği kullanır.
Ancak; ASK'nin bazı sınırlamaları vardır. Yalnızca sinyal genliğindeki değişikliklere dayandığından, arka plan gürültüsünden veya diğer radyo cihazlarından kaynaklanan parazitlerden etkilenebilir ve bu da onu gürültülü ortamlarda daha az güvenilir hale getirir. Bir diğer sınırlama ise, sinyal gücü tutarlılığının korunmasından dolayı, özellikle uzun mesafelere veri gönderirken daha az güç verimliliğine sahip olmasıdır. Bu nedenle bu modüller, uzaktan kumandalar, hava durumu istasyonları veya basit ev otomasyonu gibi kısa menzilli uygulamalar için en iyi sonucu verir. Bu sınırlamalara rağmen, veri aktarım hızın düşük tutulursa, ASK çoğu ortamda güvenilir bir şekilde çalışabilir. Bu da onu, maliyet ve basitliğin yüksek hız veya olağanüstü menzilden daha önemli olduğu basit projeler için mükemmel kılar.
Arduino İle 433 MHz RF Verici ve Alıcı Modüllerinin Kullanımı
RF alıcı ve verici modüllerini kullanabilmek için iki adet kütüphane yer almaktadır:
RadioHead 1.143
VirtualWire 1.27
NOT: Uygulamalarımızda bu kütüphanelerden birini kullanırken diğerini Library klasöründen sildik.
RadioHead 1.143 Kütüphanesi;
Paketlenmiş mesajları göndermek ve almak için nesne yönelimli bir kütüphanedir. CRC (Döngüsel Artıklık Denetimi) adı verilen bir teknoloji kullanarak veri iletimindeki hataları tespit etmektedir. Verici tarafında, kütüphane, göndermek istediğiniz verileri alır ve bunları RadioHead Paketi olarak bilinen yapılandırılmış bir veri paketine paketler. Bu paket, sorunsuz iletişimi sağlamak için bir CRC sağlama toplamı, bir eğitim önsözü ve bir başlık içerir. Paket düzgün bir şekilde yapılandırıldıktan sonra, alıcı Arduino'ya kablosuz olarak iletilir.

Alıcı tarafta, RadioHead kütüphanesi gelen paketleri sürekli olarak dinler. Bir paket alındığında, kütüphane verilerin doğru bir şekilde ulaşıp ulaşmadığını doğrulamak için CRC kontrol toplamını yeniden hesaplar. CRC kontrolü başarılı olursa, alıcı, Arduino'ya yeni verilerin mevcut olduğunu bildirilir. Ancak, CRC kontrolü başarısız olursa, yani veriler iletim sırasında bozulmuşsa, bozuk verilerin kullanılmasını önlemek için paket otomatik olarak atılır.
RadioHead kütüphanesi içerisinde çeşitli alıcı-verici modüllerini kontrol etmek için birçok kütüphane(sürücü) yer almaktadır. Hangi alıcı-verici modülü kullanılacaksa onun kütüphanesi Arduino programına eklenmelidir. Örneğin; NRF24L01 2.4 GHz Alıcı Verici Modülünü kullanacaksak, <RH_NRF24.h> kütüphanesi, yukarıdaki resimlerde yer alan RF alıcı-verici modüllerini kullanacaksak, <RH_ASK.h> kütüphanesini programa eklemeliyiz. Bundan dolayı RadioHead Kütüphanesi neredeyse tüm RF modülleriyle uyumludur.
RadioHead Kütüphanesi 2 ana sınıftan oluşur: Sürücüler ve Yöneticiler.
Sürücüler; çeşitli paket radyolarına ve diğer paketlenmiş mesaj taşıyıcılarına düşük düzeyde erişim sağlar. Sürücüler, adreslenmemiş, güvenilmez (yani onaylanmamış), değişken uzunluktaki iletileri sağlar. <RH_NRF24.h>, <RH_ASK.h>, <RH_RF24.h>, <RH_STM32WLx.h> gibi.
Yöneticiler ise; adreslenmiş, güvenilir, değişken uzunluktaki mesajlar ve çeşitli gereksinimler için üst düzey mesaj gönderme ve alma olanakları sağlar. <RHReliableDatagram.h>, <RHRouter.h> gibi.
RadioHead kütüphanesi ile ilgili tüm detaylara linkten ulaşabilirsiniz: https://www.airspayce.com/mikem/arduino/RadioHead
Biz uygulamalarımızda 433 MHz RF modüllerini kullanacağımız için programa <RH_ASK.h> kütüphanesini ekleyeceğiz ve bu kütüphane içerisinde yer alan fonksiyonların açıklamasını yapacağız.
NOT: RH_ASK.h Kütüphanesi, Arduino Timer1'i kullanır. Bu durum 9 ve 10 numaralı dijital pinlerden PWM sinyali almayı etkiler.
433 MHz RF Modülleri RadioHead 🡪 <RH_ASK.h> Kütüphanesi Arduino Komutları
NOT: Fonksiyonlar içinde kullanılan veri tiplerinde; “uint8_t: 1 byte(8 bit) işaretsiz tam sayı” ve “uint16_t: 2 byte(16 bit) işaretsiz tam sayı” anlamına gelir.
1. RH_ASK rf_modul;
rf_modul adında bir ASK nesnesi oluşturur. Bu nesne, kablosuz olarak mesaj göndermek için ihtiyaç duyduğumuz tüm fonksiyonları sağlıyor. Bu nesne içerisinde varsayılan olarak tanımlanmış ayarlar aşağıdaki gibidir:
RH_ASK(uint16_t speed=2000, uint8_t rxPin=11, uint8_t txPin=12, uint8_t pttPin=10, bool pttInverted=false)
speed :İstenen bit hızı (saniye başına bit).
rxPin : RF alıcıdan veri almak için kullanılan Arduino pini.
txPin : RF vericiye veri göndermek için kullanılan Arduino pini.
pttPin :Verici etkinleştirme pinidir. Vericiyi etkinleştirmek için YÜKSEK olarak ayarlanacaktır (pttInverted true olmadığı sürece).
pttInverted :pttPin'in ters çevrilmesini ve böylece LOW'un vericiyi etkinleştirmesini istiyorsanız bu değer true olmalıdır.
Kütüphane, SPI seri iletişim yöntemini kullandığı için veri gönderme ve alma pinleri de varsayılan olarak SPI pinleri olarak belirlenmiştir. Bu nedenle kütüphanenin donanımla düzgün iletişim kurabilmesi için SPI Kütüphanesi de programa eklenmelidir.
2. rf_modul.init();
ASK nesnesini başlatır. RF iletişimin başlayabilmesi bu fonksiyon çalıştırılır. init() fonksiyonu vericimizin doğru şekilde çalışabilmesi için gerekli tüm ayarları yapar. Başlatma başarılı olursa true olarak geri döner.
3. rf_modul. send(const uint8_t *veri, uint8_t veri_uzunluk);
“veri” ve “veri_uzunluk” olmak üzere iki parametre gerektiren fonksiyonu kullanarak vericiye bir mesaj gönderir ve vericiyi başlatır. 0 mesaj uzunluğuna izin verilmediğini unutmayın.
veri : Gönderilecek veri dizisi
veri_uzunluk : Gönderilecek veri bayt sayısı (> 0)
send() Fonksiyonun Kullanımı:
const char *veri = "Hello World";
“veri” adında karakter türünde bir dizi tanımladık ve 11 karakterlik “Hello Word” yazdık. Bu dizinin 27 karakterden uzun olmamasına dikkat edilmelidir.
rf_modul.send((uint8_t *)veri, strlen(veri));
(uint8_t *)veri : “veri” değişkenin içeriğinin 1 bayt 1 bayt olarak RF verici tarafından gönderilmesini sağlar.
strlen(veri) : “veri” değişkeninin uzunluğunu döndürür.
4. rf_modul.recv(uint8_t *gelen, uint8_t *gelen_uzunluk);
Bu fonksiyon, beklentilerimizle eşleşen gelen bir mesajı bekler. Geçerli bir mesaj aldığında, bu mesajı tampon belleğimize(“gelen” değişkeni) kopyalar ve bir şey alındığını bize bildirmek için true değerini döndürür. Aksi takdirde false değerini döndürür. Hiçbir mesajı kaçırmamak için bu işlevi yeterince sık çağırdığınızdan emin olun. Ana döngünüzde çağırmanız önerilir.
recv() Fonksiyonun Kullanımı:
uint8_t gelen[11];
Gelen mesajımızı tutmak için öncelikle “gelen” adında tampon bir depolama alanı oluşturuyoruz. Boyutunu 11 bayt olarak ayarlıyoruz çünkü "Hello World"deki karakter sayısı (boşluklar dâhil) tam olarak bu kadar. Mesajınız farklı bir uzunluktaysa, bu sayıyı eşleşmesi için değiştirmeniz gerekecektir. Boşluklar ve noktalama işaretleri de dâhil olmak üzere her karakter önemlidir.
uint8_t gelen_uzunluk = sizeof(gelen);
Tampon belleğimiz olan “gelen” değişkeninin boyutunu tutan “gelen_uzunluk” adında bir değişken oluşturuyoruz. Bu değişken, alıcının ne kadar veri beklemesi gerektiğini bilmesi için kullanılacak.
rf_modul.recv(gelen, &gelen_uzunluk);
Bu fonksiyon, beklentilerimizle eşleşen gelen bir mesajı bekler. Geçerli bir mesaj aldığında, bu mesajı tampon belleğimize kopyalar ve bir şey alındığını bize bildirmek için true değerini döndürür. Aksi takdirde false değerini döndürür.
Serial.println((char*)gelen);
Tampon verilerimizi tekrar okunabilir metne dönüştürerek seri port ekranına yazdırır.
5. rf_modul.printBuffer("Gelen Veri HEX: "gelen, gelen_uzunluk);
Gelen verilerin hexedecimal değerlerini seri port ekranına yazdırır.
6. rf_modul.waitPacketSent();
Bu işlev, Arduino'nun programa devam etmeden önce tüm mesajın gönderilmesini beklemesini sağlar. Herhangi bir önceki iletim paketinin iletimi tamamlanana kadar bekler. Bu önemlidir. Çünkü iletimi yarıda kesmek istemeyiz.
7. rf_modul.available();
Bu fonksiyon yeni bir mesajın mevcut olup olmadığını kontrol eder. recv() fonksiyonu tarafından alınabilecek yeni, eksiksiz ve hatasız bir toplanmamış mesaj varsa true değerini döndürür. Döngü içerisinde birden çok kez çağrılabilir.
RF Modülleri ve Arduino Bağlantı Şeması (RadioHead 🡪 <RH_ASK.h> Kütüphanesi)

VirtualWire 1.27 Kütüphanesi
Adresleme, yeniden iletim veya onay olmadan, kablosuz UDP'ye benzer şekilde, ASK kullanarak kısa mesajlar gönderme özellikleri sağlayan bir Arduino kütüphanesidir. Adreslenmemiş ve güvenilmez mesajlar gönderilir. Birçok uygun fiyatlı radyo vericisi ve alıcısını destekler. VirtualWire, yukarıdaki resimlerde yer alan RF alıcı-verici modülleri ile de çalışır. Mesajlar; bir eğitim önsözü, mesaj uzunluğu ve sağlama toplamı ile gönderilir. Mesajlar, iyi bir DC dengesi için 4 ile 6 bit kodlama ve mesaj bütünlüğü için bir CRC(Döngüsel Artıklık Denetimi) sağlama toplamıyla gönderilir. Ayrıca, bir A/V göndericisinin ses kanalı gibi analog bağlantılar üzerinden kullanılabilir. Fakat bu kütüphane artık yerini RadioHead kütüphanesine bırakmıştır. VirtualWire'ın desteklediği tüm özellikler RadioHead tarafından da desteklenmektedir.
NOT: VirtualWire Kütüphanesi, Arduino Timer1'i kullanır. Bu durum 9 ve 10 numaralı dijital pinlerden PWM sinyali almayı etkiler.
433 MHz RF Modülleri VirtualWire.h Kütüphanesi Arduino Komutları
NOT: Fonksiyonlar içinde kullanılan veri tiplerinde; “uint8_t: 1 byte(8 bit) işaretsiz tam sayı” ve “uint16_t: 2 byte(16 bit) işaretsiz tam sayı” anlamına gelir.
VirtualWire.h kütüphanesi ile ilgili tüm detaylara linkten ulaşabilirsiniz: https://www.airspayce.com/mikem/arduino/VirtualWire
1. vw_set_tx_pin(uint8_t pin)
RF vericiye veri göndermek için kullanılacak Arduino pini belirlenir. Varsayılan olarak 12’dir.
Örnek: vw_set_tx_pin(12);
2. vw_set_rx_pin(uint8_t pin)
RF alıcıdan veri almak için kullanılacak Arduino pini belirlenir. Varsayılan olarak 11’dir.
Örnek: vw_set_tx_pin(11);
3. vw_set_ptt_pin(uint8_t pin)
Vericiyi etkinleştirmek için kullanılacak Arduino pin numarası belirlenir. Varsayılan olarak 10'dur. Vericiyi etkinleştirmek için YÜKSEK olarak ayarlanacaktır (inverted true olmadığı sürece).
Örnek: vw_set_ptt_pin(10);
4. vw_set_ptt_inverted(uint8_t inverted)
vw_set_ptt_pin ‘in ters çevrilmesini ve böylece LOW'un vericiyi etkinleştirmesini istiyorsanız bu değer true olmalıdır.
Örnek: vw_set_ptt_inverted(true);
5. vw_set_rx_inverted(uint8_t inverted)
Varsayılan olarak Rx pini veri gelmediğinde LOW, veri geldiğinde ise HIGH durumundadır. Fakat bazı A/V vericilerinde olduğu gibi, RF modül, sinyalin mantığını tersine çeviriyorsa bu değer true olmalıdır.
Örnek: vw_set_rx_inverted(true);
6. vw_setup(uint16_t speed)
Saniye başına bit hızını belirler. Veri alabilmek için, alıcı kodları içerinde, bu komuttan sonra vw_rx_start(); komutunu çağırmamız gerekir.
Örnek: vw_setup(2000); //hız: 2000 bit/sn
7. vw_rx_start();
Alıcıyı dinleyen Faz Kilit Döngüsünü(Phase Locked Loop) başlatır. Veri alabilmek için, alıcı kodları içerinde vw_setup(uint16_t speed) komutundan sonra çağrılmalıdır. Bir mesaj mevcut olduğunda (iyi bir sağlama toplamı olsun ya da olmasın), vw_have_message(); komutu true değerini döndürecektir.
8. uint8_t vw_send(uint8_t *veri, uint8_t veri_uzunluk)
“veri” ve “veri_uzunluk” olmak üzere iki parametre gerektiren fonksiyonu kullanarak vericiye bir mesaj gönderir. Mesaj, iletim için kabul edildiyse true, mesaj çok uzunsa false değerini döndürür.
vw_send() Fonksiyonun Kullanımı:
const char *veri = "hello";
vw_send((uint8_t *)veri, strlen(veri));
9. vw_get_message(uint8_t *gelen, uint8_t *gelen_uzunluk)
Eğer gelen bir mesaj varsa (sağlama toplamı iyi olsun ya da olmasın), mesajın “gelen_uzunluk” kadarını “gelen” değişkenine kopyalar. Bir mesaj varsa ve sağlama toplamı doğruysa fonksiyon true değerini döndürür.
vw_get_message() Fonksiyonunun Kullanımı
uint8_t gelen[VW_MAX_MESSAGE_LEN];
uint8_t gelen_uzunluk = VW_MAX_MESSAGE_LEN;
VW_MAX_MESSAGE_LEN makrosu ile gelen mesajdaki maksimum bayt sayısı belirlenir ve bu sayı ile “gelen” dizisinin boyutu belirlenmiş olur. RF alıcıdan alınan veriler bu “gelen” dizisine kaydedilecektir. Daha sonra gelen mesajdaki maksimum bayt sayısı “gelen_uzunluk” değişkenine atanır. Yukarıdaki komutlar, değişken isimleri(“gelen” ve “gelen_uzunluk” haricinde) aynen yazılır.
vw_get_message(gelen, &gelen_uzunluk);
Eğer gelen bir mesaj varsa (iyi bir sağlama toplamı olsun ya da olmasın), mesajın “gelen_uzunluk” kadarını “gelen” değişkenine kopyalar. Bir mesaj varsa ve sağlama toplamı doğruysa fonksiyon true değerini döndürür.
10. vw_wait_tx();
Bu işlev, Arduino'nun programa devam etmeden önce tüm mesajın gönderilmesini beklemesini sağlar. Herhangi bir önceki iletim paketinin iletimi tamamlanana kadar bekler. Bu önemlidir. Çünkü iletimi yarıda kesmek istemeyiz.
RF Modülleri ve Arduino Bağlantı Şeması (<VirtualWire.h> Kütüphanesi)

Bağlantı şeması üstteki şemayla aynıdır.
0 comments:
Yorum Gönder