Tarot FY680 HexaCopter

shalex
sulaex:

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

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

случайно не смотрели уже в инете - есть ли готовый код для ардуины?

есть готовые примеры работы Арду с RC-приемником и сонаром, черновой вариант программы сделать достаточно просто, но возможны нюансы, да и зачем велосипед изобретать ))

websid

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

shalex
websid:

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

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

websid
shalex:

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

у ретрактора только 2 позиции (0 и 90 градусов). Подал сигнал - он переходит крайнюю позицию. По крайней мере так обстоят дела у этого www.rctimer.com/product_716.html

shalex
websid:

у ретрактора только 2 позиции (0 и 90 градусов). Подал сигнал - он переходит крайнюю позицию. По крайней мере так обстоят дела у этого www.rctimer.com/product_716.html

спасибо за инфу!

представляю черновой код для управления шасси на сервах/ретракторах с помощью сонара SRF05, Arduino Nano.
протестировано на обычной серве

Подключение:
- сонара

перед использованием выставить:
 SERVO_LEGS_ARMED - угод сервы для положения “ноги выпущены”
SERVO_LEGS_DISARMED - угод сервы для положения “ноги убраны”
ALT_ARMED_TRIGGER - высота для срабатывания “ноги выпустить”, сантиметры
JUST_ARMED_DELAY - задержка после которой ноги могут быть переведены из “выпущено” в “убраны” в милисекундах
SERVO_EXEC_DELAY - задержка для отрабатывания сервы в милисекундах. подбирается экспериментально, зависит от типа сервы

для развития:
 усреднить показания сонара для исключения скачков и пролетающих мух ))
добавить включение светодиода(+лазер-крест) в положении “ноги выпущены”
добавить управление морганием навигационных огней
управление шасси с аппы

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

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

#include <Servo.h>

//servo
#define SERVO_LEGS_ARMED 0          //servo agnle for arm legs mode
#define SERVO_LEGS_DISARMED 90      //servo agnle for disarm legs mode

//modes
#define MODE_ARMED 1      //legs armed mode
#define MODE_JUST_ARMED 2 //legs just armed mode
#define MODE_DISARMED 3   //legs disarmed mode
#define MODE_SERVO_EXEC 4   //legs disarmed mode


//alt trigger
#define ALT_ARMED_TRIGGER 50         //in cm

//modes details
#define JUST_ARMED_DELAY 3000        //delay after legs arm in millisec
#define SERVO_EXEC_DELAY 1000        //delay for servo executing in millisec

//pins
#define PIN_SERVO 9                    //pin to arm/disarm legs servo
#define PIN_SONAR_ECHO 2               // Pin to receive echo pulse
#define PIN_SONAR_TRIG 3               // Pin to send trigger pulse

//vars
Servo myservo;                         // create servo object to control a servo
byte CurrentMode;                      //current legs mode
byte AfterExecMode;
unsigned long JustArmedStart;          //just armed mode start time
unsigned long ServoExecStart;          //servo start time

void ServoStart(byte AfterMode, int Angle)
{
  myservo.write(Angle);
  ServoExecStart = millis();
  AfterExecMode = AfterMode;
}


void setup()
{
  myservo.attach(PIN_SERVO);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
  pinMode(PIN_SONAR_ECHO, INPUT);
  pinMode(PIN_SONAR_TRIG, OUTPUT);
  JustArmedStart = millis();
  ServoStart(MODE_ARMED, SERVO_LEGS_ARMED);
  CurrentMode = MODE_SERVO_EXEC;
}

void loop()
{
  int distance;
  byte newMode;                          //calculated legs mode

  digitalWrite(PIN_SONAR_TRIG, LOW);                   // Set the trigger pin to low for 2uS
  delayMicroseconds(2);
  digitalWrite(PIN_SONAR_TRIG, HIGH);                  // Send a 10uS high to trigger ranging
  delayMicroseconds(10);
  digitalWrite(PIN_SONAR_TRIG, LOW);                   // Send pin low again
  distance = pulseIn(PIN_SONAR_ECHO, HIGH);            // Read in times pulse
  distance= distance/58;                               // Calculate distance from time of pulse

  Serial.println(distance);

  newMode = CurrentMode;

  switch (CurrentMode) {
    case MODE_ARMED:
      if (distance > ALT_ARMED_TRIGGER) newMode = MODE_DISARMED;
      break;
    case MODE_JUST_ARMED:
      if ((millis()-JustArmedStart) > JUST_ARMED_DELAY) newMode = MODE_ARMED;
      break;
    case MODE_DISARMED:
      if (distance < ALT_ARMED_TRIGGER) {
        newMode = MODE_JUST_ARMED;
        JustArmedStart = millis();
      }
      break;
    case MODE_SERVO_EXEC:
      if ((millis()-ServoExecStart) > SERVO_EXEC_DELAY) newMode = AfterExecMode;
      break;
  }
  if ((newMode == MODE_JUST_ARMED) & (CurrentMode==MODE_DISARMED)) {
    ServoStart(newMode, SERVO_LEGS_ARMED);
    newMode =MODE_SERVO_EXEC;
  }
  if ((newMode == MODE_DISARMED) & (CurrentMode==MODE_ARMED)) {
    ServoStart(newMode, SERVO_LEGS_DISARMED);
    newMode =MODE_SERVO_EXEC;
  }
  CurrentMode = newMode;
  delay(50);
}
Aviamodelist
shalex:

спасибо за инфу!

представляю черновой код для управления шасси на сервах/ретракторах с помощью сонара SRF05, Arduino Nano.
протестировано на обычной серве

Подключение:
- сонара

перед использованием выставить:
 SERVO_LEGS_ARMED - угод сервы для положения “ноги выпущены”
SERVO_LEGS_DISARMED - угод сервы для положения “ноги убраны”
ALT_ARMED_TRIGGER - высота для срабатывания “ноги выпустить”, сантиметры
JUST_ARMED_DELAY - задержка после которой ноги могут быть переведены из “выпущено” в “убраны” в милисекундах
SERVO_EXEC_DELAY - задержка для отрабатывания сервы в милисекундах. подбирается экспериментально, зависит от типа сервы

для развития:
 усреднить показания сонара для исключения скачков и пролетающих мух ))
добавить включение светодиода(+лазер-крест) в положении “ноги выпущены”
добавить управление морганием навигационных огней
управление шасси с аппы

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

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


#include <Servo.h>

//servo
#define SERVO_LEGS_ARMED 0          //servo agnle for arm legs mode
#define SERVO_LEGS_DISARMED 90      //servo agnle for disarm legs mode

//modes
#define MODE_ARMED 1      //legs armed mode
#define MODE_JUST_ARMED 2 //legs just armed mode
#define MODE_DISARMED 3   //legs disarmed mode
#define MODE_SERVO_EXEC 4   //legs disarmed mode


//alt trigger
#define ALT_ARMED_TRIGGER 50         //in cm

//modes details
#define JUST_ARMED_DELAY 3000        //delay after legs arm in millisec
#define SERVO_EXEC_DELAY 1000        //delay for servo executing in millisec

//pins
#define PIN_SERVO 9                    //pin to arm/disarm legs servo
#define PIN_SONAR_ECHO 2               // Pin to receive echo pulse
#define PIN_SONAR_TRIG 3               // Pin to send trigger pulse

//vars
Servo myservo;                         // create servo object to control a servo
byte CurrentMode;                      //current legs mode
byte AfterExecMode;
unsigned long JustArmedStart;          //just armed mode start time
unsigned long ServoExecStart;          //servo start time

void ServoStart(byte AfterMode, int Angle)
{
 myservo.write(Angle);
 ServoExecStart = millis();
 AfterExecMode = AfterMode;
}


void setup()
{
 myservo.attach(PIN_SERVO);  // attaches the servo on pin 9 to the servo object
 Serial.begin(9600);
 pinMode(PIN_SONAR_ECHO, INPUT);
 pinMode(PIN_SONAR_TRIG, OUTPUT);
 JustArmedStart = millis();
 ServoStart(MODE_ARMED, SERVO_LEGS_ARMED);
 CurrentMode = MODE_SERVO_EXEC;
}

void loop()
{
 int distance;
 byte newMode;                          //calculated legs mode

 digitalWrite(PIN_SONAR_TRIG, LOW);                   // Set the trigger pin to low for 2uS
 delayMicroseconds(2);
 digitalWrite(PIN_SONAR_TRIG, HIGH);                  // Send a 10uS high to trigger ranging
 delayMicroseconds(10);
 digitalWrite(PIN_SONAR_TRIG, LOW);                   // Send pin low again
 distance = pulseIn(PIN_SONAR_ECHO, HIGH);            // Read in times pulse
 distance= distance/58;                               // Calculate distance from time of pulse

 Serial.println(distance);

 newMode = CurrentMode;

 switch (CurrentMode) {
   case MODE_ARMED:
     if (distance > ALT_ARMED_TRIGGER) newMode = MODE_DISARMED;
     break;
   case MODE_JUST_ARMED:
     if ((millis()-JustArmedStart) > JUST_ARMED_DELAY) newMode = MODE_ARMED;
     break;
   case MODE_DISARMED:
     if (distance < ALT_ARMED_TRIGGER) {
       newMode = MODE_JUST_ARMED;
       JustArmedStart = millis();
     }
     break;
   case MODE_SERVO_EXEC:
     if ((millis()-ServoExecStart) > SERVO_EXEC_DELAY) newMode = AfterExecMode;
     break;
 }
 if ((newMode == MODE_JUST_ARMED) & (CurrentMode==MODE_DISARMED)) {
   ServoStart(newMode, SERVO_LEGS_ARMED);
   newMode =MODE_SERVO_EXEC;
 }
 if ((newMode == MODE_DISARMED) & (CurrentMode==MODE_ARMED)) {
   ServoStart(newMode, SERVO_LEGS_DISARMED);
   newMode =MODE_SERVO_EXEC;
 }
 CurrentMode = newMode;
 delay(50);
}

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

shalex
Aviamodelist:

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

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

blind_oracle
shalex:

как должна работать кнопка принудительного выпуска шасси

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

Aviamodelist
shalex:

как должна работать кнопка принудительного выпуска шасси

кнопку нажал-убралось, опять нажал-выпустилось)) а то вдруг сонар заглючит(но это если не подключать к аппе)

shalex
Aviamodelist:

кнопку нажал-убралось, опять нажал-выпустилось)) а то вдруг сонар заглючит(но это если не подключать к аппе)

спасибо за внимание к теме, отличная идея! не люблю роботов без кнопки “выкл”

blind_oracle:

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

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

управление с аппы:

  • шасси управляется 2-х позиционным тумблером с аппы; есть два режима: 1)шасси всегда выпущено(по умолчанию), 2) авто-режим (сонар);
  • если аппа включена и тумблер в положении по умолчанию, то шасси выпущено;
  • если аппа включена и тумблер в положении “авто”, то положение шасси определяется по сонару;
  • если аппа выключена, то шасси в режиме “всегда выпущено”;

управление на шасси:

  • плюсом нужна кнопка(или тумблер, что проще) на самой Ардуине, у которой два режима:1) любая автоматика отключена - шасси всегда выпущено; 2) автоматика включена. см. управление с аппы

вопросы:

  • каким выбрать минимальный сигнал с аппы, после которого аппа будет считаться выключенной?
  • какой уровень сигнала аппы выбрать, после которого срабатывает режим “автоматика включена”?
shalex

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

добавил подключение аппы, фильтр для сонара(усреднение против кустов и травы) и фильтр для пульта(вкл/выкл, помехи)

все работает по нехитрому принципу:

  • если аппа выключена-шасси выпущены всегда
  • с пульта управляется в двух режимах: шасси выпущены или авто (по сонару)
  • есть пауза после перехода “убрано”-“выпущено”, чтобы ногами не махал около земли или над кустами)))
shalex

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

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

пожелания и критика категорически приветствуются!

осталось дождаться ретракторов, а потом присмотреть 3х осевой подвес на БК, собственно ради чего и затевался подъем ног в полете, т.к. как летать толком не умею, а подвес 2х осевой и “режиссер” постоянно сетует, что кадр не тот ))

серёга_питерскый

Ура, вот и ко мне пришла моя рама 960s, вместе с ней и подвес таротовский,до утра время не много осталось, кофе,отвертки,локтайт, в путь.

shalex
shalex:

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

открыл для себя Processing и накидал GUI для настройки робо-шасси через USB-шнурок
интерфейс аксетичен и пока не умеет передавать на плату шаблоны моргания ))

p.s. если кто-то заинтересован, могу выложить дистрибутив, примерно 5Мб

Vasilisk999

Добрый день всем! Остался шаг перед погружением в мультикоптерство ) Остановился на раме Таро FY690S. На форуме не нашёл четкого ответа, с этой рамой можно использовать винты 14" 4.7 ? Владельцы данной рамы …кто нить подскажите?

blind_oracle

14" можно точно, 15" тоже можно, но зазор остается маленький.
Вот фотка с рцгрупс с 14" пропами:

vtoryh
blind_oracle:

14" можно точно,

А у меня на 690 раме с 13 дюймовыми пропами, зазор чуть больше 1см.

Vasilisk999

Может кто то объяснить в чем такая разница с 690 рамами? Разные производитетели? На фото blind_oracle чёткий зазор около 20мм… С моторами уже определился…осилят и 17" винты…на перспективу хотел максимальную грузоподъемность выжать. Может не рисковать, Заказать 680 добавляю к ней известные мотомаунты www.rctimer.com/product_731.html и всё…

blind_oracle
vtoryh:

А у меня на 690 раме с 13 дюймовыми пропами, зазор чуть больше 1см.

Странно… Может у 690 рамы лучи короче чем у 680? Потому что на этой фотке, судя по всему, 680 рама с маунтами от 690й.
Моя 690ая сегодня должна приехать, померяю лучи и маунты.

Aviamodelist
blind_oracle:

Может у 690 рамы лучи короче чем у 680?

конешно короче, У 680 мотор на луче стоит, а на 690 уже на маунте, лучи короче минимум на 20мм…

Vasilisk999

А в чем еще принципиальные отличия 680 от 690? Мне в первой крепление ног не нравится…видимо сразу надо заказывать такой тройник www.ebay.com/itm/141052594592