#1 2019-03-18 15:04:38

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Радиоуправление на NRF24L01

Всем доброго дня!
При изготовлении радиоуправления столкнулся с одной проблемой которую не удается победить в полном объеме. Р/у выполнено на базе arduino nano с использованием NRF24L01. Управляет данное р/у одним бесколлекторным  двигателем и тремя сервомашинками.
Двигатель и одна серва управляются плавно с потенциометра (переменный резистор или джойстик), а две сервы с кнопок - 0-180.
Все работает ,но есть один (как для меня) большой недостаток!!! при пропадании сигнала с передатчика, приемник отрабатывает последнее полученное значение.Функции библиотек проблему не решают (или я не умею ими пользоваться правильно). Р/у управляет закормочным корабликом. Кому интересно могу поделиться схемами и реализацией в "железо". Буду рад если кто подскажет что поменять в скетче.Буду рад всем кто примет участие в обсуждении. smile

#2 2019-03-18 15:21:44

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 672

Re: Радиоуправление на NRF24L01

mitonn пишет:

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

здесь что то не понятно....

#3 2019-03-18 15:31:18

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Если выключить передатчик (отошло питание,модель вышла из зоны "видимости" и тд) то на приемнике остаются  последние полученные значения. Кораблик продолжит движение пока не сядет аккумулятор smile,реально такого еще не случалось, но вероятность есть.

#4 2019-03-18 16:21:56

Kino
Участник
Зарегистрирован: 2019-02-28
Сообщений: 38

Re: Радиоуправление на NRF24L01

Подсказываю. В пакете передатчика заводим переменную, постоянно инкрементируемая при каждой посылке. Передатчик при этом должен передавать постоянно. Приемником анализируйте в пакете этот байт. Если он, на протяжении какого-то времени сохраняет последнее значение, то соответственно связь потеряна и выключаем моторы и сервы.

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

Редактировался Kino (2019-03-18 16:23:23)

#5 2019-03-18 20:40:08

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

"Вариант второй. Просто после получения посылки обнуляйте массив и там не будет старых значений )). Но тут вопрос в потери реакции на команды, возможны пропуски."
Этот вариан уже опробован, из-за пропусков двигатель работает с поддергиванием, а по первому возможно. Попробую - отпишусь. Спасибо!

#6 2019-05-17 10:56:16

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Наконец решил написать о решении своей проблемы при потере сигнала приемником.Удалось ее решить при помощи функции "millis",которая при пропадании сигнала больше чем на 500 миллисекунд  исполняет команду "motor.write(0)" ,а при появлении сигнала с передатчика продолжает исполнять его команды.В живую это решено так:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo motor;

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

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

int servo1_pos = 0;

int timeout = 500;
int lastTime = 0;

byte recieved_data[4];

void setup(){
  servo1.attach(2);
  servo2.attach(4);
  servo3.attach(3);
  motor.attach(5);
 
  Serial.begin(9600); //открываем порт для связи с ПК
  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);     //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

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

  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();  //начинаем слушать эфир, мы приёмный модуль
}

//        Serial.println(radio.available(&pipeNo));
void loop() {
  byte pipeNo;   
      while (radio.available(&pipeNo)) {    // слушаем эфир со всех труб
        lastTime = millis();
        radio.read( &recieved_data, sizeof(recieved_data) );         // чиатем входящий сигнал
 
        if (recieved_data[0] == 0) {
            servo1.write(180);
        }
        if (recieved_data[0] == 1) {
            servo1.write(0);
        }
 
        if (recieved_data[3] == 0) {
            servo3.write(180);
        }
        if (recieved_data[3] == 1) {
            servo3.write(0);
        }
 
        if (recieved_data[1]) {
            servo2.write(recieved_data[1]);
        } else {
            servo2.write(0);
        }
       
        motor.write(recieved_data[2]);
      }
  int dt = millis() - lastTime;
  if (dt >= timeout) {
    motor.write(0);
  }
smile

#7 2019-07-14 23:53:36

алекс81
Гость

Re: Радиоуправление на NRF24L01

mitonn. а скетч передатчика можешь выложить?

#8 2019-07-15 09:38:50

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Скетч для передатчика. Позволяет управлять 1 бесколлекторным двигателем и тремя сервоприводами.  1 серво плавно с потенциометра от 0 -180 и два с кнопок 0 или поворот на 180. Управление двигателем плавное с потенциометра от 0 до max об/мин. Если есть необходимость могу рассказать о решении в "железе" smile

#include <SPI.h>          // библиотека для работы с шиной SPI
#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 transmit_data[4];

int val;
int val2;
const int potPin = 0;
const int potPin2 = 1;
const int buttonPin = 2;
const int buttonPin2 = 3;

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

  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  pinMode(potPin, INPUT);
  pinMode(potPin2, INPUT);

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

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

  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(buttonPin);
  val = analogRead(potPin);
  val = map(val, 0, 1023, 0, 179);
  transmit_data[1] = val;
  val2 = analogRead(potPin2);
  val2 = map(val2, 0, 1023, 0, 179);
  transmit_data[2] = val2;
  radio.write(&transmit_data, sizeof(transmit_data));
  transmit_data[3] = !digitalRead(buttonPin2);
   
//  Serial.print("Sent: "); Serial.println(counter);
//  radio.write(&counter, sizeof(counter));
//  counter++;
//  delay(10);
} smile

#9 2019-07-15 12:19:39

алекс81
Гость

Re: Радиоуправление на NRF24L01

огромное спасибо.

#10 2019-07-15 19:29:39

алекс81
Гость

Re: Радиоуправление на NRF24L01

у меня кораблик весом 3.5 кг. мотор коллекторный 540 7.6 вольт.  винт 30мм. ну очень медленный где то 4км в час.какой винт нужно поставить . если есть идеи скинь сылку.

#11 2019-07-15 19:31:40

алекс81
Гость

Re: Радиоуправление на NRF24L01

не понимаю какие винты скоростные какие тяговые

#12 2019-07-16 10:39:38

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

quote=алекс81]у меня кораблик весом 3.5 кг. мотор коллекторный 540 7.6 вольт.  винт 30мм. ну очень медленный где то 4км в час.какой винт нужно поставить . если есть идеи скинь сылку.


Мотор 540 класса достаточно мощный для такого кораблика, но нужно еще знать количество оборотов двигателя, а оно зависит от количества витков.
У меня кораблик (то-же тихоходный, но быстрее около 8-10 км/ч) весом с полной нагрузкой 5-5,5 кг. Двигатель я поставил бесколлекторный  A2212/15T-930kv, при 12В дает около 11000 об/мин. Винт посадка 3мм диаметр 35мм.

#13 2019-07-16 12:19:53

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,732

Re: Радиоуправление на NRF24L01

алекс81 пишет:

не понимаю какие винты скоростные какие тяговые

У скоростных угол атаки лопастей больше.

#14 2019-07-16 16:39:54

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

у меня 55т

#15 2019-07-16 16:41:11

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

какой винт посоветуете.если можно ссылочку

#16 2019-07-17 00:10:52

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

mitonn. а задний ход у БК моторов есть?

#17 2019-07-17 11:26:46

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Мотор коллекторный 540 класса имея 55 витков развивает на холостых до 16500 об/мин, прожерливый (максимальный ток до 28A). Для вашего кораблика его должно хватать. Винт желательно увеличить до 38 мм в диаметре.
Бесколлекторные двигатели имеют возможность вращения в обе стороны, но поскольку для управления используется специальный регулятор (драйвер,блок названий много) ,а недорогие обеспечивают вращение в одну сторону. Для вращения в противоположную нужно поменять местами два провода. Для катера задний ход можно обеспечить установкой 2-х канального модуля реле 5В 10А .

Источник https://arduino.ua/prod201-2-h-kanalnii-modyl-rele-5v-10a-s-optorazvyazkoi
Для меня задний ход не критичен, но мысли есть. Или купить более дорогой с реверсом. Читал о том что можно "научить" реверсу и простой регулятор, но сам не пробовал.
Винты можно посмотреть:https://hobbymania.com.ua/ru/catalog_boat.php?

#18 2019-07-17 21:22:46

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

огромное спасибо.но по моему у моего движка максимум 8000 об/мин. у меня вот такой драйвер  VNH2SP30 .

#19 2019-07-24 23:28:46

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

mitonn пишет:

Всем доброго дня!
При изготовлении радиоуправления столкнулся с одной проблемой которую не удается победить в полном объеме. Р/у выполнено на базе arduino nano с использованием NRF24L01. Управляет данное р/у одним бесколлекторным  двигателем и тремя сервомашинками.
Двигатель и одна серва управляются плавно с потенциометра (переменный резистор или джойстик), а две сервы с кнопок - 0-180.
Все работает ,но есть один (как для меня) большой недостаток!!! при пропадании сигнала с передатчика, приемник отрабатывает последнее полученное значение.Функции библиотек проблему не решают (или я не умею ими пользоваться правильно). Р/у управляет закормочным корабликом. Кому интересно могу поделиться схемами и реализацией в "железо". Буду рад если кто подскажет что поменять в скетче.Буду рад всем кто примет участие в обсуждении. smile


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

#20 2019-07-25 22:34:38

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

алекс81 пишет:

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

К сожалению схем у меня нет, есть отдельные зарисовки. Завтра сделаю что-то приличное тогда выложу.
По фото кораблика sad .Зимой я начал изготавливать 3 кораблика, два из них я сделал и они у друзей, а свой еще доделываю.Сделал несколько фото (не судите строго).
Начало:

1Sborka-_-Korablik.jpgSborka-_-Korablik.jpgDSCN0365.jpegDSCN0362.jpegDSCN0366.jpeg
DSCN0367.jpeg

Редактировался mitonn (2019-07-25 22:50:25)

#21 2019-07-25 22:59:01

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Предыдущие были сделаны еще зимой. Сегодня вот корабль и пульт:DSCN0389.jpegDSCN0386.jpegDSCN0387.jpegDSCN0392.jpegDSCN0391.jpegDSCN0385.jpeg

#22 2019-07-25 23:25:56

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Есть видио испытания весной первого, но оно сюда не влезает.
https://drive.google.com/file/d/1ujg8juypF1U0LPtVHz8khQW-WfOcaQaX/view?usp=sharing

#23 2019-07-26 11:58:28

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Выкладываю схему передатчика плюс рисунок печатной платы.На печатной плате на перспектиу заложена возможность подключения  еще двух кнопок или тумблеров.Печатная плата сделана в проге Sprint-Layout 5.Если нужно выложу в оригинале Приемник выложу после выходных,нет вретени сейчас.Peredatchik.jpgPeredatchik-_20190726-1157.jpg

Редактировался mitonn (2019-07-26 12:01:39)

#24 2019-07-26 22:20:18

алекс81
Участник
Зарегистрирован: 2019-07-15
Сообщений: 6

Re: Радиоуправление на NRF24L01

спасибо.всё так аккуратно. а аккум. может лучше на литий поменять?

#25 2019-07-29 08:55:58

mitonn
Участник
Зарегистрирован: 2019-03-01
Сообщений: 23

Re: Радиоуправление на NRF24L01

Может и лучше, но данный аккумулятор придает кораблику устойчивости и еще один плюс, практически на севшем (9,8-10,2 В) можно двигаться на малых оборотах.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела