Тормозит сигнал при передаче с одной ардуины на другую.

Mihachuu
Offline
Зарегистрирован: 23.12.2021

Захотелось вдруг сделать р/у самолет, прослейший, на 2 сервоприводах и моторе. Так как до этого с ардуиной почти не работал решил тихонько скопировать чужой код и получить готовое, но не все пошло по плану. При загрузке кода на обе ардуины, которые я хочу связать через модули NRF24L01, все вроде окей, но вот сервоприводы реагируют заторможенно. Я подключал дешевые джойстики и при отклонении их сервопривод реагирует спустя около 0.5 секунд, но, как понимаете, такая скорость отклика на высоте недопустима. Уже 2 недели мучаюсь с этой проблемой. Пробовал подпаивать конденсатор напрямую к питанию сервоприпода, на питании модуля NRF24L01 тоже стоят конденсаторы. Иногда, кстати, при изменении программы или переподключении компонентов начинает реагировать как положено, но не долго почему-то. Стоит сказать, что я из-за отсутствия проводов 0-1 решил просто припаивать выводы ардуино к модулям используя кислоту( от кислоты все вроде отмыл).

вот код приемника в самом самолете

 
 
Вот код на передатчике в пульте:
 
 
Есть идеи, что тут можно натворить?)

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак ты у автора кода и спроси. 

nevkon
Offline
Зарегистрирован: 20.01.2015

Сходу - канал проверили конечно на отсутствие шумов, настораживает указание в 15 попыток достучаться.

Ну и что надо сделать - вставить код как положено чтобы можно читать было.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

сдаётся мне, что всё дело в библиотеке

b707
Offline
Зарегистрирован: 26.05.2017

Mihachuu - код вставьте как положено, иначе и говорить не о чем

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

сдаётся мне, что всё дело в библиотеке

Точно не в консерватории?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

сдаётся мне, что всё дело в библиотеке

Точно не в консерватории?

я за большевиков, они говорят, что в библиотеке, но какая правильная не говорят )))

Mihachuu
Offline
Зарегистрирован: 23.12.2021
вот:

код передатчика в пульте
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 3;  // кнопка на 3 цифровом
byte potent1 = 0;  // потенциометр на 0 аналоговом
byte slider = 1;  // движковый потенциометр на 1 аналоговом пине

byte transmit_data[3];  // массив, хранящий передаваемые данные
byte latest_data[3];    // массив, хранящий последние переданные данные
boolean flag;           // флажок отправки данных

void setup() {
  Serial.begin(9600);   //открываем порт для связи с ПК

  pinMode(button, INPUT_PULLUP); // настроить пин кнопки

  radio.begin();              // активировать модуль
  radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);   // размер пакета, в байтах

  radio.openWritingPipe(address[0]);  // мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);     // выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp();        //начать работу
  radio.stopListening();  //не слушаем радиоэфир, мы передатчик
}

void loop() {
  // инвертированный (!) сигнал с кнопки
  transmit_data[0] = !digitalRead(button);
  
  transmit_data[1] = map(analogRead(potent1), 0, 1023, 0, 180); // получить значение
  // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);

  for (int i = 0; i < 3; i++) {               // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1;                               // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i];      // запомнить последнее изменение
    }
  }

  if (flag == 1) {
    radio.powerUp();    // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    flag = 0;           //опустить флаг
    radio.powerDown();  // выключить передатчик
  }
}
код приемника в самолете


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

RF24 radio(9, 10);  // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte recieved_data[3];  // массив принятых данных
byte relay = 2;         // реле на 2 цифровом
byte servo1 = 3;         // сервопривод на 3 цифровом
byte mosfet = 5;        // мосфет на 5 цифровом (ТУТ ЕСТЬ ШИМ!!!)

Servo myservo;

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

void setup() {
  Serial.begin(9600);       // открываем порт для связи с ПК

  pinMode(relay, OUTPUT);   // настроить пин реле как выход
  pinMode(mosfet, OUTPUT);  // настроить пин мосфета как выход

  myservo.attach(servo1);

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);   // размер пакета, в байтах

  radio.openReadingPipe(1, address[0]);     // хотим слушать трубу 0
  radio.setChannel(0x60);  // выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp();          // начать работу
  radio.startListening();   // начинаем слушать эфир, мы приёмный модуль
}

void loop() {
  byte pipeNo;
  while ( radio.available(&pipeNo)) { // есть входящие данные
    // чиатем входящий сигнал
    radio.read(&recieved_data, sizeof(recieved_data));

    // подать на реле сигнал с 0 места массива
    digitalWrite(relay, recieved_data[0]);

    // повернуть серво на угол 0..180
    // значение получено с 1 элемента массива
    myservo.write(recieved_data[1]);

    // подать на мосфет ШИМ сигнал
    // в соответствии с принятыми данными со 2 места массива, диапазон 0...255
    analogWrite(mosfet, recieved_data[2]);
  }
}

Да, так как код благополучно скопирован, то там есть лишние детали, которые я убирал( вроде шима и реле), но это не помогало..

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а теперь вывод компиляции выложи

Mihachuu
Offline
Зарегистрирован: 23.12.2021


C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino: In function 'void setup()':
C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino:33:37: warning: invalid conversion from 'byte* {aka unsigned char*}' to 'uint64_t {aka long long unsigned int}' [-fpermissive]
In file included from C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino:4:0:
C:\Users\10i\Documents\Arduino\libraries\RF24-master/RF24.h:350:8: note:   initializing argument 2 of 'void RF24::openReadingPipe(uint8_t, uint64_t)'
   void openReadingPipe(uint8_t number, uint64_t address);
        ^~~~~~~~~~~~~~~
Скетч использует 4356 байт (14%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 281 байт (13%) динамической памяти, оставляя 1767 байт для локальных переменных. Максимум: 2048 байт.

Это компиляция кода в пульте, ниже:

C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino: In function 'void setup()':
C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino:29:34: warning: invalid conversion from 'byte* {aka unsigned char*}' to 'uint64_t {aka long long unsigned int}' [-fpermissive]
In file included from C:\Users\10i\Desktop\проект самолетик\связь\каналы\Air_plane\Air_plane.ino:3:0:
C:\Users\10i\Documents\Arduino\libraries\RF24-master/RF24.h:324:8: note:   initializing argument 1 of 'void RF24::openWritingPipe(uint64_t)'
   void openWritingPipe(uint64_t address);
        ^~~~~~~~~~~~~~~
Скетч использует 3628 байт (11%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 244 байт (11%) динамической памяти, оставляя 1804 байт для локальных переменных. Максимум: 2048 байт.

 

 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mihachuu пишет:
лишние детали, которые я убирал

А теперь уберите посторонний текст из кода, чтобы он компилировался! Код в таком виде - это просто троллинг!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что, на строки №№ 1 и 3 и строку №1 из приёмника компилятор не ругается?

Mihachuu
Offline
Зарегистрирован: 23.12.2021

А он как-то мешает? Вроде же текст через // никак не влияет? Я конечно попробую..

Mihachuu
Offline
Зарегистрирован: 23.12.2021

ЕвгенийП пишет:

А что, на строки №№ 1 и 3 и строку №1 из приёмника компилятор не ругается?

Да это я код неправильно вставил сюда.. Там все правильно, сам код с # начинается

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Для начала заменить строку 11 передатчика и аналогично приёмника, чтобы компилятор не ругался:
 

const uint64_t address[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL,0xF0F0F0F0D3LL, 0xF0F0F0F0D4LL, 0xF0F0F0F0D5LL,0xF0F0F0F0D6LL };

 

Mihachuu
Offline
Зарегистрирован: 23.12.2021

ua6em пишет:

Для начала заменить строку 11 передатчика и аналогично приёмника, чтобы компилятор не ругался:
 

const uint64_t address[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL,0xF0F0F0F0D3LL, 0xF0F0F0F0D4LL, 0xF0F0F0F0D5LL,0xF0F0F0F0D6LL };

 

После этого привод перестал реагировать... На приемнике и передатчике горят светодиоды рядом с буквой L

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Mihachuu пишет:

ua6em пишет:

Для начала заменить строку 11 передатчика и аналогично приёмника, чтобы компилятор не ругался:
 

const uint64_t address[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL,0xF0F0F0F0D3LL, 0xF0F0F0F0D4LL, 0xF0F0F0F0D5LL,0xF0F0F0F0D6LL };

 

После этого привод перестал реагировать... На приемнике и передатчике горят светодиоды рядом с буквой L

 

на приёмнике тоже сменил?

Mihachuu
Offline
Зарегистрирован: 23.12.2021

да, заливаю это и перестает работать: первое передатчик второе приемник

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

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

const uint64_t address[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL,0xF0F0F0F0D3LL, 0xF0F0F0F0D4LL, 0xF0F0F0F0D5LL,0xF0F0F0F0D6LL };

byte button = 3;  // кнопка на 3 цифровом
byte potent1 = 0;  // потенциометр на 0 аналоговом
byte slider = 1;  // движковый потенциометр на 1 аналоговом пине

byte transmit_data[3];  // массив, хранящий передаваемые данные
byte latest_data[3];    // массив, хранящий последние переданные данные
boolean flag;           // флажок отправки данных

void setup() {
  Serial.begin(9600);   //открываем порт для связи с ПК

  pinMode(button, INPUT_PULLUP); // настроить пин кнопки

  radio.begin();              // активировать модуль
  radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);   // размер пакета, в байтах

  radio.openWritingPipe(address[0]);  // мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);     // выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp();        //начать работу
  radio.stopListening();  //не слушаем радиоэфир, мы передатчик
}

void loop() {
  // инвертированный (!) сигнал с кнопки
  transmit_data[0] = !digitalRead(button);
  
  transmit_data[1] = map(analogRead(potent1), 0, 1023, 0, 180); // получить значение
  // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);

  for (int i = 0; i < 3; i++) {               // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1;                               // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i];      // запомнить последнее изменение
    }
  }

  if (flag == 1) {
    radio.powerUp();    // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    flag = 0;           //опустить флаг
    radio.powerDown();  // выключить передатчик
  }
}
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

RF24 radio(9, 10);  // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte recieved_data[3];  // массив принятых данных
byte relay = 2;         // реле на 2 цифровом
byte servo1 = 3;         // сервопривод на 3 цифровом
byte mosfet = 5;        // мосфет на 5 цифровом (ТУТ ЕСТЬ ШИМ!!!)

Servo myservo;

const uint64_t address[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL,0xF0F0F0F0D3LL, 0xF0F0F0F0D4LL, 0xF0F0F0F0D5LL,0xF0F0F0F0D6LL };

void setup() {
  Serial.begin(9600);       // открываем порт для связи с ПК

  pinMode(relay, OUTPUT);   // настроить пин реле как выход
  pinMode(mosfet, OUTPUT);  // настроить пин мосфета как выход

  myservo.attach(servo1);

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);   // размер пакета, в байтах

  radio.openReadingPipe(1, address[0]);     // хотим слушать трубу 0
  radio.setChannel(0x60);  // выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp();          // начать работу
  radio.startListening();   // начинаем слушать эфир, мы приёмный модуль
}

void loop() {
  byte pipeNo;
  while ( radio.available(&pipeNo)) { // есть входящие данные
    // чиатем входящий сигнал
    radio.read(&recieved_data, sizeof(recieved_data));

    // подать на реле сигнал с 0 места массива
    digitalWrite(relay, recieved_data[0]);

    // повернуть серво на угол 0..180
    // значение получено с 1 элемента массива
    myservo.write(recieved_data[1]);

    // подать на мосфет ШИМ сигнал
    // в соответствии с принятыми данными со 2 места массива, диапазон 0...255
    analogWrite(mosfet, recieved_data[2]);
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mihachuu пишет:

А он как-то мешает? Вроде же текст через // никак не влияет? Я конечно попробую..

Чему? Компиляции?

И с такими знаниями Вы решили делать проект? :-)))

Mihachuu
Offline
Зарегистрирован: 23.12.2021

ЕвгенийП пишет:

Mihachuu пишет:

А он как-то мешает? Вроде же текст через // никак не влияет? Я конечно попробую..

Чему? Компиляции?

И с такими знаниями Вы решили делать проект? :-)))

я думал вы имеете ввиду текст после //, а в говорили про первые строки кода. Да, на них бы выдавало ошибку компиляции, но их в коде нет, это моя ошибка при копировании на форум кода

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Mihachuu пишет:

да, заливаю это и перестает работать: первое передатчик второе приемник

автоматику я всю сделал, компилятор не ругается, а это самое главное, осталась техническая часть, сейчас подтянется Евгений Петрович может что посоветует )))

Mihachuu
Offline
Зарегистрирован: 23.12.2021

ua6em пишет:

Mihachuu пишет:

да, заливаю это и перестает работать: первое передатчик второе приемник

автоматику я всю сделал, компилятор не ругается, а это самое главное, осталась техническая часть, сейчас подтянется Евгений Петрович может что посоветует )))

Понял, спасибо)

b707
Offline
Зарегистрирован: 26.05.2017

Mihachuu пишет:

После этого привод перестал реагировать...

верните буквы обратно, с предупреждениями разберетесь, когда остальное заработает

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Mihachuu пишет:

После этого привод перестал реагировать...

верните буквы обратно, с предупреждениями разберетесь, когда остальное заработает

ну ты жеж понимаешь, что так не бывает, труба идентифицируется 64 битным числом, если на приемнике и передатчике совпадает приём обязан быть

b707
Offline
Зарегистрирован: 26.05.2017

по поводу заторможенной реакции - вот эти три строчки из настройки приемника и передатчика удалите и попробуйте

radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал

 

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

ну ты жеж понимаешь, что так не бывает, труба идентифицируется 64 битным числом, если на приемнике и передатчике совпадает приём обязан быть

я точно знаю, что вот это:

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};

работает

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

ну ты жеж понимаешь, что так не бывает, труба идентифицируется 64 битным числом, если на приемнике и передатчике совпадает приём обязан быть

я точно знаю, что вот это:

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};

работает

можно попробовать убрать const

Если важно оставить номер трубы в пределах байта можно и напрямую указать:
 

  radio.openWritingPipe(/*address[0]*/0xE7);  // мы - труба 0, открываем канал для передачи данных

 

Mihachuu
Offline
Зарегистрирован: 23.12.2021

b707 пишет:

по поводу заторможенной реакции - вот эти три строчки из настройки приемника и передатчика удалите и попробуйте

radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал

 

после этого перестало работать(

b707
Offline
Зарегистрирован: 26.05.2017

вставьте одну строчку

radio.setAutoAck(0);  

 

Mihachuu
Offline
Зарегистрирован: 23.12.2021

b707 пишет:

вставьте одну строчку

radio.setAutoAck(0);  

 

стереть те 3 которые вы предлагали иоставить эту одну?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

вставьте одну строчку

radio.setAutoAck(0);  

а это тебя совсем не смущает?
 

byte transmit_data[3];  // массив, хранящий передаваемые данные  

radio.setPayloadSize(32);

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

nRF24 говорите? Не советую. Стабильной связи Вы не добъётесь. И самолёт уйдёт в штопор...

А если появится благородный дон Румата - он может подсказать куда надо допаивать конденсаторы и резисторы. Но и у него терпенья не хватило.

Mihachuu
Offline
Зарегистрирован: 23.12.2021

mykaida пишет:

nRF24 говорите? Не советую. Стабильной связи Вы не добъётесь. И самолёт уйдёт в штопор...

А если появится благородный дон Румата - он может подсказать куда надо допаивать конденсаторы и резисторы. Но и у него терпенья не хватило.

ох, ну что ж поделать, по незнанию купил.. А есть аналоги с подобно дальностью связи?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Mihachuu пишет:

mykaida пишет:

nRF24 говорите? Не советую. Стабильной связи Вы не добъётесь. И самолёт уйдёт в штопор...

А если появится благородный дон Румата - он может подсказать куда надо допаивать конденсаторы и резисторы. Но и у него терпенья не хватило.

ох, ну что ж поделать, по незнанию купил.. А есть аналоги с подобно дальностью связи?

Конечно, из недорогих FLYSKY FS-I6 с любым приёмником

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

а это тебя совсем не смущает?
 

byte transmit_data[3];  // массив, хранящий передаваемые данные  

radio.setPayloadSize(32);

 

абсолютно.

Пакет размером 32 байта, а используем три. Главное чтоб не наоборот :) А так немного неэффективно, но работать будет.  Я в своих опытах с НРФ  параметр radio.setPayloadSize(32); вообще не трогаю, независимо от числа пересылаемых байт.

b707
Offline
Зарегистрирован: 26.05.2017

Mihachuu пишет:

b707 пишет:

вставьте одну строчку

radio.setAutoAck(0);  

 

стереть те 3 которые вы предлагали иоставить эту одну?

да

Mihachuu
Offline
Зарегистрирован: 23.12.2021

b707 пишет:

Mihachuu пишет:

b707 пишет:

вставьте одну строчку

radio.setAutoAck(0);  

 

стереть те 3 которые вы предлагали иоставить эту одну?

да

не работает вообще(

 Оно переодически перестает работать даже со старым кодом, такое уже было..

vvadim
Offline
Зарегистрирован: 23.05.2012

нрфки дюже чувствительны к питанию.
я всегда ставлю электролит на 10мкф  на сам модуль.

 

Mihachuu
Offline
Зарегистрирован: 23.12.2021

vvadim пишет:

нрфки дюже чувствительны к питанию.
я всегда ставлю электролит на 10мкф  на сам модуль.

 

да, я читал про это, изначально поставил на 47мкф электролит на каждый, не помогает..

genia1991
Offline
Зарегистрирован: 25.12.2019

я собирал похожий код. работает отлично.

Интересно микрозадержка есть у вас на серве если стики крутить ? или об этом и создана тема?

Почитал первый пост. Вроде об этом и идет речь. Тогда никак по идеи это не исправить. Я тоже 2 недели искал ответ на анг. сайтах инфы вообще ноль. Наверное это особенность самой nrf24 или библиотека такая

Летать можно и так главное управлять плавно без рывков )))

а еще в этом коде нет самого главного и вообще в интернете редко встречается. Обязательно надо писать код тримирования иначе нормально летать не получится. управлять будет очень не удобно

Mihachuu
Offline
Зарегистрирован: 23.12.2021

genia1991 пишет:

я собирал похожий код. работает отлично.

Интересно микрозадержка есть у вас на серве если стики крутить ? или об этом и создана тема?

Почитал первый пост. Вроде об этом и идет речь. Тогда никак по идеи это не исправить. Я тоже 2 недели искал ответ на анг. сайтах инфы вообще ноль. Наверное это особенность самой nrf24 или библиотека такая

Летать можно и так главное управлять плавно без рывков )))

а еще в этом коде нет самого главного и вообще в интернете редко встречается. Обязательно надо писать код тримирования иначе нормально летать не получится. управлять будет очень не удобно

Да, действительно, если без рывков дергать стик то вроде даже быстро реагирует.. Что ж, упадет, так упадет..

А что за тримирование? Я вот планирую дать управление на сами крылья через приводы, тоесть по высоте, и управление на хвост( Не могу употреблять умнеы термины, извините). Пока еще не разбирался, какой привод за что буде отвечать.. То ли на передних крыльях регулировка высоты, то ли на задних..

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Mihachuu пишет:

А что за тримирование? Я вот планирую дать управление на сами крылья через приводы, тоесть по высоте, и управление на хвост( Не могу употреблять умнеы термины, извините). Пока еще не разбирался, какой привод за что буде отвечать.. То ли на передних крыльях регулировка высоты, то ли на задних..

То-есть еще ни один самолёт летать вы не научили. Тогда прямой путь купить нормальную аппаратуру радиоуправления.

genia1991
Offline
Зарегистрирован: 25.12.2019

вспомнил еще вот что. 

На магазинских аппаратурах (возможно не на всех) тоже есть такая задержка это точно. интересовался этим. например на таранисе. не помню модель но денег стоит как целый самолет )

Возможно попробовать увеличить скорость передачи данных и может поможет. Хотел проверить это но забыл.

У меня пульт на ардуино (плата сделана еще под экран но прошивка еще не сделана под него) + на чипе 4550 еще джостик сделан для пк симуляторов что бы мастерство оттачивать лол. С этого и надо начинать. что бы разбивать поменьше самолетов. Полет все равно должен быть плавным. это же не пилотажка а тренер.

 

на крыльях элероны это наклоны (крен) на хвосте руль высоты еще нужен без руля направления пойдет.

 

тримирование: https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%BC%D0%BC%D0%B5%D1%80_(%D0%B0%D0%B2%D0%B8%D0%B0%D1%86%D0%B8%D1%8F)

Эта же штука есть и на настоящих самолетах (обычно в виде колесика)

Ее можно конечно не ставить на первое время. Это как бы коррекция плоскотей системы управления что бы самолет при дефолтных отклонений стиков все равно летел ровно. 

 

канал на ютубе есть альнадо называется: сегодня будет стрим в 6 или 7 вечера. Вот можно им еще задать вопросы если что то не понятно по модели.

genia1991
Offline
Зарегистрирован: 25.12.2019

надо еще экран прикрутить. Экспериментирую еще с ним

Mihachuu
Offline
Зарегистрирован: 23.12.2021

Понял. Думаю тримирование пока не буду делать, нужно хотя бы так научиться летать, а потом, если будет необходимоть и время, попробую. Посидел еще, покрутил джойстики, действительно, задержка пропадает если аккуратно поворачивать, но не понимаю, почему так( В любом случае, нос самолета нетрудно починить)

Еще вот что интересно: Первоначально, когда задумывал проект( и еще не знал об особенностях арудины и ее возможностях в принципе), хотел сделать FPV Систему на дешевой камере для ардуино типо вот этой https://aliexpress.ru/item/32521049376.html?spm=a2g2w.productlist.0.0.248a4664HHHo2P

Но когда стал читать о самой FPV и увидел что все ставят камеры за 1к+ сразу с такой спиральной антенной, то задумался, а что вообще может моя камера за 150р..

На самолетик передумал ее ставить, а вот дальше хотел побаловаться с машинкой на управлении, где эта задержка проблемная не так страшна как на самолете. Так вот возможно ли настроить на этой дешевой камере FPV? Возможно вопрос глупый, но знаний у меня пока немного..

Mihachuu
Offline
Зарегистрирован: 23.12.2021

А в этом пульте джойстики вместе с пультом шли? Смотел я видосы с такими пультами, как видно, у них есть это тримирование, когда отклоняешь стик куда-то и он остается в этом положении. А есть ли отдельно такие джойстики? Или они только с пультом..

genia1991
Offline
Зарегистрирован: 25.12.2019

первый самолет лучше не делать на fpv это краш моментальный будет. Надо еще привыкать к таким полетам.

попробуйте заменить эту строку (в приемнике и передатчике):  radio.setDataRate (RF24_250KBPS)    на:    radio.setDataRate (RF24_1MBPS)    но толку наверное не будет но лучше проверить.

 

камеру тяжело подключать. Но тогда через вайфайл уже лучше делать на esp8266

https://www.google.com/search?q=esp8266+camera&tbm=isch&ved=2ahUKEwiInZ7...

 

 

Этот джостик со старого пульта был. Я его покупал как б.у. Но сам он новый. Может где то излишки с завода осталить. Просто как модель он устарел. Внутри были только стики и переключалки всякие. Можно вообще купить почти за бесплатно похожий. например на авито . Бывают продают из за того что электроника накрылась и просто на запчасти.

Первый пульт был полностью самодельный с джостиков от ардуино. Все впаено на плату

 

 

genia1991
Offline
Зарегистрирован: 25.12.2019

например вот:  

немного тормозить будет конечно вообще на таких контроллерах . для машинки пойдет и на самолет в будущем думаю тоже

https://randomnerdtutorials.com/esp32-cam-video-streaming-web-server-camera-home-assistant/

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

genia1991 пишет:

первый самолет лучше не делать

Женя - программу в студию. И схему (особенно обвязку Hrf24) в студию. 

Чего-то мне кажется, что Вы нас наё... И главное - новичка тоже наё...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ну не бывает так, что не у кого не работает (даже в коммерческих версиях), а у Вас раз - и заработало :)

genia1991
Offline
Зарегистрирован: 25.12.2019

mykaida пишет:

genia1991 пишет:

первый самолет лучше не делать

Женя - программу в студию. И схему (особенно обвязку Hrf24) в студию. 

Чего-то мне кажется, что Вы нас наё... И главное - новичка тоже наё...

fpv я никогда не делал и не планирую наверное. Только если это будет дешевый и не особо сложный проект.