433mhz-rf-alici-verici-verici-modul-kapak

433 Mhz RF Alıcı-Verici MikroC Kütüphanesi

This post is also available in: English


 


Radyon Frekans Verici ve Alıcılar

  • Radyo frekans yani RF alıcı vericiler birçok alanda kullanılırlar. Radyolardan telsizlere uzaktan kumandalı araçlara kadar her alanda kullanılırlar.
  • Adından da anlaşılacağı üzere farklı frekanslarda çalışan tipleri mevcuttur ancak bir çok frekansın kullanımı ya tamamen yasaklanmıştır yada izne tabidir.
  • Bu frekansların içerisinde kullanımı serbest olan frekans 433 Mhz bandıdır. Dolayısı ile bu konuda 433 Mhz Alıcı ve Verici modüller üzerinden gideceğiz.
  • Temel çalışma mantığı olarak PIC ten vericiye giden veriyi verici alır modüle eder yani frekansını yükseltir ve böylece havadan gidebilecek hale getirerek yayınlar aynı şekilde alıcıda havada bulunan bu veriyi algılar ve demodüle ederek eski PIC in anlayabileceği şekle geri sokar aslında kablosuz iletişimin temeli bu şekildedir.
433mhz-rf-alici-verici-verici-modul
433 Mhz RF Verici Modülü

 

433mhz-rf-alici-verici-alici-modul
433 Mhz RF Alıcı Modülü

Modül Tipi

  • Aynı frekansta olsa dahi modüllerin farklı modülasyon ve demodülasyon tipleri bulunur.
  • Genel Olarak
    • ASK : Genlik kaydırmalı modülasyon
    • FSK : Frekans kaydırmalı modülasyon bulunur
  • Bunların ayrıntısına girmeye gerek görmüyorum dolayısı ile bunun dışında birçok çeşit alt modülasyon tipi mevcuttur.
  • Bizim kullanacağımız modül genel olarak piyasada bulunan ASK tipi modülasyon verici ve alıcısıdır.
433mhz-rf-alici-verici-moduller
433 Mhz RF Modül Çeşitler – Bazı elemanlar farklı olsada hepsi aynı şekilde çalışmaktadır.

Frekans ve Güç

  • Modülümüzün gücü 1 wattan düşük olduğunu tahmin ediyorum net bilgi yok bu da sağlık açısından bir sorun çıkarmayacağı anlamına gelir ayrıca bazı eklentiler ile güç arttırılabilir ancak bununda yasalarla sınırlandırıldığını unutmayın
  • 433 Mhz UHF sınıfına girdiğinden dolayı atmosferden yansımaz yani bu da ancak ufka kadar bir iletişim olanağı sağlar yani alıcı ve verici birbirini görmelidir.
  • Modül en fazla 2400 baud hızla çalıştırılabilir daha fazla hızlandırma hataları arttıracaktır.
  • 5-12 volt aralığında çalışabilir.

Anten

  • Ben aşağıdaki gibi 433Mhz için hazır yapılmış anten ve soketlerini kullanıyorum siz isterseniz 17,3 cm bir bakır telde takabilirsiniz.
433mhz-rf-alici-verici-anten
433 Mhz için hazır antenler ve sma konnektörler görülmektedir.
  • Hazır antenler için yine hazır satılan SMA konnektörleri kullanmalısınız. Bu parçalar frekans geçisi yaşandığından dolayı pirinçten imal edilmiştir. Bildiğiniz gibi pirinç statik elektrik ile yüklenmeyen özel bir malzemedir.
 433mhz-rf-alici-verici-sma-konnetktor

SMA konnektör. Orta bacağı bağlantı kısmıdır diğer bacaklar şaseye bağlıdır.

Sistem Tipi

  • Çalışmalarımızda 2 tip sistem şekli göreceğiz
    • Tek Yönlü Simpleks : Karşılıklı olarak 1 alıcı ve 1 vericiden oluşur bir geri bildirim yapmaz veri tek yönlü gider
    433mhz-rf-alici-verici-tek-yonlu-simpleks
    433mhz-rf-alici-verici-tek-yonlu-simpleks                                                                               “görsel Aydın Bodur Radyon Mühendisliği Notları e-kitabından alınmıştır”
    • Tam Dubleks : Karşılıklı olarak hem alıcı hem verici vardır geri bildirim yapar ve veri iki yönlü gider
433mhz-rf-alici-verici-tam-dubleks
433mhz-rf-alici-verici-tam-dubleks                                                                                                                 “görsel Aydın Bodur Radyon Mühendisliği Notları e-kitabından alınmıştır”

 

Genel Notlar ve Uyarılar

  • RF verici ve alıcılar çalışırken birbirlerine çok yakın durmamalılar bu kararsızlığa sebep olabilir
  • Full Dublex sistemlerde daima 1 verici aktif olmalıdır eğer 2 verici aynı anda açık olursa birbirlerini engelleyeceklerinden(jamer etkisi) iletişim sağlanamaz.
  • Prototip devrelerde dahi modüller mutlaka lehimlenmelidir.
  • Modüller olabildiğinde PIC e yakın takılmalıdır hatta EMI filtre uygulanabilir ( prototipte denenmedi)

Modül Pinleri Ve Görevleri

  • Aşağıda bacakları numaralandırılmış fotoğraflardan bakarak hangi pin numarasından bahsedildiğini anlamanız kolaylaşabilir

Alıcı Modül Pinleri

433mhz-rf-alici-verici-alici-modul-PIN
433 Mhz Alıcı Modül Pinleri
Pin Pin Adı Açıklama
1 DGND Dijital GND  Güç kaynağına bağlanır
2 DATA Dijital Data Çıkışı – PIC e bağlanır
3 NC
4 Vcc +5v Besleme
5 Vcc +5v Besleme- Boş bırakılır bağlantı yapılmaz
6 GND RF gnd – Asla devrenin toprağına bağlanmamalı
7 GND RF gnd – Asla devrenin toprağına bağlanmamalı
8 ANT Anten girişi
  •  Anten topraklaması ve diğer RF GND ler asla elektronik devrenin GND sine bağlanmamlıdır varsa imkan gerçek anlamda topraklanmalı imkan yok ise boş bırakılmalıdır.
  • Üretici notları gereği 4 numaralı Pin den besleme yapılıp 5 numaralı besleme bacağının boş bırakılması istenmiş.
  • Modüller asla soket ile kullanılmamalı mutlaka lehimlenmelidir yoksa çalışmalarda sorunlar yaşayabilirsiniz.

Verici Modül Pinleri

433mhz-rf-alici-verici-verici-modul-PIN
433mhz-rf-alici-verici-verici-modul-PIN
Pin Pin Adı Açıklama
1 ANT Anten bağlantısı yapılır
2 GND Devrenin GND sine bağlanır
3 DATA Data girişi buradan yapılır – PIC e bağlanır
4 Vcc +5-12 Volt besleme bağlanır
  • Yukarıda da belirttiğim gibi mutlaka modül lehimlenmelidir.
  • Besleme gerilimi bazı modüllerde değişebilir ancak genel olarak aynıdır. Voltajı arttırmak mesafeyi uzatırken doğruluğu azaltabilir bunlar kullanıcı amacı doğrultusunda tecrube edilip karar verilmelidir. Ben standart 5 volt ile besleyerek denemelerimi yaptım.

Devre Şeması

433mhz-rf-alici-verici-alici-modul-devre-semasi
433 Mhz RF Devre Şeması
  • Alıcı için Vcc ve DGND arasına EMI filtre konulabileceği belirtilmiş ayrıca Vcc ucuna bobin takılmış ancak bunları test etmedim
  • Resimdeki bacak numaraları ile Pin tablosu ters olmuş buna dikkat edin

Gerekli Malzemeler

  1. 433 Mhz Verici Modül
  2. 433 Mhz Alıcı Modül
  3. Delikli Pertinaks
  4. 433 Mhz Anten
  5. SMA konnektör

Devrenin Yapılışı

 433mhz-rf-alici-verici-devre1

Tam dubleks ünitenin görünümü alıcı ve vericinin ayrı antenleri bulunmaktadır
  • Yukarıda görüldüğü gibi ben tamdubleks sistemi de test ettiğim için aynı kartta hem alıcı hem verici var dolayısı ile herbirine ait ayrı anten bulunmaktadır.
  • Tek anten ile 2 modül kullanma yöntemi olan yarı dublekste mevcut ancak ben bunu denemediğim için bu konuda herhangi bir açıklama yapamıyorum
  • Buradaki alıcı ve verici birbiri ile değil diğer ( fotoğrafta sol yukarda durmaktadır) modül ile haberleşecektir yani karşılıklı bir veri akışı için yapıldı
  • Devre için fazladan birşeye gerek yok nihayetinde bu modüller sadece bir aracı
433mhz-rf-alici-verici-devre2
Tam dubleks ünitenin görünümü alıcı ve vericinin ayrı antenleri bulunmaktadır – Yan Görünüm
  • Modüller mutlaka lehimlenmelidir.
  • Deneme devresi olduğundan jumper kalbo ile PIC bağlantısı yapıldı ve bu çalışmalar sırasında sorunlar çıkarabildi çünkü aslında bu devre için hatalı birşeydir. Çünkü RF veya Kablosuz tüm sistemler bir parazit kaynağıdır ve PIC e yakın takılması gerekir kablo ile uzatmak , uzağa götürmek hatalıdır. Eğer anten uzakta olacaksa devrenin anten ucundan koalaksiyon anten kablosu ile uzatılmalı ucuna en son anten takılmalıdır.

433 Mhz RF Modül MikroC Kütüphanesi

  • Kütüphane özelliklerine değinecek olursam öncelikle bu modüllerin temel amacı olduğu gibi basit komutlar gönderip uzaktan kumanda sağlamaktır yani herhangi bir araca sisteme basit komutlar gönderip ışık aç kapa , sağa – sola dön gibi bunlar basit şekilde gerçekleştirilebilir
  • Diğer daha karmaşık amaç ise veri transferidir. Yani bu kütüphane ile teorik olarak tek seferde 255*8 bit yani 256 byte veri gönderilebilinir. Ben en fazla tek seferde 30 byte test ettim ancak bencede bu iyi bir değer
  • Veri gönderimde daha önce yazdığım CRC kütüphanesinden CRC7 yi kullandım böylece gönderilen veriler ulaştığında %99,9 doğru gitmiş demektir. Bunun yanında eşlik bitine vardır. Yani veri aktarımında doğruluğu sıkı tuttum bu tabiki zaman kaybı yaşatıyor ancak bunu basit komutlarda görmezden gelip veri aktarımında kullanabilirsiniz.
  • Aşağıda bazı örnekler hazırladım bunlar tamamen temel algoritmalardır her sisteme ve isteğe göre kendiniz tasarlayabilirsiniz. Hatta benimlede paylaşırsanız sevinirim. Temel fonksiyonlarımızı kullarak yeni algoritmalar yazabilirsiniz.
  • Veri aktarımı konusuna tekrar gelecek olursak mantığı esnek bir dizi sistemi ile kuruldu bu sebeple MikroC de Heap olarak 256 byte alan ayırmanız gerekiyor tabi bunu her zaman kullanmıyor sizin belirlediğiniz miktarda alan ayırıp bırakıyor. Diziye yüklenmiş verileri alıp crc kodunu oluşturup gönderiyor. 1-255 arası istediğiniz kadar dizi oluşturabilirsiniz.
  • RF Kütüphanesi daha önce yazdığım UART kütüphanesi üzerinde çalışmaktadır bu sebeple projenize UART kütüphanesini de dahil etmeniz gerekir
  • Aşağıdaki resimden MikroC de nasıl heap alanı ayırabileceğinizi görebilirsiniz. Project->Edit Project->Heap
433mhz-rf-alici-verici-verici-modul-heap-ayirma
MikroC Dinamik Bellek için Heap Alanı Ayırma

Fonksiyonlar

  • 3 adet kullanıcı fonksiyonu bulunmaktadır
  • Burada basit şekilde anlatılacak sonrasında örneklerde detaya inilecektir.

RF_433MHZ_ILETISIM_BASLAT Fonksiyonu

Fonksiyon : void RF_433MHZ_ILETISIM_BASLAT(unsigned char SENKRON_BIT_SAYISI)

Amacı : Veri gönderilmeden önce alıcıyı uyandıran ben senronize olmasını sağlayan karışık veri gönderir.

Parametreler:

  • SENKRON_BIT_SAYISI : Buraya girilen değer kadar döngü oluşturur.

Kullanım Şekli:

Geri Bildirim : Geri bildirimde bulunmaz

 

-RF_433MHZ_VERI_GONDER Fonksiyonu

Fonksiyon : void RF_433MHZ_VERI_GONDER(unsigned char *VERI,unsigned char DIZI_SAYISI,unsigned char CRC7_POLINOM,unsigned char ON_TANIMLAMA_KODU)

Amacı : Verileri alıcıya gönderir

Parametreler :

  • *VERI : Pointerdır bu bölüme göndermek istediğimiz dizinin adı yazılır
  • DIZI_SAYISI : Kaç adet dizi olduğunu burada belirtilir
  • CRC7_POLINOM : CRC kontrolü için kullanmak istediğimiz polinom buraya yazılır.Alıcı ve vericide aynı olması şarttır
  • ON_TANIMLAMA_KODU : Gönderilen verilerin karışmaması için 8 bitlik bir ön tanımlama kodu belirlenir alıcı ve vericide aynı olması şarttır.

Kullanım Şekli:

Geri Bildirim : Geri bildirimde bulunmaz.

 

-RF_433MHZ_VERI_AL Fonksiyonu

Fonksiyon : unsigned char RF_433MHZ_VERI_AL(unsigned char *VERI_HATASI,unsigned char DIZI_SAYISI,unsigned char CRC7_POLINOM,unsigned char ON_TANIMLAMA_KODU)

Amacı : Verici tarafından gönderilen verileri okur

Parametreler  :

  • *VERI_HATASI : Fonksiyon ilgili geri bildirimler return ile değil bayrak yöntemi ile yapar . Eğer bu parametre;
    • 1 ise eşlik biti hatası
    • 255 ise crc hatası var demektir
    • 0 ise veri doğru olarak alınmıştır.( vericiden alıcıya iletilmiştir.)
  • DIZI_SAYISI : Okunacak dizi sayısı belirtilir
  • CRC7_POLINOM : Gelen verileri çözümlemek için kulllanılacak crc polinomu
  • ON_TANIMLAMA_KODU : Gelen verilerin doğru veri olup olmadığı anlamak için ilk aşama

Kullanım Şekli :

Geri Bildirim :

  • Okunan veriyi fonksiyon geri döndürür.
  • Hata kontrolü ise *VERI_HATASI bayrağı okunarak kontrol edilir
    • 1 ise eşlik biti hatası
    • 255 ise crc hatası var demektir
    • 0 ise veri doğru olarak alınmıştır.( vericiden alıcıya iletilmiştir.)

Fonksiyonların Uygulanması

  • Örnekleri iki çeşit olarak göreceğiz
    1. Temel Komut Gönderimi yani uzaktan kumanda işlevi
    2. Veri aktarımı daha büyük boyutlu verilerin aktarılması

Temel Komut Gönderimi

  • Bu sistem ile bir aracı yada cihazı uzaktan basit 8 bitlik komutlar ile kontrol edebiliriz.
  • Genel olarak tek yönlü iletişim yeterli olur. “Tek Yönlü Simpleks
  • Örneği İnceleyelim

  • Do-While döngüsü ile alıcı heran bekleme konumundadır.
  • İlk olarak gelen verinin ön tanımlama koduna bakar “29” doğru ise CRC7 ile şifrelenmiş veriyi alır
  • CRC7 polinomu ile “0b10001001” veriyi çözümler sonuç 0 ise veriyi doğru gelmiş kabul eder
  • Ancak Koşulda görüldüğü gibi CRC yada eşlik biti kontrol edilmez çünkü bu basit bir komut gönderimi olduğundan sadece gelen komutun ne olduğuna bakılır buna göre “125” komutu geldimi döngü biter ve sonrasındaki işlem yapılır.

  • İlk olarak 8 bitte göndersek bunu bir diziye atıyoruz
  • Ardından “RF_433MHZ_ILETISIM_BASLAT(50)” ile 50 kez uyandırma ve senkronizasyon verisi gönderiyoruz bunun uzunluğu size kalmış istediğiniz gibi azaltabilirsiniz. Ancak uzun verilerde bu kadar uzun olabilir fakat 8 bitlik veri için 50 biraz fazla uzun gelebilir
  • RF_433MHZ_VERI_GONDER(erc,30,0b10001001,21);” fonksiyonu ile komutumuzu yolluyoruz
  • Dikkat edildiği üzere komutu 40 kez gönder dedik çünkü kablosuz iletişim asla kablolu iletişim gibi değildir bazı zamanlar bu değerler bile yetmez ve yeniden göndermek gerekir çünkü sinyaller havada bozulur ve senkronizasyon zorlaşabilir , bu sebeple garanti olması için olabildiğinde çok tekrar gönderilmesi gerekir.
  • Günlük hayatta olduğu gibi bir bağlantı yaptığımızda bir süre sonra bağlantı sağlamadı hatasının sebebi tamda budur belli sayıda komut yollanır ancak bir türlü senkroniazyon sağlanamadığında sistem bağlantıyı durdurma kararı alır yada tekrar yollar
  • Tek yönlü iletişim bu şekilde ancak bunların temel olduğunu unutmayın kendi projelerinize uygun algoritmaları deneyerek en iyi hale getirin.

Veri Aktarımı

  • Bu sistem ile büyük ölçekli veri aktarımını göreceğiz aslında komut gönderiminden pek farklı değil

  • Bu bölüm aslında temel olarak alıcı olarak geçer fakat sonunda görüleceği gibi geriye bir bildirim yapar yani veriyi gönderen yere veri göndererek verilerin doğru geldiği bilgisini yollar
  • Veri gelince do-while da görüldüğü gibi eşlik biti ve crc kontrolü yapılırken dizinin ilk elemanının adreside X değişkenine yüklenir
  • Ardından daha önce yazdığım GLCD kütüphanesini kullanarak bu veriler ekrana yazdırılır
  • Sonrasında Veri gönderen kaynağa veriler elimize ulaştı anlamında bir komut yollanır.
  • Böylece tam dubleks olarak işlem tamamlanır

  • Yukarıda görüldüğü gibi 30 elemanlı diziye veriler yüklenerek gönderilir
  • Burada döngü sayılarının uzun olması veri büyüklüğü ile alakalıdır
  • Veri gönderildikten sonra bu sistemdeki verici susar alıcı çalışır aynı şekilde karşı taraftada alıcı susar verici çalışır yani tam dubleks sisteminin gereği yerine getirilir
  • İstenen onay komutu gelince LED yakılır
  • Bu örnekten hareketle sistemi geliştirebilirsiniz örneğin belli süre sonra onay gelmezse verileri tekrar göndermek gibi yenilikler eklemek mümkündür bu yanlızca fikir vermesi açısından eklenmiştir.
433mhz-rf-alici-verici-verici-sonuc
433 Mhz RF alıcı verici tam dubleks sistemi ile 30 byte veri gönderimi ve onay kodu alımı
  • 30byte (30*8bit) veri gönderildi ardından onay gelince led yandı. Verilerin doğruluğunu kod sayfasından kontrol edebilirsiniz.

Çalışma Video


Sonuç

  • Kablosuz iletişim asla kablolu gibi düşünülmemelidir. Kablosuz iletişimde mutlaka veriler birden çok kez gönderilmelidir.
  • Yukarıdaki tam dubleks sadece basit bir örnektir. Aslında sistemin tam anlamı ile çalışması için önce veriler gönderilecek belli sayıda, sonra dinleyemeye geçecek eğer halen onay yoksa tekrar göndericek ve bu şekilde devam edecek , sizin belirlediğiniz döngü sayısına kadar bunun sonun da yine veri gelmez ise hata kodunu kullanıcıya gönderecek . Gercek anlamda bir iletişim sisteminin temeli bu mantıkla kurulmalıdır.
  • Videoda görüldüğü gibi veriler her zaman 3-4 sn de iletilmez bu videodao veriler elde edilmesi için 4 kez yeniden başlatıldı bu kablosuz sistemlerin doğal durumudur bu sebeple bir önceki maddedeki mantığı iyi kavrayarak bir sistem kurmalısınız.
  • Bu fonksiyonlar temel olarak yazılmıştır UART kütüphanesini yada RF kütüphanesini kullanıp daha iyi sistemler geliştirebilirsiniz. Eğer UART ile kendi sisteminizi kurmak istiyorsanız CRC7 yerine yine daha önce yazdığım CRC kütüphanesinden istediğiniz CRC fonksiyonunu sisteminize dahil edebilirsiniz.
  • Doğru bir iletişim sisteminde CRC nin vazgeçilmez olduğunu unutmayın. Tek bitlik eşlik sistemi veri güvenliği için özellikle kablosuz veri güvenliği için asla yeterli değildir. Çünkü normal şartlarda sadece alıcı modülü çalıştırır ve her gelen veriyi ekrana yansıtırsanız bir saniye birle durmaksınız çevreden bir çok karışık sinyalin parazitin geldiğini göreceksiniz bu durumda CRC olmaksızın doğru veri yollamak hayalden bile ötedir.
  • Sorularınızı “Soru-Cevap” Forumuna sorabilirsiniz.

Kütüphane Dosyaları


Yararlanılan Belgeler


 

ERCAN KOÇLAR Hakkında

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)