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

Şekil-2

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

 

 

Yücel Çetin

İstanbul Üniversitesi Elektrik-Elektronik Mühendisliği'nde öğrenci, Arduino sevdalısı, python meraklısı bir canlı...

86 comments

  1. […] birlikte kullanarak kendi hava durumu istasyonunuzu oluşturabilirsiniz. Yücel Çetin’in Arduino RF Haberleşme yazısında anlattığı şekilde,ölçtüğünüz değerleri, RF ile farklı bir noktaya […]

  2. Modelleyen dedi ki:

    Merhaba,
    Bir soru ile başlar herşey ben de öyle yapacağım… Grafikerim ve hobi olarak bu iş soyut olarak eğlenceli fakat somutta yardım isterim ilgi gösterirseniz! Neden 2 arduino demekten alamıyorum kendimi. Arduino üzerindeki led’i yakmak gibi bir durum söz konusu ve 4 kanal 35 mhz. bir kumanda ile test de ettim. Tek bir arduino ile! Farklı kanallarda denedim ve her bir kanal sinyal gönderdiğinde çalışıyor yani arduino’daki led’i yakıyor. Bunu komut olarak kullanabilir, led yakabilir, veya başka bir pin’e komut verebilir miyim, bir örnek vermeniz mümkün mü? İlginiz için şimdiden teşekkürler, Kaloy gelsin…

  3. Yücel Çetin dedi ki:

    Tek bir Arduino’ya alıcı bağlayarak çalıştırdınız heralde kullandığınız alıcıyıda(frekans-model) yazabilir misiniz? Dediğin olayı 4 kanal demişsin 4 kanallı bir röle shield ve zigbee ile de yapabilirsin. sadece led yakmak veya motor çalıştırmak istiyorsan. Ya da ben bir yazı yazayım belki işine yarar.
    @Modelleyen bu konuyu http://forum.arduinoturkiye.com/ ‘da yazabilir misin? Oradan beraber bir cevap bulabiliriz.

  4. Hasan dedi ki:

    Rf modül ile seri iletişimi nasıl yapacağız, yani rf modül üzerinden 1 0 gibi değerler göndermek istesek ve bu şekilde kodunu bildiğimiz bir garaj kapısını açabilir miyiz ?

  5. Hasan dedi ki:

    Birşeyler buldum fakat pt2262 kodlaması gibi olmuyor osiloskopdan baktıgımızda bitler doğru fakat bi yanlışlık oluyor…

  6. […] önceden “Arduino ile RF Haberleşme” diye bir yazı paylaşmıştık. Şimdi de yine RF ile birşeyler yapmak için kablosuz ileşim sağlayan, düşük […]

  7. özgür urhan dedi ki:

    Merhabalar. Vermiş olduğunuz örnek devreyi kurduktan sonra ve arduino programını compile yapınca ”Required for DR3100” diye bir şey çıkıyor ve upload yapmıyor. Bunun ne anlama geldiğini anlatabilirmisiniz.
    Teşekkürler.

  8. Yücel Çetin dedi ki:

    Merhabalar Özgür Bey, Kodlarınıza eklediğiniz kütüphaneyi Arduino 1.0 ‘ a göre güncelleyerek, verici ve alıcı kodu içerisinde vw_setup(2000); satırından önce vw_set_ptt_inverted(true); satırını ekleyerek deneyebilir misiniz? İyi çalışmalar.

  9. özgür urhan dedi ki:

    İlgilendiğiniz için teşekkür ederim. Dediğinizi yaptım ve bu seferde;
    ‘vw_set_ptt_inverted’ was not declared in this scope diye bir hata mesajı geliyor. Nedeni ne olabilir?
    Teşekkürler.

  10. Yücel Çetin dedi ki:

    Merhabalar Özgür bey, kütüphane eklenmemiş gözüküyor. Kütüphanenin en güncel halini(1.9) yazıda verdiğimiz adresten indirerek arduino IDE sini kütüphaneyi attığını dosya içinde bulunan arduino ya tıklayarak açıp tekrar dener misiniz?(kısayoldan açmayın direk arduino 1.0 dosyası içerisindeki arduino.exe ye tıklayarak açın. kütüphaneyieklediyseniz orada Sketch>import library altında virtualwire’ı görebilmeniz gerekiyor ardından çalıştırın)
    İyi çalışmalar.

  11. Yücel Çetin dedi ki:

    Hasan bey bir “yanlışlık oluyor yazmışsınız” nerede yanlışlık oldugunu yazarsanız yardımcı olmaya çalışırız. İyi çalışmalar.

  12. Özgür urhan dedi ki:

    Yücel bey çok teşekkür ederim. Şimdi çalıştı.
    Saygılar.

  13. Hasan dedi ki:

    Yücel bey teşekkür ederim.
    Forumda konu açacağım bunun ile ilgili 🙂

  14. Yücel Çetin dedi ki:

    Özgür Bey iyi çalışmalar. Teşekkürler Hasan bey 🙂

  15. Berat MERAL dedi ki:

    Alıcı verici uygulamasını aynı arduino üzerinden yapmak mümkün mü?

  16. Hamza Erturan dedi ki:

    Bu örnek de Arduino Cookbook’tan çalıntı. Direk aynısını kopyalamışsınız.

  17. Yücel ÇETİN dedi ki:

    Merhabalar Hamza Erturan Bey, normalde referans aldığım yerleri yazıyorum sitede şu an bulunan kodlar virtualwire’ın standart alıcı verici kodlarıdır(VirtualWire), sadece basit bir örnek olsun başlangıç yapanların direk çalıştırabileceği bir kaynak olması amacı ile konulmuştur. Dediğiniz kaynağı diğer yazılarımda belirtmiştim burada yazmayı unutmuşum. Kendi yazdığımız projeleri sitede yazmaya gayret göstereceğiz. Yorumlarınız için tekrar teşekkürler. İyi çalışmalar.

  18. kk_32 dedi ki:

    Tek arduino uno ile bilgisayardan Usb-serial converter kullanarak nasıl haberleştirilebiliniyor acaba? Bilgisayarı verici diye düşünüp yapıp serial monitörle mi gönderecez öyleyse rf modüllerin data ucuna tx mi rx mi bağlamalıyım

  19. Yücel Çetin dedi ki:

    Merhaba kk_32, Arduino ile bilgisayarı direk haberleştirebiliyorsunuz Şu yazıdan da http://arduinoturkiye.com/arduino-ile-seri-iletisim-ve-serial-monitor-kullanimi/ bakabilirsiniz. Rf modülleri ne amaçla kullanacağınızı söylerseniz yardımcı olabiliriz. Ayrıca forum.arduinoturkiye.com adresinden de sorularınızı sorabilirsiniz. iyi çalışmalar.

    • kk_32 dedi ki:

      Kısaca rf kit için tek arduino ile bilgisayarı nasıl haberleştirebilirim ?
      Şimdiden Teşekkürler

  20. kk_32 dedi ki:

    Merhaba Yücel Hocam
    sanırım problemimi tam olarak anlatamadım
    Benim tek arduinu uno ve lcd ekranım var RF transmit ve receiver modüller almayı düşünmekteyim.
    azınızda usb-serial converter kullanarak arduino ile bilgisayarınızı haberleştirebilir demişsiniz.
    Amacım bilgisayardan yazdığım karakterleri USB serial kablo ile rf transmiteri bağlamak karşılığında RF receiver bağlı uno nun lcd sinde okumak.(bilgisayara bağlantısı olmadan)
    Bu şekilde haberleştirebilirmiyim?

    • Necati ER dedi ki:

      Ben bu yapmak istediğinizi daha önce denedim. Usb to tll dönüştürücü ile rf trasnmitteri bilgisayara bağlayıp Arduino’ya bağlı bir reveceiver ile verileri okumaya çalıştım , ama başarısız oldum. Yabancı forumların çoğunda bunun sebebinin çalışma hızları farkı olduğu söylenmiş. Arduino bilgisayar ile senkron sağlayamıyormuş. Teoride mümkün görünse de pratikte ayrıca bir hata ayıklayıcı entegre kullanmadan verileri okumak pek mümkün değil sonucuna vardım ben.

  21. Faruk dedi ki:

    Merhabalar Hocam ben bir robot yaptım ve bu robotta Arduino micro kullandım bu robotu rf modülle kontrol etmeye çalışıyorum aynı buradaki gibi bağlantıları yaptım fakat verici modül (arduino uno) veri gönderince arduino micro yani robot restart yapıyor lütfen yardım edin sırf bu proje için 2. arduino aldım

  22. Faruk dedi ki:

    Hocam o sorunu çözdüm fakat bu seferde ben robotta kullandığım arduino ile gelen verileri işleyemiyorum yani w karakteri geliyor fakat robot bundan sonra kafayı yiyor yani gelen karakteri değişkene aktarıyorum değişkende switch case yapısını kullanarak yapamıyorum lütfen yardım edin bu robotu bitirmeme 2 gün kaldı ve sadece 14 yaşındayım

  23. hakan dedi ki:

    Merhaba,

    Verici kısmında send(“hello”); gönderimi sağlıyoruz.
    Projemde sensörlerden gelen veri durumuna göre send fonksiyonunda veri göndermeye çalışıyorum. Buna bağlı olarak göndereceğim veriyi bir değişkende toplayıp send fonksiyonu içine yerleştiriyorum. Fakat veri türü hatası alıyorum. veri değişkenini hangi türde tanımlamam gerekiyor?

    char veri = “durum1” ;
    send(veri);

  24. Ömer Koman dedi ki:

    // transmitter.pde
    //
    // Simple example of how to use VirtualWire to transmit messages
    // Implements a simplex (one-way) transmitter with an TX-C1 module
    //
    // See VirtualWire.h for detailed API docs
    // Author: Mike McCauley (mikem@open.com.au)
    // Copyright (C) 2008 Mike McCauley
    // $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

    #include

    void setup()
    {
    Serial.begin(9600); // Debugging only
    Serial.println(“setup”);

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec
    }

    void loop()
    {
    const char *msg = “durum1”;

    digitalWrite(13, true); // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(13, false);
    delay(200);
    }
    ilgili sayfa: http://www.open.com.au/mikem/arduino/VirtualWire/
    lib: http://www.open.com.au/mikem/arduino/VirtualWire/VirtualWire-1.14.zip
    zipin içindeki transmitter örneği

  25. hakan dedi ki:

    Ömer Bey,

    Yazdığınız örneğide inceledim. Fakat burada da msg değişkeninin içine direk ?durum1? tanımını yapmamız gerekiyor. Bunu başka bir değişkene eşitleyemiyorum. Makalede bulunan ile aynı sonuç çıkıyor. Ben sensörden aldığım bilgiler doğrultusunda bir bilgi göndericem. Ve sensörlerin durumuna göre de iletilecek bilgi farklı olacak. Birden fazla sensörüm bulunuyor ve hepsinin durumlarına göre iletilecek bilgi farklılıklar içeriyor.

    Not: bir önceki sorumda eksik ilettiysem kusura bakmayın,

    void loop()
    {
    String sensorA = “A100”;
    String sensorB = “B500”;
    String mesaj = sensorA + sensorB;
    const char *msg = mesaj;
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx();
    delay(1000); //1sn bekle
    }

  26. Ömer Koman dedi ki:

    void loop()
    {
    String strData;
    char *msg;

    strData=”A100,”;
    strData=strData+”B500,”;
    strData=strData+”C1024″;

    strData.toCharArray(msg, strData.length()) ;

    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx();
    delay(1000); //1sn bekle

    }

  27. salim dedi ki:

    Ömer Bey merhaba burası yeri değil ama bir soru sormak istiyorum.Ben arduino kiti ile üzerinde PSOC1 çipi olan bir devreyi I2C ile haberleştirmek istiyorum. Arduino wire.h dosyasında slave_receiver klasörünü kullanmaya çalışıyorum.Psoc çipinde I2C programı yazılı fakat bunu arduino’ a ya nasıl uygularım bilmiyorum.Bana yardım edebilir misiniz?

  28. Ömer Koman dedi ki:

    psoc tarafında master mı olacaksınız slave mi? foruma yazarsanız daha fazla kişi yardım edebilir.

  29. metehamemlk dedi ki:

    merhaba

    Bende hakan beyin yorumdaki gibi birden fazla sensorden gelen veriyi aliciya gondermede sorun yasiyor yapmak istedigim proje ise iki ayri portdan okunan deger ile alici tarafinda iki farkli servo hareket ettirme , tek pot ve servoyo kontrol edebiliyor ama ikinci potu isin icine katinca takilip kaldim.
    yapmya calisitigim yolda vericiden gonderilen mesaj soyle

    xservo=120
    yservo =100
    xservo=58
    yservo=160
    .
    .

    bu kodu alicinin Serial.wirite(Serial.read()) kodu ile alicinin tx ine gonderiyorum ama burdan bu kodu servoya atiyamiyor denedigim yol
    Analog.wirite(10,xservo) ama olmuyor

  30. Ömer Koman dedi ki:

    iki cihaz arasında bir iletişim protokolu geliştirmen lazım. komutları yorumlayıp servoya gönderirsin…

  31. metehanemlk dedi ki:

    hocam dediginiz gibi bi iletisim protokulu gelistirerek servolari hareket ettirmeyi basardim devre proteusta hatasiz calisiyor ama gercekte rf alici verici kullanmadan datalari birbirine bagliyoyurm calismiyor fakat alici ile vericinin vcclerini birbirine bagliyinca calisiyor nedenini birturlu anlayamadim rf alici verici kullanarak denedim alicinin datasini birbirine bagliyinca servolar kafayi yiyor neden olabilir baglatilar dogru .

  32. Mustafa YILDIRIM dedi ki:

    İyi günler bilgisayar mühendiliği öğrencisiyim bir proje için araştırma yapıyorum.Bu devredeki menzil max 100 metre olduğu yazıyor.Bu veya buna benzer bir devre ile menzil “1 km” ye çıkarabilirmiyiz ve arduino ile bunu yapabilirmiyiz.Yardımcı olursanız sevinirim.

  33. Mustafa YILDIRIM dedi ki:

    Teşekkür ediyorum.

  34. Hakan ÖNEN dedi ki:

    Bilgisayar Mühendisliği öğrencisiyim proje olarak Arduino ile alış veriş sepeti uygulaması aldım. Arduino ile yeni başlıyorum önceden PİC16F877A kullandım.Projemde arduino ile rakamları nasıl okutabilirim ve bu okuttuklarımı sepetimde nasıl gösterebilirim.Bilgi verirseniz sevinirim.

  35. Ömer Koman dedi ki:

    ürünler için seri barkod okuyucu kullanabilirsin okuduğun barkod seripoorttan arduinoya gelir o kodu ve adeti fiyatı arduinoya bağlayacağın lcd de gösterebilirsin.

  36. Yıldız Çiçek dedi ki:

    Merhaba,
    Arduino’da çok yeniyim. Bir proje yapmaya çalışıyorum. http://www.elecfreaks.com/wiki/index.php?title=Color_Sensor_Module linkinden renk algılıyorum ve sonuçlar http://www.elecfreaks.com/1666.html linkindeki fotoğraftaki gibi oluyor. 4 numaralı okla gösterilen değerler RGB değerleri, benim bu değerleri göndermeyi deniyorum, bu örneği denedim ve ”hello” gönderdim ama benim renk algılama koduyla bu kodu nasıl birleştirebilirim, karşıda sonuç alamıyorum.

  37. mert dedi ki:

    Bu receiver modulünde neden 8 tane pin olduğu konusuna taktım. Acaba saklı yetenekleri mi var ortasındaki bobini döndürünce 315mhz algılamak gibi.

  38. Erkan dedi ki:

    Merhaba sayın site sahibi size bir sorum olucak verici ve alıcı çiftlerinden elimizde 5 takım oldugunu varsayar isek vericilerden bir adetini kullanarak 5 alıcıyı kontrol etme gibi bir şansımız varmıdır var ise nasıldır? şimdiden cevap için teşekkürler.

  39. Ömer Koman dedi ki:

    her modul dinlemede kalacak bir modul koordinator olacak. her modulun bır kimliği olacak protokol yazacaksın mesajların kimden kime gideceğini belirtirsen olur. prtokol örneği: hex olarak yazıyorum 55555500ffttxxccaaaaaaaaaa 55 ler ön işaret ve senkronizasyon 00:mesajbaşı ff:from adres tt:to adres xx: yollayacağın byte adeti 8-10 byte ı geçme, cc:komut, aaaaaa:lar verilerin. her modul kendine ait kımlığı okuduğunda cevabını verir yukarıdaki protokolde fftt parametrelerini ona göre değiştireceksin. havada herzaman aynı anda 2 tane modul haberleşecek gibi planlayacaksın. protoloku geliştirmek için tt: adresinden birini broadcast yaparsın o adresi okuyan moduller hepsi aynı anda bir şey yapar yada gerekli setup ve sistem saati gibi verileri atarsın. birde cdma denen coalition detection mutiple access algoritm koyarsın, çok zor değil o da, havayı dinlersin boş olduğu anda veriyi basarsın eğer 200ms içinde cevap vermezse hedefin random bir sure beklersin mesajını tekrar yollarsın hedef cevap verene kadar denersin. o arada olan boşlukta diğer moduller haberleşir filan. başta söylediğim koordinatöru kullanıp duzenli olarak diğer modullerin hatırını sorarsın sisteminde herzaman koordinator modul yetkili olur bır tek o konusur. kolay gelsin

  40. Emir dedi ki:

    ACİL BİR PROJEM VAR. ELİMDE udea RX34B2 ALICISI ve RX34B2S VERİCİ’Sİ VAR.
    ARDUINO NUN BİR UCUNA BAĞLANMIŞ OLAN BUTONA BASTIĞIMDA, ALICI ARDUINOSUNDAKİ 1 LED YANMASINI İSTİYORUM. ÇOK ACİL LÜTFEN YARDIM EDİN. DAHA ÖNCEDEN ARDUINO İLE ROBOT YAPTIM İLK DEFA RF İLE İŞ YAPIYORUM

  41. kayıhan dedi ki:

    merhaba abilerim ben üniversitesi ögrencisiyim ve 2 tane servoyu pot ile 180 er derece döndürdüm hocam şimdi benden rf alıcı verıcı modul ıle kontrol etmemı ıstıyor ve bunu beceremıyorum bır turlu yardımcı olabilirmisinz bu dersi vermem lazım son dersım ve 1 senem uzasın ıstemıyorum şimdiden teşekkür ederim

  42. mehmet dedi ki:

    plc ve arduino arasında nasıl haberleşme kurulur yardımcı olabilir misiniz?

    • Ömer Koman dedi ki:

      rs232 uzerınden serıal veya rs485 uzerınden modbus kullanılabılır sanırım ama plc nin de bir ıletişim protokolu vardır ozellikle rs485 te bu daha zor olur. ethernet networktende olabilir bazı modellerde fiziki bağlantı dışında veri katmanını da bilmenız gerekir. endustriyel işler planlamasız ve dokumantasyonsuz rastgele olmaz pek.

  43. Mehmet dedi ki:

    Ömer hocam rf haberleşmede değişken iletmek için hangi komutlar daha başarılı olur bi yardımcı olabilirmisiniz ben elimde bulunan ivme ölçer değerlerini karşı tarafa göndermek istiyorum şimdiden yardımlarınız için teşekkürler…

    #include
    #include
    #define ACC (0xA7>>1)
    #define A_TO_READ (6)
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    void initAcc() {

    writeTo(ACC, 0x2D, 1<<3);
    writeTo(ACC, 0x31, 0x0B);
    writeTo(ACC, 0x2C, 0x09);

    }
    void getAccelerometerData(int * result) {
    int regAddress = 0x32;
    byte buff[A_TO_READ];
    readFrom(ACC, regAddress, A_TO_READ, buff);
    result[0] = (((int)buff[1]) << 8) | buff[0];
    result[1] = (((int)buff[3])<< 8) | buff[2];
    result[2] = (((int)buff[5]) << 8) | buff[4];
    }
    void setup()
    {
    lcd.begin(16, 2);
    Wire.begin();
    initAcc();
    }
    void loop()
    {
    int hx,hy,hz;
    int acc[3];
    getAccelerometerData(acc);
    hx = acc[0];
    hy = acc[1];
    hz = acc[2];
    lcd.setCursor(0, 0);
    lcd.print("X=");
    lcd.print(hx);
    lcd.setCursor(8, 0);
    lcd.print("Y=");
    lcd.print(hy);
    lcd.setCursor(0, 1);
    lcd.print("Z=");
    lcd.print(hz);
    delay(500);
    }

    void writeTo(int DEVICE, byte address, byte val) {
    Wire.beginTransmission(DEVICE);
    Wire.write(address);
    Wire.write(val);
    Wire.endTransmission();
    }

    void readFrom(int DEVICE, byte address, int num, byte buff[]) {
    Wire.beginTransmission(DEVICE);
    Wire.write(address);
    Wire.endTransmission();

    Wire.beginTransmission(DEVICE);
    Wire.requestFrom(DEVICE, num);
    int i = 0;
    while(Wire.available())
    {
    buff[i] = Wire.read();
    i++;
    }
    Wire.endTransmission();
    }

    • Ömer Koman dedi ki:

      rften yolladığın değerleri string olarak çevirip başlarına xyz gibi tanımlayıcı koy alıcıda da aynı şekilde tanımlayıcıyı gördüğünde ilgili dönüşümü yapsın
      x:123,y:456:z:789 gibi bir veri şekli oluşturup atacaksın alıcıda da bunu komple okuyup çözmen lazım. koda bakmadım ne yaptığına ama

  44. Mehmet dedi ki:

    anladım ama senin yukarda yayınladığın kodlar işimi görürmü send üzerinden değişken tanımlaya bilirmiyim…. şimdiden teşekkürler

    • Ömer Koman dedi ki:

      değişken dediğin şey hafızada binary formatta tutulan bir şey bununu string dönüşümünü yapıp yollaman daha kolay kullanmanı sağlar binay yolladığın zaman bunu birebir karşı tarafın hafızada aynı formatta yazamazsın. diyelim diğer karşı cihaz uno değilde bir pc ve ya android cihaz oldu bunun hafizada nasıl formatlandığı konusunda hiç bir fikrimiz olamaz bu nedenle ya stringe dönüştür yada hepsini tek tek HEX string olarak dönüştürüp atacaksın.

  45. Mehmet dedi ki:

    Hocam ilgilendiğiniz için teşekkürler son olarak string dönüştürme hakkında döküman yada adres varmı öğrene bileceğim…

  46. tarkan dedi ki:

    merhabalar. konu için teşekkür ederim. benim de ilgimi çekti ama anlıyamadığım bu bağlantı için pin tanımlaması gerekmez mi? yani siz 11 ve 12 kullanmışsınız. yazılım da nerden bilicek 11 yada 12 pini kullanmasını gerektiğini. ben bayağı uğraştım ve yapamadım. pic ten sonra arduinoya yeni geçtim. en bilgisizlerin anlayacağı türden yazabilirmisiniz saygılar.

    • Ömer Koman dedi ki:

      yazının tamamını okuyup önerilen/kullanmanız gereken kütüphaneyi indirip içine baktığınızda virtualwire.cpp kodunun için bu pinlerin tanımlandığını görürsünüz. kütühane kullanımı böyle bir şey oluyor.

      • tarkan dedi ki:

        vw_setup(2000); //2sn?de bir çalıştırmak için
        virtualwire?ı başlatır. bu açıklama 2 sn bir çalıştırmak için mi yoksa data transfer
        hızı mı?. sonra kodu sormak için yazmıştım. siz kütüphane kullanımı demişsiniz. yardımcı olmak istemiyorsanız hiç cevap yazmasanız da olurdu. zahmet etmişsiniz. yine de sağolun

        • Ömer Koman dedi ki:

          yazıyı yazan arkadaş uzun süredir uğramıyor yerine ben cevap verdim bu kodu deneme fırsatım olmadı, yazının altında kodun alındığı kaynaklar belli türkçeleştirme dışında değişiklik yapmıyoruz çoğu zaman. sorunuzda pin11 ve pin12 yi nereden bileceğiz diye sormuştunuz bende üşenmeden girip kutuphanesine baktığımda bu pinlern standart olarak tanımlandığını gördüm ve belirttim. sonradan baktığım başka örneklerin bazılarında set_tx_pin kullanılmış bazılarında kullanılmamıştı, sizin vw_set_tx_pin(12) kullanmanız yerinde olmuş işe yarar. yazmayınca neden çalışmıyor bilemiyeceğim yazmak gerekliymiş demek. vw_setup(2000) demek yaklaşık data transfer hızı demek elinizdeki modül kaliteli ve destekliyorsa 4000 değerinide hem vericide hem alıcıda deneyebilirsiniz. şuradaki örneğide inceleyin hem rx hem tx pinlerini 12 olarak setup da işlenmiş ona dikkat edin yanlışlık olmasın http://www.instructables.com/id/RF-315433-MHz-Transmitter-receiver-Module-and-Ardu/?ALLSTEPS

  47. tarkan dedi ki:

    vericide bu kod eksik sanırım “vw_set_tx_pin(12);” ben böyle yapıp çalıştırdım. yalnız 1 kanal çalıştırabildim. 2,5,8 gibi değişik kanllada çalıştırmak için ne yapabilirim. saygılar.

  48. Mİthatcan dedi ki:

    Hocam benim rf ile olan projem vardı onların codlarını yazdım çalışıyor sistem ama haberleşme mesafesinde sıkıntı yaşıyorum bu anten boyutları ne olmalı 17 yazıyor 25 yazıyor 30 yazıyor bi sabit birşey yakalayamadım.

    Bord üzerindeyken antensiz haberleşiyordu iyi derce nezaman pcbye aktardım devreyi sıkıntılar yardımlarınız için şimdiden teşekkürler….

  49. mustafa coban dedi ki:

    kodları denedim gayet güzel çalışıyor.
    Buradan soru sorup işini halleden arkadaşlar adına konuyu açan yücel beye tüm sorulara cevap yazan ömer beye teşekkür ederim.

    ömer bey sitede var mı bilmiyorum ama yok ise değişkendönüştürme işlemleri hakkında bir yazı yazarsanız çok sevinirim.

    • Ömer Koman dedi ki:

      teşekkür ederiz faydalı olduysak ne mutlu bize. foruma bir konu açayım “istek yazıları” diye o zaman oradaki duruma göre sitedeki yazıları genişletelim hatırlatma için teşekkürler bi ara yazayım o zaman 🙂

  50. ahmet dedi ki:

    bu devreyi anten kullanmadan çalıştırabilir miyiz?

    • Ömer Koman dedi ki:

      pek belli olmasada anten de bir elektronik devre elemanıdır kullanılmazsa olmaz. antenin uzunluğu bile önemlidir daha uzun veya daha kısa olması herşeyi kötü yönde etkiler. antenin vericidan gelen rf sinyal ile titreşerek sonundaki devrenin bu titreşimi algılşamasını sağlar. anten uzun veya kısa olursa farklı bir rf sinyal frekansına denk geleceği için alıcı veya gönderici devrenin hatalı çalışmasına yada hiç çalışmamasına neden olur. ha diyeceksin cep telefonlarında anten yok bunu açıkla; aslında onların da içinde de bir anten var ve genelde ya pcb ye çiziliyor bu anten yada anten için hesaplanan uzunluk kadar bakır yol özel bir şekilde seramik üzerine sarmallanarak yine anten yapılmış oluyor. antenin upuzun olması şart değil gerekli uzunluk kadar kablonun 1-2cm çapta ve aralıklı olarak sarmal veya helezon şeklinde yapılması da olur ama performansı çok değişir denemeyle en uygun şekil elde edilit. ayrıca antenin elektrik veya toprak hattına tems edip kısa devre olmaması için plastik koruması da olması gerekir.

  51. baran dedi ki:

    Merhaba, Arduino Uno R3’e kod yüklerken avrdude: ser_open(): can’t open device “\\.\COM1” hatası alıyorum. Nasıl çözebilirim?

  52. Oğuzhan dedi ki:

    Öncelikle siteyi çok başarılı buldum ellerinize sağlık.
    Benim şu sorum olacak Hocam
    Arduino uno r3+wireless proto shield+Xbee modüllerini birbirine bağladım ve 9v batarya ile besliyorum. 2.Xbee modülüm ise Explorer dongle ile bilgisayarıma takılı.

    Kablosuz olarak Arduinodan gönderdiğim veriyi bilgisayarımda nasıl okuyabilirim?Seri haberleşmede arduinomu usb ile bağladığımda gönderdiğim verileri XCTU’da okuyabiliyorum fakat bunu kablosuz olarak beceremedim.
    Kütüphanemde ekstra bir kod yazılımı mı eklemem gerekiyor?
    Teşekkür ederim şimdiden.

    • Ömer Koman dedi ki:

      sitenin forum kısmından sorarsanız xbee ile uğraşanlar da var daha hızlı cevap alabilirsiniz. prejenizi yaparken nereden faydalandınız? orada bir yardımcı kod olabilir. xbee denince basit rf modulleride tanesi 70-90usd ye satılan xbee diye satıyorlar gerçek zbee ile diğer xbee urunlerın kullanımları çok farklı once bunu bır anlamamız lazım sonra çözümü de değişir tabi…

      • Oğuzhan dedi ki:

        Pekala hocam
        Projemi Tubitak bünyesinde bitirme ödevi olarak hazırlıyorum.
        Sensörden aldığım veriyi bilgisayarda MATLAB kullanarak grafiksel olarak algılamam gerekiyor.
        Çeşitli sayfalardan forumlardan arduino’nun sitesinden bu modülleri kullanmam gerektiğini düşündüm ki uygulamalar var fakat 2 adet uno r3 kullanılarak yapılmış.

        Dedığınız gıbı forumda yardımcı olacak arkadaşlar olabılır.

        Teşekkür ederım.

  53. mehmet dedi ki:

    MERHABA ARDUINO RFID MODULUNDEN ALDIĞIM CARD ID sini RF İLE NASIL DİĞER KARTTA GÖNDEREBİLİRİM. VirtualWire kütüphanesi kullanarak send deyip char karakterini gönderebiliyorum fakat kart ID sini gönderemiyorum. Kart IDsi byte array bunu nasıl gönderebilirim.

    Serial.print(F(“Card UID:”));
    dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
    Serial.println();
    Serial.print(F(“PICC type: “));
    byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
    Serial.println(mfrc522.PICC_GetTypeName(piccType));

  54. emre yusuf dedi ki:

    Merhaba; bende de iki tane arduino var uno ve mega.amacım unyu bilgisayara bağlamak megayı ise belli bir mesafe (50mt) uzağa götürmek ve ikisi arasında bilgi alışverişi sağlamak.unodan girdiğim verilerin megaya bağlı iki adet 16×2 lik lcd de görünmesini istiyorum.Modül olarak nrf24l01 modülünü aldım.Sizce doğru yolda mıyım?

    • Ömer Koman dedi ki:

      bence olur birde forumdan sor ama… uno da nrf çalışırda mega da değişiklik gerekirmi bilemedim bak.

  55. Bahadır dedi ki:

    VirtualWire.h:14:20: fatal error: wiring.h: No such file or directory
    #include
    ^
    compilation terminated.
    Derleme sırasında hata oluştu.

    Diye bir hata veriyor sanırsam wiring.h dosyası eksik bunu nereden bulabilirim

  56. Bahadır dedi ki:

    wiring.h: No such file or directory
    #include
    ^
    compilation terminated.
    Derleme sırasında hata oluştu.

    diye bir hata alıyorum

  57. Bahadır dedi ki:

    wiring.h: No such file or directory
    #include
    ^
    compilation terminated.
    Derleme sırasında hata oluştu.

    bunu nasıl çözebilirim

    • Ömer Koman dedi ki:

      kodun içinde turkçe (şçöığ) kullanmayın, buyuk harf küçük harf kullanımına dikkat edin. foruma gelin oradan sorun…

      • Mücahit dedi ki:

        üniversite final projem için acil yardıma ihtiyacım var mail üzerinden iletişime geçermisiniz ? Teşekkür ederim final projem rf haberleşme.

        • Ömer Koman dedi ki:

          özel hiç bir projeye destek veremiyoruz işlermiz yoğun. bir uno alın rf433 mhz rx ve tx modullerden alın sitedeki yazılara bakın foruma gelin yaptığınız programı koyun neyi halledemiyorsanız oradan sorun extrem bir şey değil istediğiniz yapan çok var google da tonla ornek var.

  58. ramazan dedi ki:

    VirtualWire.h ile servo.h ikisi birlikte hata veriyor nasıl çözebilirim yardımcı olur musunuz teşekkürler

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar