Радиоуправляемый катер из потолочки

vlad123419
Offline
Зарегистрирован: 25.03.2016

т.е. это map (511, 1023, 0, 180)

так получается?

AndreyS
Offline
Зарегистрирован: 26.06.2016

jeka_tm,а так то они одинаковые? Как я понял нет смысла переплачивать за встроенный блок пиания 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

vlad123419 ну поэкспериментируй, считывай значения с потенциометра преобразовывай и отправляй в терминал. больше самостоятельности

AndreyS да одинаковые

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm, подключил как описал

Перепробовал варианты 9,10  10,9  7,8  8,7

Выдает только

STATUS		 = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1	 = 0x0000000000 0x0000000000
RX_ADDR_P2-5	 = 0x00 0x00 0x00 0x00
TX_ADDR		 = 0x0000000000
RX_PW_P0-6	 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA		 = 0x00
EN_RXADDR	 = 0x00
RF_CH		 = 0x00
RF_SETUP	 = 0x00
CONFIG		 = 0x00
DYNPD/FEATURE	 = 0x00 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MIN

Проблема с передатчиком? Новый заказывать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ссылка на модуль который покупал, возможно подделка

ce scn пины ты куда подключил? конденсатор припаял? питание 3.3В? либа что я давал?

LYNX
Offline
Зарегистрирован: 21.03.2014

тут брал модуль

Напряжение 3.3В ровно. проверял. Кондексатор 10мкф на 25В. Либа что давал ты. CE - 10, SCN - 9.

сейчас заряжаю аккумы на макс, повторю проверку, мало ли

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

при чем тут аккумуляторы? питается не от ардуины?

LYNX
Offline
Зарегистрирован: 21.03.2014

нет, от аккумов все.

Зарядил, осталось все тоже самое. Тогда наверно проблема с модулем

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

LYNX
Offline
Зарегистрирован: 21.03.2014

От УСБ тоже самое.

Подключен только сам модуль. Соединено все проводами.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Почитай вот тут первую страничку

http://forum.amperka.ru/threads/nrf24l01-%D0%BF%D0%BE%D0%B1%D0%B5%D0%B6%...

vlad123419
Offline
Зарегистрирован: 25.03.2016

Спасибо за пинок ))))))

LYNX
Offline
Зарегистрирован: 21.03.2014

Все перепробовал, выдает только 2 результата, либо

STATUS		 = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1	 = 0x0000000000 0x0000000000
RX_ADDR_P2-5	 = 0x00 0x00 0x00 0x00
TX_ADDR		 = 0x0000000000
RX_PW_P0-6	 = 0xff 0xff 0xff 0xff 0xff 0x00
EN_AA		 = 0x00
EN_RXADDR	 = 0x00
RF_CH		 = 0x00
RF_SETUP	 = 0xff
CONFIG		 = 0xff
DYNPD/FEATURE	 = 0xff 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MAX

Либо

STATUS		 = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1	 = 0x0000000000 0x0000000000
RX_ADDR_P2-5	 = 0x00 0x00 0x00 0x00
TX_ADDR		 = 0x0000000000
RX_PW_P0-6	 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA		 = 0x00
EN_RXADDR	 = 0x00
RF_CH		 = 0x00
RF_SETUP	 = 0x00
CONFIG		 = 0x00
DYNPD/FEATURE	 = 0x00 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MIN

Модуль дохлый или подключение не верное?

От USB напряжение на модуле 2.5В - 2.9В (в разное время разное) С отключенным модулем 3.32В

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да хз. похоже модуль

vlad123419
Offline
Зарегистрирован: 25.03.2016

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

 

Сделал крышку, решил поднять катер, сделал второй этаж, пазы, установил электронику и т.д. ...

все работает, пока что...

пульт сделал на соплях, для пробных испытаний...

Спасибо jeka_tm, за его вклад в эту тему и за личную помощь мне!!!!!
СПАСИБО!!!!
 

Возможно еще обращаться буду, надеюсь ты не против)

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Спасибо!!!
Да, с подушкой это это гемор, но сил и терпения тебе желаю!!!

Удачи тоже)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Понятно))) Что ещё в планах?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

комнатный маленький квадрокоптер, планер чтобы уложится в 250гр по закону без регистрации, электронная нагрузка с дисплеем, люксметр из плеера (возможно еще добавить измеритель температуры и влажности), пушка для пластиковых или стальных шариков с электромагнитным толкателем, дозатор паяльной пасты переделать на другой привод, светодиодный анализатор спектра на 74hc595 и MSGEQ7, освоить гидропонику на капельном поливе, сделать новый бокс для огурцов, контроллер бокса с сенсорным дисплеем и/или wifi, доделать манипулятор (игрушка). пока вроде все

AndreyS
Offline
Зарегистрирован: 26.06.2016

Круто!!!! 

vlad123419
Offline
Зарегистрирован: 25.03.2016

Респект!!!))

vlad123419
Offline
Зарегистрирован: 25.03.2016

А квадрокоптеры надо регестрировать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Что то мне кажется это слишком жестоко, да и какой мент к игрушке прицепится?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

http://www.vedomosti.ru/technology/articles/2016/07/06/648091-droni-vileteli-reestra

уже не надо)) поправку внесли. до 30кг не нужно))

а вообще любой, незаконная съемка и т.п. было бы желание

vlad123419
Offline
Зарегистрирован: 25.03.2016

Ну да, слушай, а как думаешь, можно построить контроллер для квадрокоптера на ардуино?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Да , я видел))

Сложно наверное...

 

vlad123419
Offline
Зарегистрирован: 25.03.2016

Ходил вчера на пруд, запускал лодку....

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а видео где? у тебя мотор сколько KV?

vlad123419
Offline
Зарегистрирован: 25.03.2016

Мотор от квадрокоптеров, 2450 kv, видео сегодня, но позже...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

От этого скорость повысится?

А вот если винт не совсем ровный будет? Ничего страшного?

А что с поворотом на право посоветуешь?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

измени изначальный угол/ноль руля

vlad123419
Offline
Зарегистрирован: 25.03.2016

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

int R_trim = map(analogRead(Right_trim), 0, 1023, 0, 180);
if(analogRead(Right_joy_horizon) < 512)
R_joy_hor = map(analogRead(Right_joy_horizon), 0, 511, 0, R_trim);
else
R_joy_hor = map(analogRead(Right_joy_horizon), 512, 1023, R_trim, 180);

Вот полный код : 

#include <SPI.h>          
#include <nRF24L01.h>
#include <RF24.h>
byte msg[8];
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9, 10);

int Right_joy_vertical = 0;
int Right_joy_horizon = 1;
// int Left_joy_horizon = 2;
int Left_joy_vertical = 3;
int Right_trim = 6;
int Left_trim = 7;

byte Right_tumb_3pos_forward = 3;
byte Right_tumb_3pos_back = 4;
byte Right_tumb_2pos = 5;
byte Left_tumb_2pos = 6;
byte Left_tumb_3pos_back = 7;
byte Left_tumb_3pos_forward = 8;

byte R_joy_hor;

void setup() {
pinMode(Right_tumb_3pos_back, INPUT);
pinMode(Right_tumb_3pos_forward, INPUT);
pinMode(Right_tumb_2pos, INPUT);
pinMode(Left_tumb_2pos, INPUT);
pinMode(Left_tumb_3pos_forward, INPUT);
pinMode(Left_tumb_3pos_back, INPUT);

radio.begin();
  delay(50);
  radio.setChannel(9);
  radio.setPayloadSize(8);
  radio.setRetries(1,1);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openWritingPipe(pipe);
}

void loop() {
int R_trim = map(analogRead(Right_trim), 0, 1023, 0, 180);
if(analogRead(Right_joy_horizon) < 512)
R_joy_hor = map(analogRead(Right_joy_horizon), 0, 511, 0, R_trim);
else
R_joy_hor = map(analogRead(Right_joy_horizon), 512, 1023, R_trim, 180);

if (digitalRead(Right_tumb_3pos_forward) == 1){
msg[0] = map(R_joy_hor, 0, 180, 45, 135);}
if (digitalRead(Right_tumb_3pos_back) == 0 && digitalRead(Right_tumb_3pos_forward)== 0){
msg[0] = map(R_joy_hor, 0, 180, 22, 158);}
if (digitalRead(Right_tumb_3pos_back) == 1){msg[0] = R_joy_hor;}

int L_trim = map(analogRead(Left_trim), 0, 1023, 0, 180);
if(analogRead(Right_joy_vertical) < 512)
msg[1] = map(analogRead(Right_joy_vertical), 0, 511, 0, L_trim);
else
msg[1] = map(analogRead(Right_joy_vertical), 512, 1023, L_trim, 180);

if (digitalRead(Left_tumb_3pos_forward) == 1){
msg[2] = map(analogRead(Left_joy_vertical), 0, 1023, 0, 90);}
if (digitalRead(Left_tumb_3pos_back) == 0 && digitalRead(Left_tumb_3pos_forward)== 0){
msg[2] = map(analogRead(Left_joy_vertical), 0, 1023, 0, 135);}
if (digitalRead(Left_tumb_3pos_back) == 1){
msg[2] = map(analogRead(Left_joy_vertical), 0, 1023, 0, 180);}

msg[3] = digitalRead(Right_tumb_2pos);
msg[4] = digitalRead(Left_tumb_2pos);
radio.write(&msg, sizeof(msg));
}

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

Мотор греется, но он бодувается кулером

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

можешь написать как?

ну как это выгляжит пж

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да просто. тут для меня 3 варианта как задается триммирование:

1. изначально в коде, неудобно

2. переменый резистор

3. кнопки

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

#define down_vert=10; //максимум угла сверху/слева 
#define up_vert=170;  //максимум угла снизу/справа
int trim=0;
int vertical=0;

.....

trim     = map(analogRead(A5), 0, 1023, -15, 15) // например максимум триммирования +-15 градусов. резистор триммирования висит на А5
vertical = map(analogRead(Left_joy_vertical), 0, 1023, down_vert, up_vert) + trim;
if(vertical<down_vert) vertical=down_vert;       //если меньше минимума то уставливаем минимум
if(vertical>up_vert)   vertical=up_vert;         //если больше минимума то уставливаем максимум
msg[2]=vertical;

 

 

vlad123419
Offline
Зарегистрирован: 25.03.2016

Твой пример не работае, поправь, если можно!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

Left_joy_vertical - Это что за переменная, ты ее не объявлял!

А, все понял....

Только не хочет грузиться, выдает ошибку в строке

#define up_vert=170;

Пишет : expected primary-expression before '=' token

 

 

 

Дополнение: разобрался, заработало! Спасибо!

vlad123419
Offline
Зарегистрирован: 25.03.2016

Теперь сделаю расход газа

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да я там неправильно написал, надо без равно и точки с запятой. та переменная из кода. просто меняешь на свою

vlad123419
Offline
Зарегистрирован: 25.03.2016

Да, я поправил!

Код получился такой:

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

#define Left_joy_vertical A0
#define motor_pin A1
int up_vert=170;
int down_vert=10; //максимум угла сверху/слева
  //максимум угла снизу/справа

int trim=0;

int vertical=0;

const uint64_t pipe = 0xF0F1F2F3F4LL; 
RF24 radio(9,10);
byte msg[2]; 

void setup(){
  radio.begin();
  delay(50);
  radio.setChannel (9);
  radio.setPayloadSize (8);
  radio.setRetries (1,1);
  radio.setDataRate (RF24_250KBPS);
  radio.setPALevel (RF24_PA_HIGH);
  radio.openWritingPipe(pipe); 
}

void loop(){
  msg[0] = map(analogRead(motor_pin), 250, 1023, 0, 180);

  trim     = map(analogRead(A2), 0, 1023, -15, 15); // например максимум триммирования +-15 градусов. резистор триммирования висит на А5
vertical = map(analogRead(Left_joy_vertical), 0, 1023, down_vert, up_vert) + trim;
if(vertical<down_vert) vertical=down_vert;       //если меньше минимума то уставливаем минимум
if(vertical>up_vert)   vertical=up_vert;         //если больше минимума то уставливаем максимум
msg[1]=vertical;

  radio.write (&msg, sizeof (msg));
}

Смотри, сделал расход, т.е. меняю значение регулятора от 90 до 180, т.е. потом через map записываю...

Может не очень понятно объяснил, вот тут код, там поймешь :

int trim = map(analogRead (A3), 0, 1023, 90, 180);
  int gas = map(analogRead(motor_pin), 250, 1023, 0, trim);
  msg[0] = gas;

Но вот когда на A3 значение 1023и когда джойстик стоит посредине, то мотор сам начинает крутиться, но не на максимальной скорости, как это убрать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в 30 строке не от нуля у тебя указаны значения ацп. если диапазоны неодинаковы то нужно разбить на 2 участка диапазон, а так у тебя в середине джойстика не 90 после map а например 100

триммирование работает?

vlad123419
Offline
Зарегистрирован: 25.03.2016

Да, триммирование работает, спаибо за очередную помощь, всё ок.

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

Вот насчет расхода газа буду еще думать...

И ты меня не правильно понял, джойстик притягивается к середине, по этому когда он на середине, в ESC должно идти 0, а когда до конца от себя 1023...

И что-то под вечер котелок не варит, как на два диапозона, как это?

Извиняюсь за нубовские вопросы!

Спасибо тебе, jeka_tm, надеюсь я тебе не надоел

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на esc должно идти 0 и 180. но ты же диапазон для мар указал от 250 до 1023. 30 строка. должно быть от 0 до 1023. короче экспериментируй больше

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

vlad123419
Offline
Зарегистрирован: 25.03.2016

СПАСИБО!