433 MHz verici/alıcı modül arası nasıl bağlantı kurulur? RC araba nasıl kontrol edilir?
  • Merhaba.

    Oğlum için bir RC araba yapmak istiyorum. Bütün iskelet hazır. Bir adet L298N motor sürücü ve bu sürücüye bağlı bir DC motor itiş sağlayacak.

    Direksiyonu da bir servo motor kullanarak çözdüm. Yazdığım kodları tek bir arduino üzerinde toplarsam çalışacağını düşünüyorum. Fakat burada elimdeki arduino'ya bağlı joystick'den okuduğu değerleri ileten 433mhz bir verici olacak.
    Araç üzerinde de motorlar, buzzer'ın bağlı olduğu bir arduino ve verileri almak üzere bir alıcı olacak.

    Birçok örnek inceledim VirtualWire.h kütüphanesi içeren. Azınlıkta da olsa RH_ASK.h kütüphanesi ile yapılmış örnekler de mevcut. RH_ASK.h'ın gönderiş ve alış biçimleri çok daha anlaşılır geldi bana. Çünkü neyi ne olarak gönderdiğiniz belli ve bunları da alıcı kısımda belirterek kullanabiliyorsunuz. Yani gönderilen x, y, z değişkenlerini alıcıda belirterek ne istiyorsanız onu yapıyorsunuz. Bu kütüphaneyi kullanamamamın tek nedeni Servo.h'daki bir değişken ile RH_ASK.h 'daki bir değişkenin çakışması. Windows'daki mavi ekran hatası gibi bir hata, önüne geçemiyorsunuz.

    O yüzden RH_ASK'dan vazgeçtim. ASK'ımız bitti :)

    Geldik VirtualWire.h kütüphanesini kullanmaya... Bu kütüphane ile servo çakışmıyor.
    (Düğmeye bas, karşı tarafta lamba yansın sönsün işini anlatılanları yaparak hallettim.)
    Bahsettiğim RC arabanın komutlarını göndermeyi ve almayı bilmiyorum. Çünkü gönderilen değişkenlerin oraya hangi isimle gittiklerini, orada nasıl yorumlanıp işleme konulduklarını bilmiyorum, anlayamadım. Yazdığım bunca yazı da bunu rahat açıklamak içindi. Yazdığım kodlardan bir kısım burada paylaşayım:

    Verici kısmında -ki RH_ASK için yazmıştım ama anlaşılır ne olduğu-

    //VERİCİ///////////
    uint8_t values[3];
    values[0]=(uint8_t) xDeger;
    values[1]=(uint8_t) yDeger;
    values[2]=(uint8_t) in1;
    values[3]=(uint8_t) in2;
    values[4]=(uint8_t) buzzer_durum;
    /////////////////////

    gördüğünüz üzere değişkenlerin ne oldukları belli. Şimdi de alıcı kısmından bir kısım paylaşayım:

    //ALICI////////////////
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
    c0 = buf[0];
    c1 = buf[1];
    c2 = buf[2];
    c3 = buf[3];
    c4 = buf[4];
    }

    while (c4 == 1) ///
    {
    buzzer_pin=HIGH;
    }

    servo.write(c0);
    digitalWrite(e1,c1);
    digitalWrite(in1,c2);
    digitalWrite(in2,c3);
    ////////////////////////

    ufak tefek hatalarım olabilir kodlarda ama demek istediğimi anlamışsınızdır.

    VirtualWire.h ile yukarıda anlattığıma benzer bilgilerin nasıl gönderilebildiğini, nasıl alınıp yorumlanacağını bilen bir arkadaş bizleri aydınlatabilir mi? Bunu anlayabilirsem, çok daha rahat hükmedebilirim.

    Çok teşekkür ederim şimdiden.
  • Anladığıma göre bu kütüphaneler kullanımı zor olan eski ASK rf modüllerini basitleştirmeye yarıyor doğru mu? Ama bunu yaparken kendileri ekstra bir karmaşıklık ekliyorlar.

    Onların yerine nrf24l01 kullansanız daha sağlam ve kolay bir bağlantı, ayrıca cihaza tam hakimiyet elde edersiniz. Ne gönderip ne aldığınızı tam olarak bilirsiniz.

    Ben kendi yaptığım arabada 3 byte'lık paketler ile iletişim kuruyorum. Hesaplamaları kumanda üzerinde hallederek arabaya pwm değerlerini gönderiyorum. Sağa sola döndürmek için 3. bir motora gerek yok.
  • 433 mhz moduller cok muhtelif en sıradan olanları genelde dusuk hızda kullanın yani 1200 baud gibi.
  • VirtualWire aşırı karmaşık. nrf24L01 almamıştım. Çekimi çok uzak demişlerdi ama eminim ki aldığım 433 mhz'den daha fazladır. Duvar arkası çekimi 5 metre anca vardır. Denedim. Anladığım kadarıyla bunu kullanan da bilen de yok. 433mhz sistemle kullanılabilen başka kütüphane var mı onu bilmiyorum. Paylaşan varsa sevinirim. Yoksa şayet daha basit projelerde kullanıcam artık ve farklı bir alıcı/verici modül kullanıcam.

    Teşekkür ederim.
  • @amenofis
    Nrf24l01 ın menzili ne kadar?
  • nrf için 100mt diyorlar ancak 10-ıle 30mt arasında çalıştıranlara rastladım.
  • Standart 433Mhz modüller ASK ( Genlik Kaydırmalı Anahtarlama ) metodunu kullanırlar,
    Alıcı tarafta gelen sinyalin genliğine bakarak bitleri okur, e haliyle mesafe arttıkça gürültünün araya girmesi sebebiyle genlik değişmemesi gerekirken değişir böylece yanlış bitler okunmaya başlar.
    Fakat FSK (Frekans Kaydırmalı Anahtarlama) metodunu kullanan modüller bitleri 2 farklı frekansta gönderir. Genlikten bağımsız olduğu için dataya gürültü binse dahi frekans değişmeyeceğinden uzaklara gidildikçe dahi verim alınır.
    Tavsiyem eğer mesafe önemli diyorsan,
    FSK modülasyonu kullanan modülleri incelemen. Udea diye bir yerli üreticide mevcut diye biliyorum.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.