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

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#1

Сообщение jet-belan » 13.06.2016{, 08:03}

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

передатчик

#include <SPI.h>
#include "RF24.h"
RF24 radio(2,3);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int potpin_1 = A0;
int val_1;
int potpin_2 = A1;
int val_2;

void setup(void){
radio.begin();
radio.openWritingPipe(pipe);

}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);

}

Добавлено (13.06.2016, 07:47)
---------------------------------------------
приёмник

// Необходимо установить библиотеку для радиомодуля nRF24
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
int fspeed; // forward speed
int bspeed; // backward speed
const int in1 = 2; // direction pin 1
const int in2 = 4; // direction pin 2
const int ena = 5; // PWM pin to change speed

void setup()
{

pinMode(in1, OUTPUT); // connection to L298n
pinMode(in2, OUTPUT); // connection to L298n
pinMode(ena, OUTPUT); // connection to L298n
servo1.attach(3);
delay(50);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}

void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 7, 55),servo1.write(pos);

if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255),
forward(fspeed);
if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
}

void stop()
{

analogWrite(ena, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}

void forward(int fspeed)
{

digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena, fspeed);
}

void backward(int bspeed)
{

digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena, bspeed);
}

Добавлено (13.06.2016, 08:00)
---------------------------------------------
в общем это машинка на радио управлении. с передатчиком всё более менее ясно, а вот с приёмником не очень. Не могу сообразить как сваять логику приёмника так чтоб в зависимости от положения аналогово джойстика двигатель крутился вперёд или назад с ускорением от точки покоя

Добавлено (13.06.2016, 08:03)
---------------------------------------------
просто хочу переделать скетч под моторную лодку с двумя моторами. при остановке или реверсе одного мотора лодка поворачивает в его сторону
Последний раз редактировалось jet-belan 13.06.2016{, 07:52}, всего редактировалось 1 раз.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#2

Сообщение jet-belan » 14.06.2016{, 11:57}

хочу сделать такую схему

распиновка такова

первый мотор:

en1        ШИМ     -управляет скоростью
in1        1 или 0 
in2        1 или 0  -управляют направлением. если на обоих 0 то двигатель стоит

второй мотор:

en2        ШИМ     -управляет скоростью
in3        1 или 0
in4        1 или 0  -управляют направлением. если на обоих 0 то двигатель стоит

Добавлено (14.06.2016, 11:57)
---------------------------------------------
мне бы хотя бы на один двигатель))
Вложения
5369133.jpg

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

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

#3

Сообщение Олег » 14.06.2016{, 12:26}

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

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#4

Сообщение jet-belan » 14.06.2016{, 22:09}

входы драйвера мотора

EN          ШИМ     -управляет скоростью
IN 1        1 или 0 
IN 2        1 или 0  -управляют направлением. если на обоих 0 то двигатель стоит

итак:
с пульта передается аналоговый сигнал
джойстика
от 0 до 255

приёмник принимает сигнал и дальше идет такая тема:

джойстик в состоянии покоя выдает 
число примерно в 127-129 единиц
в это время мотор должен "стоять"
и чтоб состояние покоя мотора было стабильным, (я думаю) нужно диапазон этого покоя увеличить
примерно вот так:
123-132
в это время на входах драйвера
EN   - ноль
IN 1 - ноль
IN 2 - ноль

когда джойстик сдвигаешь вверх, то при выдачи сигнала от 133 до 255 на EN подается
"сигнал" от 0 до 255, тем самым регулируя скорость

в это время на IN 1 подается 1, а на IN 2 подается 0 от этого двигатель вращается условно по часовой стрелке

когда джойстик сдвигаешь вниз, то при выдачи сигнала от 122 до 0 на EN подается
"сигнал" от 0 до 255, тем самым регулируя скорость

в это время на IN 1 подается 0, а на IN 2 подается 1 и от этого двигатель вращается против часовой стрелки

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#5

Сообщение jet-belan » 14.06.2016{, 23:20}

попробовал собрать без радио модуля,
получился такой код:

void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);

}
void loop()
{

analogWrite(5, (map(((map(( (analogRead (0))), (0), (1023), (0), (255)))), (136), (255), (0), (255))));
analogWrite(5, (map(((map(( (analogRead (0))), (0), (1023), (0), (255)))), (120), (0), (0), (255))));
digitalWrite(2, (135) <= ((map(( (analogRead (0))), (0), (1023), (0), (255)))));
digitalWrite(3, (120) >= ((map(( (analogRead (0))), (0), (1023), (0), (255)))));

}

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



а назад есть проблемка... Когда джойстик тянешь вниз, мотор начинает крутиться на средних оборотах, плавно снижает скорость, а ближе к концу выходит на максимум.
вот скриншот масштабирования скорости назад:



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

Добавлено (14.06.2016, 23:20)
---------------------------------------------
D5 это ШИМ на EN
D2 это цифровые IN 1
D3 это цифровые IN 2
Вложения
7519062.png
3044902.png
2737503.png

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

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

#6

Сообщение OlegAn1962 » 15.06.2016{, 03:22}

Попробуйте на блоки Scale сигнал подать через демультиплексор. Или, еще проще, сигнал на D5 выводить через блок нелинейного масштабирования.

Вложения
9025704.png
Последний раз редактировалось OlegAn1962 15.06.2016{, 03:37}, всего редактировалось 1 раз.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#7

Сообщение jet-belan » 15.06.2016{, 07:56}

спасибо! сейчас попробую

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#8

Сообщение jet-belan » 15.06.2016{, 08:17}

первый вариант не пробовал, а вот второй получился в идеале!
огромная благодарность!

код получился всего лишь чуть больше:

вперёд, назад с ускорением

Код200?'200px':''+(this.scrollHeight+5)+'px');">struct _poligonInexes
{
  int minIndex;
  int maxIndex;
}; 
int _Poligon_InArray_1[4] = {0, 120, 136, 255};
int _Poligon_OutArray_1[4] = {255, 0, 0, 255};
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);

}
void loop()
{

analogWrite(5, (_poligon(((map(( (analogRead (0))), (0), (1023), (0), (255)))), _Poligon_InArray_1, _Poligon_OutArray_1, 4)));
digitalWrite(2, (135) <= ((map(( (analogRead (0))), (0), (1023), (0), (255)))));
digitalWrite(3, (120) >= ((map(( (analogRead (0))), (0), (1023), (0), (255)))));

}
int _poligon(int value, int intArray[], int outArray[], int arraySize)
{
  struct  _poligonInexes indexes;
  indexes = _getPoligonIndexes(value, intArray, arraySize);
  return map(value, intArray[indexes.minIndex], intArray[indexes.maxIndex], outArray[indexes.minIndex], outArray[indexes.maxIndex]);
}
struct  _poligonInexes _getPoligonIndexes(int value, int array[], int arraySize)
{
  struct  _poligonInexes result;
  int i;
  result.minIndex = 0;
  result.maxIndex = 0;
  for ( i = 0; i < arraySize; i++) {
    if (array [result.minIndex] > array) {
      result.minIndex = i;
    }
    if (array [result.maxIndex] < array) {
      result.maxIndex = i;
    }
  }
  for ( i = 0; i < arraySize; i++)
  {if ((array  >= value) && (array [result.maxIndex] > array)) {
      result.maxIndex = i;
    }
  }
 if (result.maxIndex==0){ result.minIndex = 0; result.maxIndex=1;} else { result.minIndex = result.maxIndex -1;}
  return result;

  return result;

}

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

Вложения
2990052.png
Последний раз редактировалось jet-belan 15.06.2016{, 08:20}, всего редактировалось 1 раз.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#9

Сообщение jet-belan » 16.06.2016{, 11:19}

Появились вопросы... 

Достаточно ли такой схемы для передачи:


и такой для приёма:


Или нужно, что то ещё делать с блоками приёма и передачи радио модулей nrf24l01.
Блоки сейчас настроены по умолчанию.
Вложения
3501396.png
0027495.png

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#10

Сообщение Max » 16.06.2016{, 11:48}

jet-belan писал(а):Достаточно ли такой схемы для передачи
Можно попробовать, хотя можно и блоки Scale разместить в передатчике и далее в блок... Вообще, я сторонник создания переменной.
Последний раз редактировалось Max 16.06.2016{, 11:49}, всего редактировалось 1 раз.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#11

Сообщение jet-belan » 16.06.2016{, 20:38}

Если можно, по подробнее на счет переменных) как и где именно?

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#12

Сообщение Max » 16.06.2016{, 21:05}

Цитата jet-belan ()200?'200px':''+(this.scrollHeight+5)+'px');">Если можно, по подробнее на счет переменных) как и где именно?С аналоговых входов А0 и А1 на блок SCALE потом создаете переменные (допустим Analog1 и Analog2) и загоняете туда, а потом переменные на вход блока передатчика NRF.
Вложения
9290124.jpg

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#13

Сообщение jet-belan » 16.06.2016{, 23:07}

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

Добавлено (16.06.2016, 23:07)
---------------------------------------------
Кстати, а в чём прелесть переменной? Если из блока SCALE уже выходит 255 единиц в зависимости от положения джойстика. Я просто ещё мало в чем разбираюсь))

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#14

Сообщение Max » 17.06.2016{, 07:18}

jet-belan писал(а):Кстати, а в чём прелесть переменной?
Вы вообще свою тему начинали с кода. Я понимаю, что он не Ваш, но без переменных он бы просто не работал.
Переменная это некое значение (цифра, например), а вообще правильней - ячейка памяти. Заведя переменную, Вы можете её использовать в любом месте кода по своему усмотрению и согласно правил С.
Более развернуто тут и тут.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#15

Сообщение jet-belan » 17.06.2016{, 18:08}

Сделал вот так:


Как я понял, один из плюсов в моём случае тот, что переменная даст возможность при включении иметь данные по умолчанию. Например Byte 127, чтоб движки стояли при включении модели, передатчика или при отсутствии сигнала... я не ошибаюсь?

Добавлено (17.06.2016, 18:08)
---------------------------------------------
Если ошибаюсь, то как глубоко? пожалуйста поправьте)
Вложения
8162615.png
Последний раз редактировалось jet-belan 17.06.2016{, 18:11}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#16

Сообщение Max » 17.06.2016{, 18:47}

jet-belan писал(а):Например Byte 127, чтоб движки стояли при включении модели,
В принципе - да. В этих переменных будет значение входного сигнала, т.е. с потенциометров.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#17

Сообщение jet-belan » 17.06.2016{, 21:15}

А если их поставить и в приёмник со значением в 127 Byte? Тогда можно избежать случайного вращения двигателей при включении.

Добавлено (17.06.2016, 21:15)
---------------------------------------------
Именно при включении модели без пульта (передатчика).
Так сказать:
Безопасность пользователя превыше всего!
Всё-таки гребные винты - предметы опасные

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#18

Сообщение Max » 17.06.2016{, 21:23}

jet-belan писал(а):Именно при включении модели без пульта (передатчика).Так сказать:
Безопасность пользователя превыше всего!
Всё-таки гребные винты - предметы опасные
Я так понимаю, при потере сигнала надо останавливать вращение? Ну тут мне видится так: вариант с переменной в приемнике связанной с приемом сигнала, так сказать, синхронизации с пульта и в случае потери сигнала переменная в приемнике выключает винты.
Я вообще сторонник макетирования. Надо строить макет на столе и пробовать. Чисто теоретически трудно будет сразу попасть в точку и получить все, что хочется. Так что стройте макет и пробуйте нужный алгоритм.

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#19

Сообщение jet-belan » 20.06.2016{, 22:00}

Да, должна быть остановка при потере сигнала. А то на речке потом не угонишься за лодкой))
На счёт макетирования вы правы! Завтра вечером попробую.
Заказал с дуру с Китая nrf24l01 с микросхемой "каплей", 10 штук. Благо стоили 260 рублей всего. КТО ПРОЧИТАЛ, РЕКОМЕНДУЮ ЗАЛИТУЮ КОМПАУНДОМ МИКРОСХЕМУ НЕ ПОКУПАТЬ. Из них рабочих было штук 6. Остальные просто молчат как партизаны. Ну два я потом сжёг, как водится самолично, вот этими вот руками)) в общем, кто будет брать, берите с корпусными микросхемами

Добавлено (20.06.2016, 21:53)
---------------------------------------------
Ничего не получается с этим блоком под nrf24l01....
Видимо для радио управления он должен быть немного другой...

Добавлено (20.06.2016, 21:57)
---------------------------------------------
Может у кого нибудь получится запустить этот модуль именно в радио управлении

Добавлено (20.06.2016, 21:59)
---------------------------------------------
Без модуля nrf24l01 всё работает... А с ним движки с ходу начинают крутиться и ни на что не реагируют)))

Добавлено (20.06.2016, 22:00)
---------------------------------------------
Именно без блока nrf24

jet-belan
Рядовой
Сообщения: 75
Зарегистрирован: 17.04.2016{, 10:09}
Репутация: 0

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

#20

Сообщение jet-belan » 01.07.2016{, 22:19}

Всё ли правильно сделал с ПБ радио модулей? Поправьте пожалуйста, кто разбирается))
Вложения
7444296.flp
(1.41 МБ) 98 скачиваний

Ответить

Вернуться в «WiFi»