Sterowanie - odbiornik

Jak zaprogramować sterowanie dla naszego jachtu?

5/16/20262 min czytać

Zastanawiasz się jak wykonać odbiornik dla swojego zdalnie sterowanego projektu? Dobrze trafiłeś! W tym blogu opiszę sprawdzone i pewne rozwiązania.

Podobnie jak w przypadku nadajnika, wykorzystujemy moduł NRF24L01 w wersji z dodatkową anteną. Wymaga on więcej mocy natomiast rekompensuje to zwiększonym zasięgiem. W przypadku jachtów zdalnie sterowanych chcemy najczęściej kontrolować ster, grota i foka. Jeśli zdecydujemy się na kontrolę żagli jednym silnikiem. Wtedy potrzebujemy jedynie dwóch servomechanizmów, możemy wykorzystać SG90 lub MG90S w zależności od rozmiaru jachtu. W przypadku znacząco większych konstrukcji należy zaopatrzyć się w odpowiednie silniejsze mechanizmy. W związku z wykorzystaniem odbiornika wyższej mocy, oraz dwóch silników, potrzebna jest również przetwornica DC-DC stabilizująca napięcie na przykład LM2596. Całość koordynowana jest przez mikrokontroler Arduino Nano: https://store.arduino.cc/products/arduino-nano.

W naszym sklepie oferujemy gotowe płytki PCB do montażu wymienionych podzespołów co ułatwi pracę oraz zmniejszy ilość potrzebnego w kadłubie miejsca https://rcsailing.eu/plytka-pcb-jacht.

Możliwe jest zastosowanie dużo tańszych chińskich zamienników Arduino, należy się jednak liczyć z tym, że niektóre przychodzą wadliwe.

Poniżej zamieszczony został kod, który należy wgrać na mikrokontroler aby zapewnić działanie odbiornika. Program działa oczywiście w połączeniu z programem nadajnika opisanym w poprzednim artykule.

Najważniejsze jest:

  • zamieszczenie bibliotek

  • poprawne zdefiniowanie pinów CE i CSN

  • ustawienie tego samego adresu co w nadajniku

  • wykorzystanie poprawnego typu zmiennych

  • ustawienie radia w tryb odbiornika "radio.startListening"

W trakcie testowania programu warto jest zacząć od jednej przesyłania jednej zmiennej. Do wejścia nadajnika podłączamy jeden potencjometr, a w kodach programów komentujemy jedną ze zmiennych.

W razie pytań zapraszamy do kontaktu.

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

#include <Servo.h>

#define CE_PIN 9

#define CSN_PIN 10

Servo servo1;

Servo servo2;

const byte thisSlaveAddress[5] = "00001";

RF24 radio(CE_PIN, CSN_PIN);

struct Data{

int16_t x;

int16_t y;

};

Data SERVOS;

bool newData = false;

int16_t xData=0;

int16_t yData=0;

//===========

void setup() {

servo1.attach(2);

servo2.attach(4);

Serial.begin(9600);

radio.begin();

radio.setDataRate( RF24_250KBPS );

radio.openReadingPipe(0, thisSlaveAddress);

radio.startListening();

}

//=============

void loop() {

getData();

showData();

}

//==============

void getData() {

if ( radio.available() ) {

radio.read( &SERVOS, sizeof(SERVOS) );

newData = true;

}

}

void showData()

{

if (newData == true)

{

//Serial.print("Data received ");

xData = SERVOS.x;

yData = SERVOS.y;

Serial.println(xData);

Serial.println(yData);

servo1.write(xData);

servo2.write(yData);

newData = false;

}

}