in

Arduino ile Nrf24l01 Kullanarak Potansiyometre ile Servo Kontrolü

Merhaba arkadaşlar arduino ile projelerde olabildiğince hızlı ilerlemeye çalışıyoruz… Bugün ki konumuz Arduino ile Nrf24l01 kullanarak potansiyometre ile servo motor kontrolü nasıl yapılır bunu öğreneceğiz 🙂

Bu Proje nerede nasıl işimize yarayacak diyen arkadaşlarım size sesleniyorum 🙂 Uzaktan kontrollü bir rc araç yada robot kol yapmak isterseniz bu proje tam size göre.. Tabi geliştirilmek koşuluyla. 🙂

Çalışma mantığı basit pottan aldığımız analog değerleri Nrf24l01 aracılığıyla servonun bağlı olduğu arduinoya göndererek direkt servo motora yazdırıyoruz.

Kısa bilgilendirmenin ardından isterseniz zaman kaybetmeden yazımıza geçelim 🙂

Her şeyden önce bir kaç malzeme lazım bunlar;

Malzeme Listesi

1- Herhangi bir Arduino Modeli 2 Adet

2- Nr24l01 Modül 2 Adet

3- Potansiyometre

4- Servo Motor

5- Breadboard ve Jumper Kablolar

Not: Tüm bu malzemeleri elektronik parça satan yerlerde bulabilirsiniz yada şu ve bu adreslerden internet üzerinden güvenle sipariş edebilirsiniz 

Ayrıca eğer zamanım bol diyorsanız Çin’den de Aliexpress vasıtasıyla getirtebilirsiniz. Daha uygun fiyata gelecektir. 🙂

Devre Şeması

Alt tarafta çizdiğimiz devre şemasına bakarak uygun arduino modeline göre devremizi breadboard’umuza kuralım.

Alıcı Devresi

Verici Devresi

Dikkat: Bütün bağlantıları yapıp arduino kodlarını da yükledikten sonra modüller arasında iletişim sağlanmaz ise her iki modülün de VCC ve GND pinleri arasına 10 uF değerinde kondansatör yerleştirerek tekrar deneyiniz.  Yada daha önceki yazımda anlattığım gibi adaptör alınız

Yazılım

Bu modülle çalışabilmek için bir kütüphaneye ihtiyaç duyuyoruz öncelikle kütüphanemizi aşağıdan indirip aşağıda belirtilen yoldaki klasöre rar dosyasından dan çıkarıp atın.

Rar Şifresi: donanimplus.com

Belgeler >  Arduino > libraries

Bu projede 2 farklı kod kullanacağız biri alıcı haliyle biride verici

Verici Kodu

//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TOLGASYTP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
// VERİCİ YAZILIMI
#include <SPI.h> // Kütüphaneleri Tanımlıyoruz
#include "RF24.h"
int data[1];
RF24 radio(9,10);//CE -> 9 CSN -> 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
int potpin = 0;
int Potdeger;
void setup(void){
 radio.begin();
 radio.openWritingPipe(pipe);
}
void loop(void){
 Potdeger = analogRead(potpin);
 Potdeger = map(Potdeger, 0, 1023, 0, 179);
 data[0] = Potdeger;
 radio.write(data, 1);
}

Kodu aşağıdan indirebilirsiniz 🙂

Alıcı Kodu

//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TOLGASYTP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
// AlICI YAZILIMI
#include <Servo.h>
 #include <SPI.h>
 #include "RF24.h"
 Servo ServoM;

RF24 radio(9,10);//CE -> 9 CSN -> 10
 const uint64_t pipe = 0xE8E8F0F0E1LL;
 int data[1];
 void setup()
 {
 ServoM.attach(8);
 radio.begin();
 radio.openReadingPipe(1,pipe);
 radio.startListening();
 }
 void loop()
 {
 if (radio.available()){
 bool done = false;
 while (!done){
 done = radio.read(data, 1);
 ServoM.write (data[0]);
  
 }
 }
 }

Kodu aşağıdan indirebilirsiniz 🙂

Bir yazının daha sonuna geldik umarım faydalı olmuştur arkadaşlar anlamadığınız yada kafanıza takılan yerler olursa lütfen yorumda yada kişisel sosyal medya hesaplarımdan ulaşmayı ihmal etmeyin.. Kolay Gelsin.. 🙂

Yorumlar (16)

Yorum Yap
  1. 3 Servoyu 3 potansiyometre ile ayrı ayrı kontrol etmek istiyorum bu yazılıma neler dahil etmeliyim çok önemli benim için

        • Fatih Bey o halde yapacağınız iş kolay şuan ki kod 1 data yollamak üzere tasarlanmış senin yapman gerekense bunu 3 e çıkarmak ve her bir dataya farklı değerler vermek bizim projemizde ben potdeger yazmıştım aynı şekilde seninde pot2deger gibi değişkenler eklemen gerekiyor yani bir nevi alıcı ve verici kodlarında kopyala ve yapıştır yapmak tabi bu arada bağladığınız potları ve servoların giriş çıkışlarını yapmak 🙂 Kısa bi örnek verecek olursak
          data[1]; bunu data[3]; yapmanız gerek kod yollama kısmına gelincede örnek bir kod atayım if(digitalRead(3)==LOW){
          data[0]=1;
          } mesela burada eğer 3. dijital pin Low ise data ya 1 verisini yolla yani bizim şuan ki kodumuz senin yapan gereken if(digitalRead(5)==LOW){
          data[0]=2;
          }
          if(digitalRead(7)==LOW){
          data[0]=3;
          }
          gibi kodlar ekleyerek farklı veriler yollaman alıcı kısmıda aynı eğer data 1 ise ledi yak diyorsa kodda senin kaçtane veri yollayacaksan o kadar if komutu eklemen gerek işte data 2 ise şunu yap yada data 3 ise bunu gibi gibi kodu tam yazmıyorum anlayıp sen çöz diye yazılımcılık böyle birşey biraz üzerinde durursan anlıyacağını düşünüyorum ama çözemezsende yine yardım ederim Fatih Bey şimdiden size kolay gelsin 😉

  2. //DONAIM PLUS ELEKTRONİK
    // MODİFİKASYON TOLGA SOYTEPE
    // İNSTAGRAM TOLGASYTP
    // TWİTTER TSytpp
    // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
    // 2019
    // VERİCİ YAZILIMI
    #include // Kütüphaneleri Tanımlıyoruz
    #include “RF24.h”
    int data[3];
    RF24 radio(9,10);//CE -> 9 CSN -> 10
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int pot1pin = 0;
    int pot2pin = 1;
    int pot3pin = 2;
    int Pot1deger;
    int Pot2deger;
    int Pot3deger;
    void setup(void){
    radio.begin();
    radio.openWritingPipe(pipe);
    }
    void loop(void){
    Pot1deger = analogRead(pot1pin);
    Pot1deger = map(Pot1deger, 0, 1023, 0, 179);
    data[0] = Pot1deger;
    radio.write(data, 1);
    {}
    {
    Pot2deger = analogRead(pot2pin);
    Pot2deger = map(Pot2deger, 0, 1023, 0, 179);
    data[0] = Pot2deger;
    radio.write(data, 2);
    {}
    }
    Pot3deger = analogRead(pot3pin);
    Pot3deger = map(Pot3deger, 0, 1023, 0, 179);
    data[0] = Pot3deger;
    radio.write(data, 3);
    {}
    }

    VERİCİ DEVRESİNİ BU ŞEKİLDE YAZDIM TOLGA BEY

    • Aynen mantık böyle baya güzel kod olmuş Fatih Bey ama bir takım hatalar var mesela servo kütüphanesinde eklememişsin ve radio.write(data, 1); bu koddaki “1” gönder anlamında yani radio.write(data, 2 ); olanda 1 yazılmalı aynı şekilde 3. de 🙂 pot pinlerini girerken 0,1,2 derken A0, A1, A2 derseniz arduino kodu daha iyi anlayacaktır 🙂 birde fazladan parantezler “{}” var onları da kaldırırsan kodu deneyebilirsin 😉

  3. //DONAIM PLUS ELEKTRONİK
    // MODİFİKASYON TOLGA SOYTEPE
    // İNSTAGRAM TOLGASYTP
    // TWİTTER TSytpp
    // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
    // 2019
    // VERİCİ YAZILIMI
    #include // Kütüphaneleri Tanımlıyoruz
    #include “RF24.h”
    int data[3];
    RF24 radio(9,10);//CE -> 9 CSN -> 10
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int pot1pin = 0;
    int pot2pin = 1;
    int pot3pin = 2;
    int Pot1deger;
    int Pot2deger;
    int Pot3deger;
    void setup(void){
    radio.begin();
    radio.openWritingPipe(pipe);
    }
    void loop(void){
    Pot1deger = analogRead(pot1pin);
    Pot1deger = map(Pot1deger, 0, 1023, 0, 179);
    data[0] = Pot1deger;
    radio.write(data, 1);
    {}
    {
    Pot2deger = analogRead(pot2pin);
    Pot2deger = map(Pot2deger, 0, 1023, 0, 179);
    data[0] = Pot2deger;
    radio.write(data, 2);
    {}
    }
    Pot3deger = analogRead(pot3pin);
    Pot3deger = map(Pot3deger, 0, 1023, 0, 179);
    data[0] = Pot3deger;
    radio.write(data, 3);
    {}
    }

    ALICIYIDA BU ŞEKİLDE YAZDIM TOLGA BEY

  4. //DONAIM PLUS ELEKTRONİK
    // MODİFİKASYON TOLGA SOYTEPE
    // İNSTAGRAM TOLGASYTP
    // TWİTTER TSytpp
    // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
    // 2019
    // AlICI YAZILIMI
    #include
    #include
    #include “RF24.h”
    Servo ServoM1,ServoM2,ServoM3 ;

    RF24 radio(9,10);//CE -> 9 CSN -> 10
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int data[3];
    void setup()
    {
    ServoM1.attach(8);
    ServoM2.attach(7);
    ServoM3.attach(6);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();
    }
    void loop()
    {
    if (radio.available()){
    bool done = false;
    while (!done){
    done = radio.read(data, 1);
    ServoM1.write (data[0]);
    {
    done = radio.read(data, 2);
    ServoM2.write (data[0]);
    {
    }
    done = radio.read(data, 3);
    ServoM3.write (data[0]);
    }
    }
    }
    }

    PARDON ALICIDA BU ŞEKİLDE ALICI İÇİME HİÇ SİNMEDİ YALNIZ 🙂

    • Merhaba Fatih Bey kodunuzu derledim ve eksiklerini giderdim şuanda test etme şansım yok fakat büyük ihtimalle çalışacaktır 🙂 Kodları anlayabileceğiniz şekilde türkçeleştirdim kodu anlamaya çalışın 😉
      //———————————-ALICI KODU—————————————————–//
      //DONAIM PLUS ELEKTRONİK
      // MODİFİKASYON TOLGA SOYTEPE
      // İNSTAGRAM TSYTPP
      // TWİTTER TSytpp
      // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
      // 2019
      //ALICII
      #include
      #include
      #include
      #include
      Servo servo1,servo2;
      RF24 radio(7, 8); // CSN, CE
      const byte address[6] = “00001”;
      int servo1_pin = 6;
      int servo2_pin = 5;
      int servo3_pin = 4;
      int led=2;
      struct Data {
      byte pot1data;
      byte pot2data;
      byte pot3data;
      byte butondata;
      };
      Data data;

      void setup() {
      Serial.begin(9600);
      radio.begin();
      radio.setAutoAck(false);

      servo1.attach (servo1_pin);
      servo2.attach (servo2_pin);
      servo2.attach (servo3_pin);
      radio.openReadingPipe(0, address);
      radio.setPALevel(RF24_PA_LOW);
      radio.startListening();
      }

      void loop() {
      while (radio.available()) {
      radio.read(&data, sizeof(Data));
      servo1.write (data.pot1data);
      servo2.write (data.pot2data);
      servo2.write (data.pot3data);
      if(data.butondata==0){
      digitalWrite(led, HIGH);
      }
      else{
      digitalWrite(led,LOW);
      }
      Serial.println(data.pot1data);
      Serial.println(data.pot2data);
      Serial.println(data.pot3data);
      Serial.println(data.butondata);
      delay(50);
      }
      }
      //—————————————-VERİCİ KODU————————————————//
      //DONAIM PLUS ELEKTRONİK
      // MODİFİKASYON TOLGA SOYTEPE
      // İNSTAGRAM TSYTPP
      // TWİTTER TSytpp
      // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
      // 2019
      //VERİCİ
      #include
      #include
      #include
      RF24 radio(7, 8); // CSN, CE
      const byte address[6] = “00001”;
      int pot1 = A0;
      int pot2 = A1;
      int pot3 = A2;
      int pot1deger;
      int pot2deger;
      int pot3deger;
      int buton=2;

      struct Data {
      byte pot1data;
      byte pot2data;
      byte pot3data;
      byte butondata;
      };
      Data data;

      void setup() {
      Serial.begin(9600);
      radio.begin();
      pinMode(buton,INPUT);
      radio.setAutoAck(false);
      radio.openWritingPipe(address);
      radio.setPALevel(RF24_PA_LOW);
      radio.stopListening();
      }

      void loop() {
      data.pot1data = map(analogRead(pot1),0,1023,0,179);
      data.pot2data = map(analogRead(pot2),0,1023,0,179);
      data.pot3data= map(analogRead(pot3),0,1023,0,179);
      data.butondata= digitalRead(buton);
      //———————-SERİAL MONİTÖRE YAZDIRMA————————–
      Serial.println(data.pot1data);
      Serial.println(data.pot2data);
      Serial.println(data.pot3data);
      Serial.println(butondata);
      //————————————————–
      radio.write(&data, sizeof(Data));
      delay(100);
      }

      Kolay Gelsin 😉

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir