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

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

jeka_tm, а у Вашего 540 движка какие токи?

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

пусковые 10 или выше. нечем измерить. холостой ход почти 2А, рабочий наверно 5. точно не помню

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

Всем привет :)

Пришла платка стм на тесты. С помощью cp2102 можно загрузить код или только st-link?

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

не знаю есть ли stm8 загрузка по uart, вроде нет. вопрос не по теме. задавай в соответствующей

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

заказал модуль для связи

Нужно ли к нему адаптер? Понятно что не обязательно, но на сколько удобнее с ним, стоит ли брать?

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

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

ivan_kruglow
Offline
Зарегистрирован: 30.06.2016

jeka_tm Привет очень понравилась схема 6 канального приемника , есть схема ? Буду очень рад если есть плата в формате Sprint layaut 

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

плата есть, но только diptrace.  

Плата односторонняя
Детали:
1. Atmega8
2. NRF24L01
3. AMS1117-3.3. 
4. 10мкф 1206 2 шт. (один на плату, другой на NRF24L01 паяется)

Питание приемника берется от ВЕС драйвера.
Одна часть драйвера припаивается к другой под углом. но фото видно

6 канальный приемник

 

ivan_kruglow
Offline
Зарегистрирован: 30.06.2016

Спасибо , а что за формат dip ? 

Есть принцыпиальная схема ?

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

схемы нет, там деталей то)) скачай программу dip trace

ivan_kruglow
Offline
Зарегистрирован: 30.06.2016

А есть программа для atmega ?

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

нет конечно. она пишется под железо

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

Привет jeka_tm,

Подскажи как подключать драйвер (уточнить хотел)

Код твой загрузил, двигатель попискивал и чуть крутился.

Я подключал:

короткие 2: питание от аккумов 7В

длинные 2: мотор

тройной: питание ардуино и 11 пин (у тебя он Д5)

По коду еще аналоговый используется, это по идее серво? (моя пока в пути)

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

а какой тебя драйвер? (уточнить хотел)

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

jeka_tm пишет:

а какой тебя драйвер? (уточнить хотел)

XYS-BL20A

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

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

а какой мой код загрузил?

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

jeka_tm пишет:

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

а какой мой код загрузил?

 

Этот код

#include <Servo.h> 
#include <SPI.h>
#include "v202_protocol.h"
nrf24l01p wireless; 
v202Protocol protocol;

Servo servo;

#define power A5
#define motor  5

unsigned long time =0;
unsigned long state=0;
boolean flag=0;
boolean led=0;

void setup() {
  pinMode(SS,    OUTPUT);
  pinMode(power, OUTPUT);
  pinMode(motor, OUTPUT);

  wireless.setPins(A1,A0);
  protocol.init(&wireless);

  Serial.begin(9600);
  Serial.println("Start");
  digitalWrite(power, 1);

  servo.attach(3);
  time=millis();
}

rx_values_t rxValues;
bool bind_in_progress = false;

void loop(){
  
  uint8_t value = protocol.run(&rxValues); 

  switch( value )  {
  case  BIND_IN_PROGRESS:
    if(!bind_in_progress){
      bind_in_progress = true;
      Serial.println("Bind in progress");
    }
    break;

  case BOUND_NEW_VALUES:
    Serial.print(rxValues.throttle);
    Serial.println(rxValues.roll);
    digitalWrite(power, 1);
    analogWrite(motor, rxValues.throttle);
    servo.write(map(rxValues.roll+rxValues.trim_roll, -127, 127, 5, 175));
    flag=1;
    time=millis();
    state=millis();
    break;

  case BOUND_NO_VALUES:
    flag=0;
    break;
  }
  delay(2);
  if((millis()-time)>1000 && !flag){
    analogWrite(motor, 0);
    servo.write(90+rxValues.trim_roll);
  }
  if((millis()-state)>300 && !flag){
    state=millis();
    digitalWrite(power, led);
    led=!led;
  }
  if((millis()-time)>2000 && !flag){
    time=millis();
    protocol.init(&wireless);
  }
}

 

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

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

по коду подключи на 3 пин

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

Привет jeka_tm,

Я заказал драйвер L298n, с мыслью о том, что запаралелю каналы (каждый по 2а, в сумме 4 а) , контроллером задать рампу и избавиться от больших пусковых токов, для 390 должно хватить. А сейчас засомневался!!!! Подскажи, а вообще их можно объединять  и будет ли эффект удвоения мощности ???

 

 

 

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

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

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

Нужен совет по аккумуляторам. У меня есть батарейки от батареи для ноутбука 18650  3,7 вольта 10 штук, емкость не известна, я думаю 2200мАh, получается 11 аh? На сколько по времени(примерно) хватит при использовании двух 390 моторчиков? Какие минусы у такого решения?

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

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

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

Проверил свип.

Чуть справо пытается крутиться и пищит, потом влево. Провода греются сильно (макетные)

Если подтолкнуть винт то какое то время просто крутиться пропеллер

По питаю на RSS - 6-7В. На двигатель доходит 0 - 0.37 В. Использую 2s2p

Код

#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
int pos = 0;    // variable to store the servo position 
void setup() 
{ 
  myservo.attach(3);  // attaches the servo on pin 9 to the servo object 
} 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
} 

От драйвера в ардуино на D3. На D11 как раньше тоже самое.

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

догадался что ты делал неправильно?

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

jeka_tm пишет:

догадался что ты делал неправильно?

Пин или питание неверно подал, но вроде все указано верно

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

провода для начала нормальные, толстые медные. мотор потребляет много

измерь питание под нагрузкой на самом драйвере

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

Все верно, провода от двигателя до драйвера только толстые должны быть. Стал нормально работать

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

По коду

#include <Servo.h> 
#include <SPI.h>
#include "v202_protocol.h"
nrf24l01p wireless; 
v202Protocol protocol;

Servo servo;

#define power A5
#define motor  3

unsigned long time =0;
unsigned long state=0;
boolean flag=0;
boolean led=0;

void setup() {
  pinMode(SS,    OUTPUT);
  pinMode(power, OUTPUT);
  pinMode(motor, OUTPUT);

  wireless.setPins(A1,A0);
  protocol.init(&wireless);

  Serial.begin(9600);
  Serial.println("Start");
  digitalWrite(power, 1);

  servo.attach(3);
  time=millis();
}

rx_values_t rxValues;
bool bind_in_progress = false;

void loop(){
  
  uint8_t value = protocol.run(&rxValues); 

  switch( value )  {
  case  BIND_IN_PROGRESS:
    if(!bind_in_progress){
      bind_in_progress = true;
      Serial.println("Bind in progress");
    }
    break;

  case BOUND_NEW_VALUES:
    Serial.print(rxValues.throttle);
    Serial.println(rxValues.roll);
    digitalWrite(power, 1);
    analogWrite(motor, rxValues.throttle);
    servo.write(map(rxValues.roll+rxValues.trim_roll, -127, 127, 5, 175));
    flag=1;
    time=millis();
    state=millis();
    break;

  case BOUND_NO_VALUES:
    flag=0;
    break;
  }
  delay(2);
  if((millis()-time)>1000 && !flag){
    analogWrite(motor, 0);
    servo.write(90+rxValues.trim_roll);
  }
  if((millis()-state)>300 && !flag){
    state=millis();
    digitalWrite(power, led);
    led=!led;
  }
  if((millis()-time)>2000 && !flag){
    time=millis();
    protocol.init(&wireless);
  }
}

Серво на D3, а RX TX на NRF24L01 ?

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

RX TX у  NRF24L01 нет. там spi. а пины cs и ss это тут описано:

wireless.setPins(A1,A0)

и сворачивать код не забывай, исправь

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

jeka_tm спасибо, буду ждать NRF24L01 значит. И серво :)

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

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

Gladozik
Offline
Зарегистрирован: 01.08.2016

А топик живой ещё? 

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

Живой, детальки шли. Вчера только получил последнее недостающее. Скоро выложу что у меня получилось

Gladozik
Offline
Зарегистрирован: 01.08.2016

А, ну, нормално тогда. Тоже жду свои недостающие

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

Привет jeka_tm,

Подключил все, но не крутится.

Пины так понимаю не туда. С пультом нужно что-то еще делать?

Вот код

#include <Servo.h> 
#include <SPI.h>
#include "v202_protocol.h"
nrf24l01p wireless; 
v202Protocol protocol;

Servo servo;

#define power A5
#define motor  4

unsigned long time =0;
unsigned long state=0;
boolean flag=0;
boolean led=0;

void setup() {
  pinMode(SS,    OUTPUT);
  pinMode(power, OUTPUT);
  pinMode(motor, OUTPUT);

  wireless.setPins(A1,A0);
  protocol.init(&wireless);

  Serial.begin(9600);
  Serial.println("Start");
  digitalWrite(power, 1);

  servo.attach(3);
  time=millis();
}

rx_values_t rxValues;
bool bind_in_progress = false;

void loop(){
  
  uint8_t value = protocol.run(&rxValues); 

  switch( value )  {
  case  BIND_IN_PROGRESS:
    if(!bind_in_progress){
      bind_in_progress = true;
      Serial.println("Bind in progress");
    }
    break;

  case BOUND_NEW_VALUES:
    Serial.print(rxValues.throttle);
    Serial.println(rxValues.roll);
    digitalWrite(power, 1);
    analogWrite(motor, rxValues.throttle);
    servo.write(map(rxValues.roll+rxValues.trim_roll, -127, 127, 5, 175));
    flag=1;
    time=millis();
    state=millis();
    break;

  case BOUND_NO_VALUES:
    flag=0;
    break;
  }
  delay(2);
  if((millis()-time)>1000 && !flag){
    analogWrite(motor, 0);
    servo.write(90+rxValues.trim_roll);
  }
  if((millis()-state)>300 && !flag){
    state=millis();
    digitalWrite(power, led);
    led=!led;
  }
  if((millis()-time)>2000 && !flag){
    time=millis();
    protocol.init(&wireless);
  }
}

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

Серво на пин Д3, Двигатель Д4

A5 - по коду лампочка?

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

А у меня пришло всё, кроме самого главного-водометов(((. Ждёмс...

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

Кстати, NRF24L01 не заработали пока не припаял кондеры.

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

Как припаявал и какие

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

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

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

Заметил что CE и MISO вместе соединить.

GRD, VCC, IRQ и MISO только используются. А я все подключал))

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

Пока что без кондеров пробовал, не получилось, на 5В греется сильно, на 3.3В терпимо. Вечером поищу от куда выпаюсь кондеры

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

Почитав много тем сделал вывод, что питание должно быть 3,3 В. Подключал все выводы кроме IRQ(8), кондеры между 3,3в(2) и GND(1).

Apolsys
Apolsys аватар
Offline
Зарегистрирован: 07.06.2016

Мне тоже модули пришли, одна плата передача идет через порт монитор, Rx мигает, а вторая плата молчит, как только втыкаешь ее в ардуино тормозит сразу все, даже Rx перестает мигать((( остальные запчасти все пришли, получается что вся работа встала из за nrf24

Позже выложу фото как стыковал

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

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

Подключал так, вдруг поможет

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

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

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

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

Тест в либе не помог

/* v202_rx.ino -- An arduino sketch to test the protocol v202
 *
 * Copyright (C) 2014 Alexandre Clienti
 *
 * This software may be modified and distributed under the terms
 * of the MIT license.  See the LICENSE file for details.
 */

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

nrf24l01p wireless; 
v202Protocol protocol;

unsigned long time = 0;
 
// the setup routine runs once when you press reset:
void setup() {
  // SS pin must be set as output to set SPI to master !
  pinMode(SS, OUTPUT);
  Serial.begin(115200);
  // Set CS pin to D7 and CE pin to D8
  wireless.setPins(A1,A0);
  protocol.init(&wireless);
  
  time = micros();
  Serial.println("Start");
}

rx_values_t rxValues;

bool bind_in_progress = false;
unsigned long newTime;

void loop() 
{
  time = micros();
  uint8_t value = protocol.run(&rxValues); 
  newTime = micros();
   
  switch( value )
  {
    case  BIND_IN_PROGRESS:
      if(!bind_in_progress)
      {
        bind_in_progress = true;
        Serial.println("Bind in progress");
      }
    break;
    
    case BOUND_NEW_VALUES:
      //newTime = micros();
      Serial.print(newTime - time); //120 ms for 16 Mhz
      Serial.print(" :\t");Serial.print(rxValues.throttle);
      Serial.print("\t"); Serial.print(rxValues.yaw);
      Serial.print("\t"); Serial.print(rxValues.pitch);
      Serial.print("\t"); Serial.print(rxValues.roll);
      Serial.print("\t"); Serial.print(rxValues.trim_yaw);
      Serial.print("\t"); Serial.print(rxValues.trim_pitch);
      Serial.print("\t"); Serial.print(rxValues.trim_roll);
      Serial.print("\t"); Serial.println(rxValues.flags);
      //time = newTime;
    break;
    
    case BOUND_NO_VALUES:
      //Serial.print(newTime - time); Serial.println(" : ----"); // 32ms for 16Mhz
    break;
    
    default:
    break;
  }
  delay(2);
}

Так же показывает только старт

Распиновка ардуино

Распиновка модуля связи

3.3В брал с програматора ардуино

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

Кондесаторы не помогли, видимо где то в другом проблема

Apolsys
Apolsys аватар
Offline
Зарегистрирован: 07.06.2016

Имено так и делал, тестировал через встроиный пример GettingStarted, питалось от UNO 3.3в, на +- напаяны кондеры. И подчеркну, что 1 модуль работает, а второй вешает монитор порта при подключении, может это быть из за не рабочего кондера? Хотя на внешний вид он нормальный и при замерах мультиметр выдает стабильно 3.35в не дергаясь.