Полетные режимы вашего квадрика и направление на экране аппы

froller
Protez1999:

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

Arduino IDE - не самый лучший софт для прошивки, если не надо компиллять из исходников, которые используют ардуиновские либы (то еще гуано, надо сказать).
Для заливки бинарей и хексов в AVR очень хороша CodeVision AVR. Умеет кучу программаторов (от bit-bang через LPT до JTAG) и позволяет компиллять из Цэ и ассемблера.

P.S. 9XR и свои платы на ATtiny шил именно через CodeVision.

4refr0nt
Protez1999:

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

Почитайте это (раздел про XLoader). Проверял сам лично, все работает.

Используйте USB->TTL конвертер на базе чипов FTDI, CH340 или CP2104 с линией DTR (чтобы не мудрить с reset) вроде этого, или возьмите такой комплект. Получается по деньгам очень демократично: ардуина 100 руб + USB->TTL 100 руб. с бесплатной почтовой доставкой 😃

Если будете шить ардуину из исходников, то для текущей версии используйте ArduinoIDE 1.0.6 (предыдущий релиз был собран на более ранней версии, ссылка, указанная в начале топика устарела)

Турнигу я шью этим с помощью eePe.

4refr0nt

Исправил замеченные ошибки и выложил новую версию.

Сейчас поддерживается 8-канальная подсветка.

4 канала подсветки на лучи: FRONT (arduino pin 7), REAR - 8, LEFT - 9, RIGHT - 10.
Подсветка настраивается по “паттернам” (об этом ниже)

4 канала для цветных светодиодов вроде этих
Белый светодиод (pin 2) включается при арминге
Голубой светодиод (pin 3) включается при 3D Fix и hdop <= 200
Красный светодиод (pin 4) включается при получении любого сообщения от APM уровня CRITICAL
Зеленый светодиод (pin 13) и светодиод на ардуине повторяют светодиоды переднего луча

По паттернам. Подсветка настраивается только в исходниках, настраивать через специальную программу как в jd IO_Board возможности нет, PWM тоже не реализовано (т.е. нельзя плавно включать-выключать светодиоды)
В файле APM_Mavlink_to_FrSky.ino начиная где-то со строки 60 вы найдете

char LEFT_STAB[]   PROGMEM = "1111111110";   // pattern for LEFT  light, mode - STAB
char RIGHT_STAB[]  PROGMEM = "1111111110";   // pattern for RIGHT light, mode - STAB
char FRONT_STAB[]  PROGMEM = "1111111110";   // pattern for FRONT light, mode - STAB
char REAR_STAB[]   PROGMEM = "1111111110";   // pattern for REAR  light, mode - STAB

char LEFT_AHOLD[]  PROGMEM = "111000";  // medium blink
char RIGHT_AHOLD[] PROGMEM = "111000";
char FRONT_AHOLD[] PROGMEM = "111000";
char REAR_AHOLD[]  PROGMEM = "111000";

char LEFT_RTL[]    PROGMEM = "10";  // fast blink
char RIGHT_RTL[]   PROGMEM = "10";
char FRONT_RTL[]   PROGMEM = "10";
char REAR_RTL[]    PROGMEM = "10";

char LEFT_OTHER[]  PROGMEM = "1";  // always ON
char RIGHT_OTHER[] PROGMEM = "1";
char FRONT_OTHER[] PROGMEM = "1";
char REAR_OTHER[]  PROGMEM = "1";

Это настройка подсветки левого луча в режиме STABILIZE. Один символ в строке - это 0,1сек времени. По умолчанию сейчас 0,9сек подсветка горит, затем на 0,1сек тухнет для всех лучей. Соответственно, строка типа “1111100000” будет означать 0,5сек вкл затем 0,5сек выкл, строка “01” 0,1сек выкл затем 0,1сек вкл и т.д. Строки могут быть разной длины. Суммарная длина всех таких строк ограничена размером флеш памяти на ардуине. Для подсветки осталось около 500 байт - довольно много.
Сейчас реализована настройка подсветки в четырех режимах: stab, althold, rtl и все остальные. Каждый из четырех лучей настраивается индивидуально.

Подсветка по умолчанию сейчас: STAB - медленно мигает (0.9+0.1),
ALTHOLD - средне (0,3+0,3), RTL - быстро (0,1+0,1), на остальных режимах горит постоянно.

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

Ну и хочу напомнить пилотам без опыта в электронике, что обычные светодиоды можно подключать к ардуине только через токоограничивающие резисторы, а яркие светодиоды, светодиодные ленты и т.п. напрямую к ардуине подключать нельзя (ардуина выдерживает ток только до 20 миллиампер на один контакт и 200 на все устройство). За консультацией по подключению ярких светодиодов и лент к ардуине обращайтесь к спецам по электронике.

Mavlink_to_FrSky-1.1.117.zip

Protez1999

все получилось спасибо. Диоды на ардуинке подрубал через транзисторы кп 505. правда давно было

HATUUL

Еще не пробовал,программатор забрали,завтра пропишу.
А я ленты подключаю через ULN2003.
как то так.

HATUUL

Наконец прошил пульт,и ардуинку,огни пока не подключал,вроде все нормально . Постараюсь выйти на поле,и там потестить.
Пока настроен заменить мегу64 на 128.

4refr0nt
HATUUL:

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

с нетерпением жду результатов

HATUUL:

Пока настроен заменить мегу64 на 128

отличная идея

Freepooh

4refr0nt, THR и AIL всегда включены, наверное это неправильно, в прошивке не учтен FrSky-мод
9X, FrSky-мод, м128, v1.1.117

4refr0nt
Freepooh:

4refr0nt, THR и AIL всегда включены, наверное это неправильно.
9X, м128, v1.1.117

Прочитайте это

HATUUL

Наконец вчера смог выгулять своего питомца.😁
Экран,очень помог.😃
Правда в полете надписи мелковаты,чтоб на миг глянуть,что да как.Приходиться сосредотачиваться.
Из своих наблюдений.
Бортовое питание наверно лучше скинуть вниз отдельно,под радар.Сверху слева стока всяких питаний ,не успеваю понять,где на аппе,где на пульте.
И походу индикация бортовухи не совсем правильно работает,в начале показал,что акк разряжен,а под конец наоборот полный.Но это со слов напарника.
Да Виктор,не можете чуть подробней описать индикацию самого радара.Что-то недопонял…Что означают полоски кружечки?
Из ненужны параметров для меня.
Высота жпса.
Так и не понял,что показывает полоска под хдоп?

4refr0nt
HATUUL:

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

Да, я так же думаю. Только как найти компромисс между набором отображаемых параметров и размерами шрифтов?

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

Оставшийся заряд аккумулятора, ток и напряжение ардуине выдает APM. Ардуина отправляет его в пульт в неизменном виде. У меня неоригинальный PowerModule. Я его калибрую в MP при подключенном акке: Initial Setup -> Optional Hardware -> Battery Monitor: указываю свою емкость акка, измеренные тестером напряжение и ток, а MP сам выставляет Voltage Divider и Amps per Volt. Далее все работает примерно так: когда подключаете акк, APM считает, что тот полностью заряжен. Выдает вам на пульт напряжение с учетом дивайдера, рассчитаного при калибровке. Далее, под нагрузкой, считает ток и время - получаются амперчасы, которые он вычитает из введенной емкости акка. Поэтому если отключить/подключить разряженный акк - будет каша. Если нет PowerModule то эти данные, скорее всего, вообще не имеют смысла. Не могу точно сказать, как APM в этом случае считает. Без PowerModule ориентируйтесь по напряжению CPU.

Да Викор,не можете чуть подробней описать индикацию самого радара.Что-то недопонял…Что означают полоски кружечки?

На радаре три указателя: большой, маленький в одну полоску и маленький в три полоски.
Большой указатель показывает направление носа по компасу. До арминга направление соответствует обычному компасу (север вверху). После арминга работает как в SIMPLE режиме, т.е. вверху уже не север, а то положение, в котором находились до арминга, т.е. в точке взлета. Теоретически, чтобы вслепую вернуть коптер, который уже не видно куда повернут носом, нужно по пульту дать ему направление точно “на юг” и аппарат должен лететь в направлении к точке взлета и появится в зоне уверенной видимости. Вся затея с этой телеметрией мною задумывалась именно ради этого, а потом уже “обрасла” остальным.

Маленький указатель в одну линию - направление на текущий WP. Имеет смысл, если летаете по заранее спланированному маршруту в MP. Отдается в том виде, как его выдает APM.

Маленький указатель в три линии - направление домой. Находится в стадии тестирования, жду отзывов. Рассчитывается как и расстояние “до дома” по разнице текущих GPS координат и точки взлета (алгоритм тот же, что и в различных OSD).

Так и не понял,что показывает полоска под хдоп?

Это что-то типа “сердцебиения”. Индикатор приема данных. Заполнение этой полоски обратно пропорционально времени, прошедшему с момента приема последнего пакета данных телеметрии.
Полоска почти полностью заполнена - все ок, данные приходят. Не заполнена - превышено время ожидания, т.е. либо FrSky модуль не передает данные, либо ардуина. Попробуйте на земпле, когда все уже подключено и работает, сбросить ардуину кнопкой, при этом отслеживайте показания на аппе, вот тогда сразу все понятно станет.

Freepooh

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

4refr0nt:

как найти компромисс между набором отображаемых параметров и размерами шрифтов?

Может размер радара уменьшить?
“CPU” - нужен ли?

4refr0nt:

Индикатор приема данных

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

HATUUL:

Сверху слева стока всяких питаний

да, не разберешься… я бы напряжение пульта вообще убрал
Еще хотелось бы стрелочку на радаре более “сглаженную”, если не трудно 😃

4refr0nt
Freepooh:

я бы напряжение пульта вообще убрал

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

Freepooh:

Еще хотелось бы стрелочку на радаре более “сглаженную”, если не трудно 😃

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

Если у вас версия для 128 меги, то менее ломанную линию сделать невозможно - мы ограничены разрешением экрана. Правда есть вариант с использованием более красивых, заранее прорисованных не линий, а стрелок, но боюсь, мы опять будем расточительно расходовать все виды памяти меги (оперативки там тоже впритык). Хотя, быть может, готовые стрелки займут меньший размер, чем math библиотека. Кстати такой способ используется в OSD. Если кто-нибудь нарисует 16 или, хотя бы, 12 стрелок для радара (его размер 47х47) и они получатся симпатичней простых линий, то я постараюсь их запихать в существующий код.

4refr0nt
Freepooh:

Спасибо! Все работает четко, включая питание и иллюминацию (добавил все используемые режимы)

Поделитесь, пожалуйста, опытом по иллюминации. Какие режимы как у вас мигают.

Freepooh

Конечно!

//****************************************STAB***********************************************************
char REAR_STAB[]   PROGMEM = "0100000000";   // левый передний
char LEFT_STAB[]   PROGMEM = "1000000000";   // левый задний
                                          char RIGHT_STAB[]  PROGMEM = "0100000000";   // правый передний
                                          char FRONT_STAB[]  PROGMEM = "1000000000";   // правый задний
//****************************************ALTHOLD******************************************************
char REAR_AHOLD[]  PROGMEM = "1000000000";
char LEFT_AHOLD[]  PROGMEM = "1000000000";
                                          char RIGHT_AHOLD[] PROGMEM = "1000000000";
                                          char FRONT_AHOLD[] PROGMEM = "1000000000";
//****************************************RTL***********************************************************
char REAR_RTL[]    PROGMEM = "1000000000";
char LEFT_RTL[]    PROGMEM = "0100000000";
                                          char RIGHT_RTL[]   PROGMEM = "1000000000";
                                          char FRONT_RTL[]   PROGMEM = "0100000000";
//*****************************************LOITER*********************************************************
char REAR_LOITER[]  PROGMEM = "1010100000";
char LEFT_LOITER[]  PROGMEM = "1010100000";
                                          char RIGHT_LOITER[] PROGMEM = "1010100000";
                                          char FRONT_LOITER[] PROGMEM = "1010100000";
//******************************************AUTO*********************************************************
char REAR_AUTO[]  PROGMEM = "1010000000";
char LEFT_AUTO[]  PROGMEM = "1010000000";
                                          char RIGHT_AUTO[] PROGMEM = "1010000000";
                                          char FRONT_AUTO[] PROGMEM = "1010000000";
//******************************************LAND********************************************************
char REAR_LAND[]  PROGMEM = "101000000000";
char LEFT_LAND[]  PROGMEM = "101000000000";
                                          char RIGHT_LAND[] PROGMEM = "000010100000";
                                          char FRONT_LAND[] PROGMEM = "000010100000";
//****************************************OTHER***********************************************************
char REAR_OTHER[]  PROGMEM = "0";
char LEFT_OTHER[]  PROGMEM = "0";
                                          char RIGHT_OTHER[] PROGMEM = "0";
                                          char FRONT_OTHER[] PROGMEM = "0";

char *left[]  PROGMEM = {LEFT_STAB,  LEFT_AHOLD,  LEFT_RTL,  LEFT_LOITER,  LEFT_AUTO,  LEFT_LAND,  LEFT_OTHER};
char *right[] PROGMEM = {RIGHT_STAB, RIGHT_AHOLD, RIGHT_RTL, RIGHT_LOITER,  RIGHT_AUTO,  RIGHT_LAND,  RIGHT_OTHER};
char *front[] PROGMEM = {FRONT_STAB, FRONT_AHOLD, FRONT_RTL, FRONT_LOITER,  FRONT_AUTO,  FRONT_LAND,  FRONT_OTHER};
char *rear[]  PROGMEM = {REAR_STAB,  REAR_AHOLD,  REAR_RTL,  REAR_LOITER,  REAR_AUTO,  REAR_LAND,  REAR_OTHER};

Настроил только используемые мною режимы (ниже закомментированы коды всех режимов, можно по аналогии донастроить)

  switch(last_mode) {
   case 0: // STAB
       index = 0;
       break;
   case 2: // AltHold
       index = 1;
       break;
   case 6: // RTL
       index = 2;
       break;
   case 5: // LOITER
       index = 3;
       break;
   case 3: // AUTO
       index = 4;
       break;
   case 9: // LAND
       index = 5;
       break;
   default: // other
       index = 6;
       break;
   }
/*
0	Stabilize
1	Acro
2	AltHold
3	Auto
4	Guided
5	Loiter
6	RTL
7	Circle
9	Land
10	OF_Loiter
11	Drift
13	Sport
16	PosHold
*/   

Светодиоды подключил через ULN2803 по типовой схеме навесным монтажем, без ПП

NARAJANA
4refr0nt:

Еще у меня есть идея вот такого развития проекта:

В турнигу устанавливаем ардуино про мини, которая выступает как коммутатор, на нее принимаем данные телеметрии с модуля FrSky, затем отдаем в пульт (чтобы получилось как сейчас) и такой же поток данных отдаем на блютус модуль который коннектится со смартфоном на андроиде. На смартфоне прога типа AndroPilot, только наша и заточенная на нашу телеметрию и с возможностью отображения на картах гугл положения нашего квадрика.
Надо подумать, как еще можно использовать ардуину в пульте (звуковой мод?)
Прошу отписаться о том, кто что думает обо всем этом.

Как то так получилось, что я пропустил этот проект.
Буду сдувать 64 проц, ставить 128, покупать Ардуину и наверстывать упущенное. Черезвычайно полезное дополнение к Турниге и Ардукоптеру.
Автору ОГРОМНАЯ БЛАГОДАРНОСТЬ!
По поводу отображения на андропланшете телеметрии и положения, ИМХО очень полезно, 3DR радио в основном использую для отслеживания положения на местности и телеметрии при полете в автомиссии,
можно было бы отказаться от радиомодемов.

4refr0nt
NARAJANA:

можно было бы отказаться от радиомодемов.

Не торопитесь. Да и зачем нам уже устаревший блютус - сейчас время wifi!
Как насчет такой идеи:

APM -> 3DR radio Air module -> 3DR radio Ground module -> Компьютер с MissionPlanner -> (WiFi link) -> 9X

Потребуется такая доработка 9X: arduino + esp8266 (купить ESP8266 здесь, а описание тут)

Штатных апп с wifi на борту вроде еще не делают? Тогда будем первыми. Ну если и делают, то денег они точно стоят “немеряно”.

Передавать можно не телеметрию, а вообще просто “снимок экрана” аппы и алармы. Что-то вроде вещания ч/б видео с компьютера на аппу. Смартфон или планшет тоже можно коннектить по wifi.

Пока заказал себе парочку 8266. Жду когда приедут.

HATUUL
4refr0nt:

Потребуется такая доработка 9X: arduino + esp8266 (купить ESP8266 здесь, а описание тут)

Ух ты,век живи век читай.:)Спасибо за инфу у меня уже стоит синезуб на фриске.

strizhmax
4refr0nt:

Потребуется такая доработка 9X: arduino + esp8266

Не думаю что это хорошая идея (2.4MHz + 2.4MHz), мешаться друг другу будут. При включенно пульте у жены на ноуте отваливается WiFi, а мне вот все равно, я проводом привязан 😃

NetWood

Замечательный проект! Слежу. Весьма интересно, но мне больше по подсветке, так как направление квадрика вижу через 3DR на планшете прикрепленном к пульту. Позволю несколько мыслей.

  1. Сделать подсветку на борту в зависимости от напряжения питания, например
    От 10,8 вольт = 3,6 В на ячейку мигает два раза
    три раза от 10,2 вольт = 3,4 В на ячейку
    четыре раза от 9,9 вольт = 3,3 В на ячейку
    и от 9,6 V = 3,2 В на ячейку мигает очень часто - пора садиться. Такой алгоритм подсмотрел у одного немца. И даже модуль у него заказал. Было бы удобно запрограммировать.

  2. На Таранисе будет ли работать? Думаю, что в ближайшее время будет происходить массовый переход на него с Турниг (и в барахолке тюнингованных здорово прибавилось 😃 ).

4refr0nt:

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

  1. Можно ли будет подключить 3DR модем в этот модуль и отдавать данные на DroidPlanner по BT? Через OTG разъем не всегда удобно с ним общаться. Или USB удлинитель городить или ставить в неудобное место.
4refr0nt:

Да и зачем нам уже устаревший блютус - сейчас время wifi! Как насчет такой идеи: APM -> 3DR radio Air module -> 3DR radio Ground module -> Компьютер с MissionPlanner -> (WiFi link) -> 9X

Все же BT предпочтительней. WIFI сильно будет шумить в 2.4 и та же Валкера вообще сделала на новом Скауте BT модуль управления с планшета.

Может что-то уже обсуждалось и я пропустил?