Arduino Rc Plane

Home Cara Pembuatan Booster Receiver Privacy Policy

Receiver

Written on May 10, 2018

Rangkaian ELektronik untuk receiver ini lebih sederhana, pada dasarnya rangkaiannya sama dengan booster tanpa bluetooth.

Berikut ini skemanya

schematic nrf24l01

Selanjutnya kita tinggal menghubungkan ke servo dan motor. Receiver yang akan kita buat ini bisa terhubung dengan 6 servo

Daftar pin yang digunakan untuk servo dan motor

Servo/Motor Pin Arduino
THROTTLE D2
RUDDER D3
ELEVATOR D4
AILERON D5
L ELEVON D6
R ELEVON D7

Namun dalam pesawat jenis simple delta, hanya menggunakan 2 servo dan 1 untuk motor. Sehingga rangkaiannya menjadi seperti ini

Servo/Motor Pin Arduino
THROTTLE D2
L ELEVON D6
R ELEVON D7

Jika digambar, rangkaian kabelnya akan tampak seperti ini:

schematic nrf24l01

Arduino Sketch


#include <Servo.h> 
#include <nRF24L01.h>
#include <RF24.h> 

#define INDEX_THROTTLE 0
#define INDEX_RUDDER   1
#define INDEX_ELEVATOR 2
#define INDEX_AILERON  3
#define INDEX_LELEVON  4
#define INDEX_RELEVON  5

#define CHANNEL_COUNT 6 

const byte address[6] = "00001";
RF24 radio(10, 9); // CE, CSN ini pin remote 

Servo servos[CHANNEL_COUNT];
byte datareceive[CHANNEL_COUNT]; 

struct TimeWait
{
    unsigned long mytime=0;
    boolean waitUntil(unsigned long waittime,boolean autoreset)
    {
        unsigned long currenttime = millis();
        if((currenttime - mytime) > waittime)
        {
            if(autoreset)
            mytime = currenttime;
            return true;
        }
        return false; 
    }

    boolean waitUntil(unsigned long waittime)
    {
        return waitUntil(waittime,true);
    }
    void resetoTimeNow()
    {
        mytime = millis();
    }
};


TimeWait autodown;

void setup() {
  Serial.begin(9600);

  /**setup servo**/
  servos[INDEX_THROTTLE].attach(2,1000,2000);
  servos[INDEX_RUDDER].attach(3);
  servos[INDEX_ELEVATOR].attach(4);
  servos[INDEX_AILERON].attach(5);
  servos[INDEX_LELEVON].attach(6);
  servos[INDEX_RELEVON].attach(7); 

  
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS); 
  radio.setChannel(8);
  radio.startListening();

}
 

void sendDataToServo()
{
    for(int i=0;i<CHANNEL_COUNT;i++)
    {
        servos[i].write(datareceive[i]);
    }    
}

void loop() 
{
  if (radio.available())
  {  
     radio.read(datareceive, CHANNEL_COUNT);
     for(int i=0;i<CHANNEL_COUNT;i++){
              
              Serial.print(datareceive[i]); 
              Serial.print(" "); 
              
     }
     sendDataToServo();
     autodown.resetoTimeNow();
    Serial.println();
  }

   if(autodown.waitUntil(2000))
    {
      /*auto shutdown brushless motor when remote lose connected after 2000 miliseconds*/
      servos[INDEX_THROTTLE].write(0);
    } 
    
}

Back to Top