Arduino İle Uzaktan Kontrol-(Servo Motor Kontrolü)

Bu yazımızda sizlere uzaktan kumanda ile servo motor kontrolünün nasıl yapılacağını elimden geldiğince anlatmaya çalışacağım. Tabi, esas amacımız iki Arduino arasında kablosuz haberleşmeyi sağlamaktır. Kablosuz haberleşme anlaşıldıktan sonra bu yöntem herhangi bir veri aktarımı için kullanılabilecektir. Biz burada birinci Arduino ile analog olarak okuduğumuz veriyi diğer Arduino’ya kablosuz olarak ileteceğiz ve bu veriyi servo motorun kontrolü için kullanacağız.

Eğer servo motorun kullanımı hakkında bilgi sahibi değilseniz veya daha önce Arduino ile kullanmadıysanız bu yazımızı okumanızı tavsiye ederiz. Kullanacağımız servo motor 0-180 derece arasında hareket eden açısal kontrolü yapılabilen bir motordur. Ve robotik sistemlerde yaygın olarak kullanılmaktadır.

Şimdi gelelim Kablosuz haberleşmeyi nasıl gerçekleştireceğimize, Arduino ile kullanımı oldukça kolay olan ve piyasada ortalama 5TL’ye rahatlıkla bulabileceğiniz Nordic Semiconductor firmasının üretmiş olduğu NRF24L01 modülü.

NRF24L01 modülü SPI seri haberleşme protokolünü kullanmaktadır. İki modül ise aralarında haberleşmeyi  2.4GHz frekansında gerçekleştirmektedir. Farklı frekans bandlarında olmak üzere 126 kanal üzerinden haberleşme gerçekleştirebilmektedir. NRF24L01 modülünün bir diğer önemli özelliği ise düşük güç tüketimidir. 3.3V ile çalışmaktadır. Antensiz versiyonu (yukarıda resimde görünmekte olan) kapalı alanda 250 metre, açık alanda 50 metre mesafesi bulunmaktadır. Ancak bu değerlere ben ulaşamadım. Hatta kapalı alanda 15 metre mesafeyi maksimum güç açarak anca görebildim. kullanacak olanlara dip not düşelim.

NRF24L01 modülünü kullanabilmek için ilk olarak yapmamız gereken iki husus bulunmaktadır. Bunlardan ilki SPI kütüphanesini programımıza eklemek. Bu kütüphane zaten Arduino IDE yüklendiğinde kütüphane klasöründe bulunmaktadır. Bu kütüphane dosyasını programımıza aşağıdaki gibi eklemeliyiz.

Bir diğer husus, NRF modülü ile ilgili olan kütüphane dosyasını indirmemiz ve C:\Program Files\Arduino\Library klasörünün içerisine kaydetmemiz. NRF24L01 kütüphanesi RF24-Master adı ile geçmektedir. Bu linkten indirebilirsiniz. İndirme işlemi ve ilgili klasöre kaydetme işleminden sonra Arduino IDE programımıza ekliyoruz.

Şimdi bağlantıların nasıl gerçekleştirileceğine geçelim. NRF24L01 modülün bağlantı pinleri aşağıda görüldüğü gibidir.

NRF24L01 Wireless Modul:

Modül pinlerinin alıcı ve verici için aynı olacak şekilde Arduino ile bağlantıları:

  1. Gnd——–Gnd
  2. Vcc———3.3V
  3. CE———-Arduino 9. pin
  4. CS———-Arduino 10. pin
  5. SCK——–Arduino 13. pin
  6. MOSI——Arduino 11. pin
  7. MISO——Arduino 12. pin
  8. IRQ——–Boş

Arduino verici ve alıcı devre bağlantı şemaları aşağıda görüldüğü gibidir.

Verici devre bağlantı şeması:

 

 

Alıcı devre bağlantı şeması:

Program yazım aşamaları:

Program yazılırken ilk olarak yukarıda da bahsedildiği gibi SPI ve RF24-Master kütüphane dosyalarının programa eklenmesi gerekmektedir.

#include <SPI.h>

#include <RF24.h>

Daha sonra ise alıcı ve verici modüllerin birbirlerini tanıyabilmeleri için verici adres bilgisi ile alıcı adres bilgilerini belirtmemiz gerekiyor ve bu bilgiler aynı olmalıdır. İki modül arasında bir şifre olarak düşünülebilir. Aynı zamanda modülün CNS ve CE pinlerinin Arduino üzerinde hangi pinlere bağlandığını belirtmemiz gerekmektedir. Aşağıda bu komut satırları gösterilmiştir.

 RF24 radio(9, 10); // CNS, CE

 const byte address_x[6] = “00001”;

Burada dikkat edilecek nokta RF24 ile radio adında da bir nesne tanımlanmış olduğudur(bu ismi değiştirebilirsiniz). Bu nesneyi daha sonra bütün NRF modülü haberleşme işlemlerinde kullanacağız.

NOT: Alıcı modül üzerinde de aynı şekilde aynı adres tanımlanmalıdır. Burada adress_x adında bir değişken tanımlanmıştır. Bu değişken aşağıda gösterilen fonksiyonda kullanılacaktır.

radio.openWritingPipe(address_x);

Setup() fonksiyonu içerisinde ise yapılacak tanımlamalar aşağıdaki gibidir.

Verici için:

Setup(){

  radio.begin(); //modülü başlatmak için hazırlar.

  radio.openWritingPipe(address_x); //verici adresi tanımlanır

  radio.setChannel(108); //modülün haberleşmek için kullanacağı kanal //seçilir. Bu aynı zamanda frekans bandını belirler. (108 = 2.4GHz)

radio.stopListening(); // verici olarak çalıştıracağımız için dinleme modunu kapatıyoruz. Dinleme modu program içerisinde kapatılıp açılabilir. Örneğin hem alıcı hem verici olarak kullanmak istediğinizde tercih edebilirsiniz.

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Alıcı için:

Alıcı da servo motor kontrolü yapılacağı için servo kütüphanesi eklenmelidir.

Setup(){

radio.begin();

radio.openReadingPipe(0, address_x); //alıcıda okuma için yine daha önce belirlediğimiz adres kullanılır. 0 ile belirtilen sayı, bir verici 6 farklı modülle haberleşebilir. Bu modüllerden hangisinin adresi olduğudur.  Tek modül kullanacaksanız 0 yazılır.

radio.setChannel(108);

radio.startListening(); // alıcı modülde veri gelip gelmediğini kontrol için dinleme modunun başlatılması gerekir. Dinleme yapmayıp veri gönderilecekse yani verici olarak çalıştırılacaksa stopListening() yazılır.

}

 Verici Programı:

 

Alıcı Programı:

 

NOTLAR:

***Analog olarak gönderilen veri 0 ile 1023 aralığındadır. Bu veri, alıcıdan okunduktan sonra 0 ile 180 aralığına map komutu ile dönüştürülür. Servo motor 0 ile 180 derece aralığında hareket edebildiğinden bu dönüşüm yapılmalıdır.

***NRF modülü 3.3V ile çalışmaktadır. Bu noktaya dikkat edilmelidir. Ayrıca NRF çalışması sırasında voltaj değişimlerini düzenlemek ve bu sebeple oluşabilecek bağlantı kopmalarının önüne geçmek için NRF modülün Vcc pini ile Gnd pini arasına 10uF’lık bir kondansatör bağlanabilir.

***Alıcı programında kullanılan radio.available() fonksiyonu, bağlantının eşleştiğini sorgulamaktadır. Eğer bağlantı sağlandıysa bu fonksiyon TRUE olmaktadır.

 

Yalçın ASLAN

Bir Cevap Yazın

%d blogcu bunu beğendi: