Arduino – 433 MHz RF Modül Kullanımı (Alıcı-Verici)

Bu yazımızda Arduino kullanarak RF alıcı-verici yapısı oluşturup veri aktarımını göstereceğiz. Bir çok Arduino proje veya uygulamasında kablosuz haberleşmeye ihtiyaç duyulmaktadır. 433 MHz RF modüller ise bu konuda oldukça ucuz ve basit yöntemler sunmaktadır. İnternetten çok kolay bir şekilde temin edebileceğiniz bu modüller boyut olarak da oldukça küçük. Bu modüllerin Arduino ile kullanılabilmesi için ise hazır bir kütüphane mevcut. VirtualWire kütüphanesi oldukça basit bir kullanımı olan ve bize aynı anda birden fazla veriyi gönderme imkanı sunan oldukça kullanışlı bir kütüphane. Kütüphaneye buradan ulaşabilirsiniz =>VirtualWire-1.27 <=

Kablosuz haberleşme için Bluetooth veya Wi-Fi bazen zahmetli veya masraflı olabiliyor. Örneğin basit bir RC hobi projesi için bu modülleri rahatlıkla kullanabilirsiniz. Bu yazımızda sizlere hem alıcı hem de verici yapılarını ve kodlarını göstereceğiz. Yazımızda uygulama olarak Arduino UNO üzerindeki 2 potansiyometre ile Arduino MEGA üzerindeki 2 adet led PWM sinyali verilerek kontrol edilmesi anlatılacaktır. Tabi öncelikle malzeme listesine göz atalım:

MALZEME LİSTESİ

  • 2 x Arduino(UNO veya MEGA olabilir. Verici için UNO alıcı için MEGA kullanıldı.)
  • 1 x 433 veya 333 MHz RF Alıcı
  • 1 x 433 veya 333 MHz Rf Verici (Alıcı ve verici frekansı aynı olmak zorundadır.)
  • 2 x Potansiyometre (Değeri 10k veya 22k olabilir.)
  • 2 x LED
  • 2 x 220Ω Direnç (LED iin kullanılacaktır keyfi seçebilirsiniz.)

Verici Yapısı ve Kodları (UNO)

Verici Modülün Özellikleri Şu Şekildedir:

  • 3V – 12V arası besleme yapılabilir. Gerilim arttıkça gücü de artacaktır.
  • 9mA – 40mA aralığında akım çeker.
  • Modülasyon tipi ASK’dır.
  • Maksimum 25mW güç tüketimi vardır.
  • Haberleşme hızı yazılımda sınırlandırılmış olup maksimum 4000 bps’dir. (4kbps)

Arduino bağlantısı ise şu şekilde olmalıdır:

  1. Verici VCC => Arduino 5V (Dışarıdan başka bir besleme ile 12V’a kadar verilebilir.)
  2. Verici GND=> Arduino GND
  3. Verici Data => Arduino Pin 11
  4. Potansiyometrelerin orta bacakları => Arduino Analog Pin 3 ve 4. Diğer bacakları => 5V ve GND

Bağlantıları yaptıktan sonra Arduino UNO kodlarına geçelim:

 

vw_send: Bu fonksiyon hazırlanan verinin gönderilmesi için kullanılır. “uint8_t” yani unsigned (işaretsiz-pozitif) ve 8 bitlik paketler halinde gönderilir. Fonksiyonun ikinci girdisi ise bu mesajın uzunluğunu belirler. “sizeof” kodu burada kullanılabilir.

Alıcı Yapısı ve Kodları (MEGA)

Alıcı modülün özellikleri şu şekildedir:

  • 5V ile çalışır.
  • Maksimum çekilen akım 5.5mA kadardır.
  • Modülasyon: ASK
  • Band Genişliği : 2 MHZ

Arduino MEGA bağlantıları şu şekilde olmalıdır:

  1. Alıcı VCC  => Arduino 5V
  2. Alıcı GND => Arduino GND
  3. Alıcı Data => Arduino Pin 8
  4. LED’ler (+)  => Pin 5 ve 6 (Herhangi bir PWM pini iş görür.)
  5. LED’ler(-) => 220Ω Direnç ile toprağa.

Alıcı kodları MEGA için şu şekildedir:

 

ANTEN TASARIMI

Anten tasarımı olarak çeyrek dalga anten kullanılabilir. Yani dalga boyunun çeyreği kadar uzunlukta bir bakır tel işinizi görecektir. 433 MHz için hesaplamalar şu şekildedir:

c = Λ . f

3×10^8= Λ x 433 x 10^6

Λ/4 = 17.3 cm bulunur.

Bu değere yakın uzunluktaki bir bakır teli alıcı ve verici için kullanırsanız daha başarılı sonuçlar elde edersiniz.

SONUÇ

Şunu unutmamak gerekir ki bu modüller ile çok hassas bir şekilde haberleşme gerçekleştirilemez. Yani çok önemli verilerin gönderildiği bir sistemde kullanılması uygun değildir. Fakat hobi anlamda bir çok uygulama için uygundur. VirtualWire kütüphanesi bazen başka kütüphanelerle çakışabilmektedir. Bu yüzden başka kütüphanelerle kullanırken dikkatli olunuz. Sistemi kurmadan önce mutlaka test ediniz. Performansı arttırmak için uygun bir anten tasarımı ve verici için 12V besleme kullanabilirsiniz. Umarız ki yazımız açıklayıcı olmuştur. Sorunuz olursa lütfen yorumlarda belirtin. İyi Eğlenceler!!!

RF Modülleri kullanarak RGB LED kontrolü yaptığımız projemize buradan ulaşabilirsiniz!

“Arduino – 433 MHz RF Modül Kullanımı (Alıcı-Verici)” Hakkında 21 Yorum

  1. verici programında 35. satırı payload.TX_ID = TX_ID2; yaptım
    6. satırı int TX_ID2 = 3; yaptım adresi burdan değiştiriyorum
    çalışıyor

    1. Tam olarak ne yaptığınızı veya ne yapmaya çalıştığınızı anlayamadım. Biraz daha açıklayıcı olursanız belki yardımcı olabilirim. Anladığım kadarıyla değişken atamasına değişiklik yapmışsınız. “A=B, B=3” ile “A=3” zaten aynı ifadelerdir. Araya fazladan değişken atamış oluyorsunz. Yanlış anladıysam lütfen düzeltin. 🙂

  2. Ben visual basic kodlarıyla aracımı hareket ettirmek istiyorum 433mhz rf modülü kullanmam lazım mı?

    1. Eğer bilgisayar ile Arduino arasında haberleşme sağlanacaksa bu COM porttan UART ile gerçekleştirilmelidir. Eğer sistemin kablosuz olmasını istiyorsanız bilgisayarla haberleştirdiğiniz Arduino ile başka bir arduino arasında RF modüller kullanabilirsiniz. RF ile gönderilecek veriler VB ile yazdığınız program tarafından seri porttan Arduino’ya gönderilerek bu gerçekleştirilebilir. Umarım yardımcı olabilmişimdir.

          1. Projede tam olarak ne yapmak istediğini belirtirseniz size daha iyi yardımcı olabilirim.

  3. Ben visual basic kodlariyla aracimi ileri saga sola ileri hareket ettirmek icin kod yazdim onu ayni zaman da bluetoothla hareket ettirmek istiyorum hangi malzemeleri almam gerekiyor?

    1. Mesafe olarak bir ölçüm yapılması mümkün değil fakat alıcı tarafında belirli bir süre veri gelmediği zaman bağlantı kopması olarak değerlendirebileceğiniz bir yapı kurabilirsiniz. Eğer verici tarafında istiyorsanız daha gelişmiş bir rf modül kullanmanızı tavsiye ederim. Yakın zamanda Arduino ile nRF24 rf modüllerinin nasıl kullanıldığını anlatacağız. Bu modüller sizin için daha faydalı olacaktır.

    2. aradaki gelen bağlantının kalitesinden bunu sağlayabilirsiniz. max -109 db geliyordu. Burda yola çıkarak buna ait bir değişken ile sağlayabilirsiniz. Fakat bu sadece açık alanda geçerli hale gelecektik. rf dalgaları yapılardan ve cisimlerden geçebilir fakat sinyal performansı azalır.

  4. HOCAM BEN 2 ARDUİNO , 4 TANE SERVO MOTOR , 2 TANE 3 V LUK MOTOR İLE RF KULLANARAK UÇAK YAPMAYI DÜŞÜNÜYORUM 20 GÜN SONRA SERGİM VAR , YARDIM EDER MİSİNİZ ?

  5. merhaba…
    kütüphanesi servo.h kütüphanesi ile çakışıyor. nasıl bir çözüm üretebiliriz???

    libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function ServoCount':

    (.text+0x0): multiple definition of __vector_11′

    libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin):(.text+0x0): first defined here

    collect2.exe: error: ld returned 1 exit status

    1. Merhabalar, virtualwire ve servo kütüphanesinin çakışması durumu bilinen bir durumdur. Maalesef çözümü hakkında bir fikrim yok.

  6. Merhaba , ben keypad ile step motoru kontrol etmek istiyorum. Kontrol için kodu yazdım ama bu kontrolü RF modül kullanarak yapmak istiyorum . Bu konuyla ilgili bana yardımcı olabilir misiniz?

    1. Merhabalar, keypad ile motor sürmek için kullandığınız komutları bir structure içerisinde veya dizi olarak rf ile motoru süren arduino’ya gönderebilirsiniz. Tam olarak nasıl kontrol ettiğinizi açıklarsanız daha iyi yardımcı olabilirim. İsterseniz instagram hesabımızdan mesaj da atabilirsiniz.

  7. Bu vericiden gönderdiğimiz mesajın ulaşıp ulaşmadığını verici üzerinden geri bildirim alabilceğimiz bir sistem yapabilir miyiz?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.