Projekt RC Arduino

V tomto příspěvku ti přinášíme konstrukci našeho zákazníka Ľuba Roziaka. Cílem projektu bylo vytvořit co nejjednodušší dálkové ovládání, které dokáže postavit i méně zkušený amatér.

Vysielač:
Budeme potrebovať nasledovné komponenty:

RF NANO doštička                        1ks
Keyes KY-023 Joystick                 2ks
Arduino Nano terminal shield   1ks (volitelně)
Držiak 9V batérie                         1ks
10cm Prepojovacie vodiče a rôzny spojovací material.

Postup: Joystick  ovládače a RF NANO doštičku  mechanicky upevníme skrutkami na izolačnú podložku ja som použil Podložku zo stavebnice Merkur a preto bolo potrebne všetko odizolovať.  Prevedieme prepojenie komponentov 10cm vodičmi podľa schémy. Odber z batérie 9V je cca 35mA .

Schéma zapojenia vysielača:

Držiak batérie je upevnený  zospodu. Shield si môžeme zhotoviť aj zo spájkovacieho kontaktného poľa do ktorého naspájkujeme  16pin. dutinkovú lištu 2,54 mm dvojradovú. Tak bolo aj v mojom prípade. Alebo môžeme použiť Arduino Nano terminal shield.

Mechanické prevedenie vysielača:

Pri tvorbe kódu som čerpal zo stránok http://www.electronoobs.com/eng_arduino_tut2.php

Kod je jednoduchý ,je potrebná knižnica pre nRF2401 .V kóde musí byť špecifikované- CE 10 a CSN 9. V štruktúre doštičky je už všetko poprepájané (aj napájanie nRf modulu). Je potrebné dodržať zásadu že vysielač a príjimač musia mať rovnaké heslo. Zmenou dat( 0, 1124, 255, 60)možeme meniť veľkosť výchyliek serv prípadne ich reverz .Po nahratí kódu do doštičky by malo všetko bez problémov  fungovať. Dosah vysielača by sa mal v otvorenom priestore pohybovať  max do 100m.Zariadenie je preto vhodné len na ovládanie malých pozemných modelov.

Pijimač:
Na stavbu prijimača budeme potrebovať:

RF ARDUINO 1ks
NANO shield 1ks

Prijimač je tiež postavený na RF NANO doštičke .V prípade použitia Nano shieldu stačí nahrať kod a doštičku zasunúť do shieldu a pripojiť servá a napájaciu batériu. Ja som použil shield vlastnej výroby vyrobený tím istým spôsobom ako na vysielači. Ako napájanie som použil 4×1,2V Ni-Mh akumulátory. Môžeme použiť aj kvalitné alkalicke batérie no kvoli servám maximálne 6V.

Schéma zapojenia prijimača:

Shield prijimača:

Kod vysielača:

/* Kod vysielača pre RF NANO
Kod vysielača pre 4kanaly ,datove piny A0, A1, A2, A3
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t my_radio_pipe = 0x0022; //toto istý kod musí mať aj primač
RF24 radio(10, 9);  //zapojenie CE a CSN pinov
//maximalne 32 kanalov
struct Data_to_be_sent {
  byte ch1;
  byte ch2;
  byte ch3;
  byte ch4;
 };
Data_to_be_sent sent_data;
void setup()
{
  radio.begin();
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.openWritingPipe(my_radio_pipe);
  //Resetujte každú hodnotu kanála
  sent_data.ch1 = 127;
  sent_data.ch2 = 127;
  sent_data.ch3 = 127;
  sent_data.ch4 = 127;
}
void loop()
{
/*Nastavenie Kanalov /velkosť vychiliek a reverz serv/
  Normal:    data.ch1 = map( analogRead(A0), 0, 1024, 0, 255);
  Reverz:  data.ch1 = map( analogRead(A0), 0, 1024, 255, 0);  */
  
  sent_data.ch1 = map( analogRead(A0), 0, 1000, 110, 220); //čierny
  sent_data.ch2 = map( analogRead(A1), 0, 1124, 255, 60);  //žlta
  sent_data.ch3 = map( analogRead(A2), 0, 1124, 240, 90); //modra
  sent_data.ch4 = map( analogRead(A3), 0, 1020, 235, 80); //červeny
    radio.write(&sent_data, sizeof(Data_to_be_sent));
}

Kod prijimača:

/* RF NANO Prímacovy kod 
 * PWM vystup kanalov D2,D3,D4,D5,
 */
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
//Define widths
int pwm_width_2 = 0;
int pwm_width_3 = 0;
int pwm_width_4 = 0;
int pwm_width_5 = 0;
Servo PWM2;
Servo PWM3;
Servo PWM4;
Servo PWM5;
//Méžeme mať až 32 kanalov
struct MyData {
byte throttle;      //V tomto ripade mame 4 kanali
byte yaw;
byte pitch;
byte roll;
};
MyData data;
const uint64_t pipeIn = 0x0022;   //Tento isty kod musi mať aj primač
RF24 radio(10,9);  //zapojenie CE a CSN pinov
void resetData()
{
//Definujeme iniciálnu hodnotu každého vstupu údajov
// potenciometre budú v strednej pozícii, takže 127 je v centre od 254
data.throttle = 127;
data.yaw = 127;
data.pitch = 127;
data.roll = 127;

}

void setup()
{
  //Set the pins for each PWM signal
  PWM2.attach(2);
  PWM3.attach(3);
  PWM4.attach(4);
  PWM5.attach(5);
  
  //konfiguracia NRF24 
  resetData();
  radio.begin();
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);  
  radio.openReadingPipe(1,pipeIn);
    //začneme s rádiokomunikáciou
  radio.startListening();
}
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(MyData));
lastRecvTime = millis(); //tu dostávame údaje
}
}
void loop()
{
recvData();
unsigned long now = millis();
//Tu skontrolujeme, či sme stratili signál, ak by sme resetovali hodnoty
if ( now - lastRecvTime > 1200 ) {
//Stratený signál?
resetData();
}
//Nastavenie koncovych a stred polôh
pwm_width_2 = map(data.throttle, 0, 255, 200, 2000);  //PWM vystup digital pin D2 čierny
pwm_width_3 = map(data.yaw,      0, 255, 200, 2000);  //PWM vystup digital pin D3 žltý
pwm_width_4 = map(data.pitch,    0, 255, 200, 2000);  //PWM vystup digital pin D4 modrý
pwm_width_5 = map(data.roll,     0, 255, 200, 2000);  //PWM vystup digital pin D5 červeny

//Teraz napíšeme signál PWM pomocou funkcie servo
PWM2.writeMicroseconds(pwm_width_2);
PWM3.writeMicroseconds(pwm_width_3);
PWM4.writeMicroseconds(pwm_width_4);
PWM5.writeMicroseconds(pwm_width_5);

}//Koniec slučky

Sdílet článek

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit