Rádio controle de 4 canais com arduino para aeromodelos

Neste tutorial, vamos ensinar como criar um rádio controle de 4 canais utilizando Arduino, ideal para aeromodelos, drones, carros e barcos. Este projeto é acessível e de baixo custo, utilizando módulos NRF24L01 para comunicação sem fio.

Materiais Necessários

  • 2x Arduino Nano
  • 1x NRF24L01 + PA Wireless Module (Para o transmissor)
  • 1x NRF24L01 Wireless Module (Para o receptor)
  • 2x Arduino Joystick
  • 2x Capacitor de 100uF (16V ou superior)
  • 1x Placa PCB 13 x 6 cm (Transmissor)
  • 1x Placa PCB 5 x 3,5 cm (Receptor)

Esquema para construir o transmissor e o receptor com arduino

1. Montagem do Transmissor

O transmissor é o controlador manual que você vai utilizar para enviar comandos ao seu modelo.

  1. Conectando os Joysticks ao Arduino Nano:
    • Cada joystick possui 5 pinos: VCC, GND, VRx, VRy e SW.
    • Conecte VCC e GND de ambos os joysticks ao 5V e GND do Arduino Nano.
    • Conecte VRx e VRy dos joysticks às entradas A0, A1, A2 e A3 do Arduino.
    • Conecte os pinos SW (botão) aos pinos D2 e D3 do Arduino para funções adicionais (opcional).

  2. Instalação do Módulo NRF24L01 + PA:
    • Use o capacitor de 100uF para estabilizar a alimentação do NRF24L01 (conecte entre VCC e GND do módulo).
    • Ligue VCC ao 3.3V do Arduino e GND ao GND.
    • Conecte CE ao pino D9 e CSN ao D10 do Arduino.
    • Conecte SCK ao D13, MOSI ao D11 e MISO ao D12.

  3. Montagem na Placa PCB:
    • Fixe os componentes na placa PCB 13 x 6 cm para organizar e consolidar o transmissor.
    • Soldar as conexões pode ajudar a garantir uma boa estabilidade e evitar mau contato.

2. Montagem do Receptor

O receptor será instalado no veículo (aeromodelo, drone, carro ou barco) para receber os comandos do transmissor.

  1. Ligando o Módulo NRF24L01:
    • Assim como no transmissor, utilize um capacitor de 100uF entre VCC e GND do módulo NRF24L01.
    • Conecte VCC ao 3.3V e GND ao GND do Arduino Nano.
    • Ligue CE ao D9 e CSN ao D10 do Arduino.
    • Conecte SCK ao D13, MOSI ao D11 e MISO ao D12.

  2. Conexões de Saída para os Servomotores ou ESCs:
    • Utilize os pinos digitais D3, D5, D6 e D9 do Arduino Nano como saídas para controlar servos ou ESCs.
    • Cada canal controlará uma função específica (por exemplo, direção, aceleração, elevação ou guinada).

  3. Montagem na Placa PCB:
    • Fixe todos os componentes na PCB de 5 x 3,5 cm para manter o receptor compacto e organizado.

Programação dos Arduinos

Código do Transmissor

// 4 Channel Transmitter | 4 Kanal Verici

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

const uint64_t pipeOut = 0xE9E8F0F0E1LL;   //IMPORTANT: The same as in the receiver 0xE9E8F0F0E1LL | Bu adres alıcı ile aynı olmalı
RF24 radio(7, 8); // select CE,CSN pin | CE ve CSN pinlerin seçimi

struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
};

Signal data;

void ResetData() 
{
data.throttle = 127; // Motor Stop (254/2=127)| Motor Kapalı (Signal lost position | sinyal kesildiğindeki pozisyon)
data.pitch = 127; // Center | Merkez (Signal lost position | sinyal kesildiğindeki pozisyon)
data.roll = 127; // Center | merkez (Signal lost position | sinyal kesildiğindeki pozisyon)
data.yaw = 127; // Center | merkez (Signal lost position | sinyal kesildiğindeki pozisyon)
}

void setup()
{
//Start everything up

radio.begin();
radio.openWritingPipe(pipeOut);
radio.stopListening(); //start the radio comunication for Transmitter | Verici olarak sinyal iletişimi başlatılıyor
ResetData();
}

// Joystick center and its borders | Joystick merkez ve sınırları

int mapJoystickValues(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}

void loop()
{
// Control Stick Calibration | Kumanda Kol Kalibrasyonları
// Setting may be required for the correct values of the control levers. | Kolların doğru değerleri için ayar gerekebilir.

data.throttle = mapJoystickValues( analogRead(A0), 524, 524, 1015, true );
data.roll = mapJoystickValues( analogRead(A1), 12, 524, 1020, true );      // "true" or "false" for servo direction | "true" veya "false" servo yönünü belirler
data.pitch = mapJoystickValues( analogRead(A2), 12, 524, 1020, true );     // "true" or "false" for servo direction | "true" veya "false" servo yönünü belirler
data.yaw = mapJoystickValues( analogRead(A3), 12, 524, 1020, true );       // "true" or "false" for servo direction | "true" veya "false" servo yönünü belirler

radio.write(&data, sizeof(Signal));
}

Código do Receptor:

//  4 Channel Receiver | 4 Kanal Alıcı
//  PWM output on pins D2, D3, D4, D5 (Çıkış pinleri)

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

int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;

Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;

struct Signal {
byte throttle;      
byte pitch;
byte roll;
byte yaw;
};

Signal data;

const uint64_t pipeIn = 0xE9E8F0F0E1LL;
RF24 radio(7, 8); 

void ResetData()
{
// Define the inicial value of each data input. | Veri girişlerinin başlangıç değerleri
// The middle position for Potenciometers. (254/2=127) | Potansiyometreler için orta konum
data.throttle = 127; // Motor Stop | Motor Kapalı
data.pitch = 127;  // Center | Merkez
data.roll = 127;   // Center | Merkez
data.yaw = 127;   // Center | Merkez
}

void setup()
{
  //Set the pins for each PWM signal | Her bir PWM sinyal için pinler belirleniyor.
  ch1.attach(2);
  ch2.attach(3);
  ch3.attach(4);
  ch4.attach(5);

  //Configure the NRF24 module
  ResetData();
  radio.begin();
  radio.openReadingPipe(1,pipeIn);
  
  radio.startListening(); //start the radio comunication for receiver | Alıcı olarak sinyal iletişimi başlatılıyor
}

unsigned long lastRecvTime = 0;

void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis();   // receive the data | data alınıyor
}
}

void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
ResetData(); // Signal lost.. Reset data | Sinyal kayıpsa data resetleniyor
}

ch_width_1 = map(data.throttle, 0, 255, 1000, 2000);     // pin D2 (PWM signal)
ch_width_2 = map(data.pitch,    0, 255, 1000, 2000);     // pin D3 (PWM signal)
ch_width_3 = map(data.roll,     0, 255, 1000, 2000);     // pin D4 (PWM signal)
ch_width_4 = map(data.yaw,      0, 255, 1000, 2000);     // pin D5 (PWM signal)

// Write the PWM signal | PWM sinyaller çıkışlara gönderiliyor
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
}

Conclusão

Este rádio controle de 4 canais com Arduino é uma solução acessível e versátil para controlar seus projetos de aeromodelos, drones, carros e até barcos.

Além de ser de baixo custo, você pode personalizar o projeto conforme suas necessidades e adicionar mais funcionalidades como botões extras ou módulos Bluetooth.

Agora é só montar e se divertir controlando seus modelos com eficiência e baixo investimento!

Que tal compartilhar esse tutorial com seus amigos? Acho que vai ser uma boa!

Ah! Se quiser uma planta pra usar com esse projeto, sugiro um dos aeromodelos mais fáceis e baratos de fazer com depron… (Só clicar nesse link)

5/5 - (9 votos)

Construa, pilote e pouse
o seu próprio aeromodelo!