Activity

RC-FLY Edge 540 1000мм – делаем складную конструкцию.

Предыстория о том, зачем мне понадобилась доработка – в этой теме: Самолёт для новичка (разборный).

Edge 540 от RC-FLY – весьма популярный и, судя по отзывам на форуме, удачный самолёт. Опытные пилоты умудряются вытворять на нём фантастические вещи, и при этом утверждают, что он прекрасно подходит новичкам. Однако разработчики предлагают пользоваться им только в полностью склеенном виде. Никаких разборных элементов в нём не предусмотрено.

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

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

Сервы элеронов я перенёс с фюзеляжа на консоли. Провода серв укоротил и припаял разъёмы с несимметричным пазом, чтобы нельзя было по ошибке перевернуть разъём.

В центроплан вклеил две карбоновые трубки и неодимовые магнитные диски с вставленным шурупом, по одному с каждой стороны. Шуруп также промазан клеем.

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

Магнитное крепление весьма тяжёлое, зато позволяет очень быстро собрать самолёт, что особенно актуально зимой. Достаточно вставить крылья и воткнуть разъёмы, не снимая перчаток.

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

Чтобы можно было снимать-надевать РВ, понадобилось сделать вырез в руле направления. В свою очередь, из-за выреза теряется жёсткость, и РН пришлось усилить ещё одним съёмным карбоновым стержнем.

Наконечник тяги РВ фиксируется на кабанчике при помощи проволоки. Проволока одним концом прикручена к тяге, чтобы не потерялась.

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

Итоги:

Самолёт теперь можно возить в автобусе и хранить в шкафу.

Карбон добавил к весу 10г, а магнитные защёлки потянули ещё на .

Полётный вес с мотором Emax CF2822, аккумом Onbo 3S 850мАч 25C, пластиковыми сервами и без шасси составил 380г.

Update:

Спустя два месяца эксплуатации, сделал ещё две доработки:

  1. Магниты заменил на резинки. При динамичных полётах магниты имеют свойство отстёгиваться. Две резинки - сверху и снизу крыла - стягивают их вместе постоянно. Резинки цепляются за винтики, которые в свою очередь проходят сквозь крыло, усиленное двумя стеклотекстолитовыми пластинками.

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

Ограничитель тока из лампочки 20 Вт (12В) для квадрокоптера

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

Поделюсь простым и очевидным способом, как обезопасить себя и свой дом.
Я собрал короткий удлинитель с двумя XT60, который вставляется между батареей и коптером. В разрыв одного из проводов последовательно подключается галогенная лампочка на 20 Ватт 12 Вольт. Она ограничивает ток и не даст взять от батареи больше 1,5А-2A. Соответственно, с таким ограничителем коптер не взлетит и не порубит всё вокруг.

  1. Если подключить батарею через лампочку и не армить, то вся электроника будет функционировать как обычно. Можно подключаться к компьютеру через Bluetooth, копаться в конфигураторе CleanFlight, переписывать логи, настраивать регули в BLHeli Suite и т.д.

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

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

  4. Если в пропеллеры попадёт какой-то предмет, то также возникнет скачок тока. Моторы мгновенно остановятся не причинив вреда. (см. видео)

Мощность лампочки можно подобрать экспериментально, в зависимости от того, какая у вас электроника на борту и насколько надо ограничить мощность. Мне оказалось достаточно лампочки 20Вт.

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

Есть один возможный побочный эффект. При определённых условиях, если резко дёргать стик газа, то может получиться так, что регули перезагрузятся, а полётник - нет. В этом случае регули могут уйти в режим калибровки, они об этом сообщат мелодией. Если такое случилось, надо сразу отключить батарею и перепроверить в BLheli Suite значения Min/Max Throttle.

Добавляем LC-фильтр на Matek HUBOSD-8

Несколько раз у меня на плате Matek HUBOSD-8 случались сбои 5V BEC’а, отчего перезагружался контроллер и встроенное OSD. В теме на RCgroups многие тоже с этим сталкивались. Кто-то вешает дополнительные Low-ESR конденсаторы, но это не всегда помогает. Кто-то использует другой внешний BEC и уже к нему подключает полётник.

Я пошёл другим путём - поставил LC-фильтр перед 5В-преобразователем.
После этого проблемы исчезли. За 8 отлётанных аккумуляторов с флипами, роллами, торможениями и крашами ни одного сбоя не произошло.

Расскажу подробнее:
Понижающий преобразователь MP2315 - крошечная 8-ногая микросхема с маркировкой AGCG - запитывается напрямую от напряжения батареи, без всякой фильтрации. Соответственно, весь шум от ESC и всплески от активного торможения приходят на него напрямую. Видимо, из-за этих наводок случались сбои.

  1. Первым делом надо отсоединить часть схемы с преобразователем от цепи батарейного питания. Для этого ножиком или скальпелем срезать фольгу в области, выделенной красным на картинке. Вывод конденсатора и вывод 2 микросхемы MP2315 после этого потеряют контакт с VCC. Контакт осуществляется через маленькое переходное отверстие в плате.

  2. После этого припаиваются конденсатор и катушка. Я взял те, что были под рукой: 330мкФ 25В и 470мкГн 0.7А. Всего контроллер, OSD, приёмник и пищалка потребляют меньше 250мА, поэтому 0.7А должно хватить.

Решил ткнуть с схему осциллографом и посмотреть своими глазами, как работает фильтр. Жёлтый сигнал - перед фильтром, голубой - после. При работе моторов амплитуда шумов до фильтра - больше 1В, а всплеск при торможении - больше 3В. Измерения делались со снятыми пропеллерами на столе. Разумеется, при реальном полёте шумы и всплески больше, но уже сейчас видно, что фильтр неплохо справляется.

Встраиваем Eachine ProDVR в EV800, или Advanced DVR mod


Хочу рассказать, как я встроил Eachine ProDVR внутрь шлема Eachine EV800 и при этом попытался сделать так, чтобы это выглядело аккуратно и было удобно пользоваться.
Теперь можно:

  • Начать и остановить запись на кнопку [Search].
  • Переключаться между FPV-приёмником и DVR на кнопку [Menu].
  • Просматривать записи маленькими кнопками [CH+] и [Band+].
  • Вставлять MicroSD в слот сверху.


Многие владельцы EV800 лепят DVR снаружи, но мне такой подход совершенно не нравится. Конечно, кто-то скажет, что правильный подход - это купить шлем с уже встроенным DVR. Но у меня уже есть EV800 и мне он меня он вполне устраивает, особенно нравится его “разбираемость”. И особенно, если учесть то, что он был куплен за $50, а писалка - за $10 на распродаже.

В корпусе шлема достаточно места для DVR. Я решил поместить его в передней части над батареей. Однако его всё равно пришлось немного допилить. Я отрезал с каждой стороны пластикового корпуса по 1,5 мм, чтобы плата была такой же ширины, что и корпус, а флешка слегка торчала. Тогда корпус не будет упираться в батарею снизу, а край карточки будет заподлицо с поверхностью шлема.

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

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

На ProDVR светодиод горит при бездействии и мигает, когда идёт запись. Я хотел, чтобы он, мигая при записи, был выключен всё остальное время. Для этого я немного изменил подключение. Если раньше светодиод одним выводом был подключен к земле, то теперь я перевернул его и завёл другой вывод на +3В (как на картинке). 3 Вольта можно найти на конденсаторе рядом со светодиодом.

Теперь надо подключить провода к плате шлема. Всего потребуется 8 проводов из комплекта ProDVR:

  • GND, +5V - питание
  • V_IN - на вход записи
  • V_OUT - выход для проигрывания записей
  • K1, K2, K3 - кнопки управления

Питание и видео-сигнал удобнее всего взять с модуля приёмника. Земля, 5В и видео находятся на 4, 5 и 8 пинах, соответственно (если считать слева). По факту там не 5В, а 3,5-4,2, то есть напряжение батареи. Однако этого напряжения достаточно для нормальной работы.

Теперь надо подключить видео выход с DVR на дополнительный вход шлема, чтобы можно было переключиться и пересмотреть записи на кнопку Menu. Можно припаять провод к разъёму 3.5мм, а можно найти мультиметром точку на плате, куда приходит дорожка с этого разъёма. Она приходит к маленькому резистору недалеко от кнопки Power. Туда и подпаяем выход c DVR.

По непонятной мне причине у EV800 дублируются кнопки CH+ и Band+. Кроме того, есть совершенно бесполезная кнопка Search, которая часто находит соседние каналы вместо нужного. На эти три кнопки я повесил управление DVR. Для этого я обрезал дорожки, ведущие к кнопкам, и припаял к освободившимся контактам “кнопочные” провода от писалки.


Вместе с проводами плата выглядит так:

Перед тем, как собрать всё вместе и включить, нужно приклеить DVR к верхней крышке. И обратить внимание, чтобы слот флешки как можно точнее совместился с щелью. Я воспользовался двухкомпонентным эпоксидным клеем, но можно при желании и термоклеем.

Когда клей засохнет, можно соединить провода, собрать и закрутить корпус.
Готово!
Теперь DVR всегда с собой. Кнопкой Search, которая всегда под рукой, удобно стартовать и заканчивать запись. Светодиод мигает в углу, по нему видно, когда видео пишется. И самое главное - ничего лишнего не болтается снаружи.

UPD: Несколько человек писали о том, что их плата видеошлема выглядит по-другому в том месте, где я подпаиваю провод к smd-резистору. А именно, иначе расположены резисторы.
Судя по всему, речь идёт о самой первой версии шлема, где был лишь один видеовход. Соответственно, на нём не работает переключение входа AV1/AV2 по кнопке Menu.
В этом случае модификация оказывается немного сложнее. Нужно выпаять один из элементов и поставить внешний механический переключатель, которым можно будет выбирать DVR или RX вход. К сожалению, первой версии у меня под рукой нет, поэтому дам ссылку на видео, где это показано: Eachine EV800 goggle DVR mod for live and recorded video

Задержка управления в Turnigy 9X с передатчиком и приёмниками FrSky

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

  • Turnigy 9X + FrSky DJT + X8R sbus - 35 ms
  • Turnigy 9X + FrSky DJT + D8R-II ppm - 65 ms

Результаты для других передатчиков и приёмников, полученные ранее Алексеем skydiver

  • FrSky Taranis + X4R sbus - 25 ms
  • Hitec Aurora 9x + Maxima 9sl - 20 ms
  • Futaba T10J + R3008SB - 20 ms

Турнигу я покупал в незапамятные времена, когда ещё не было Таранисов. Как и большинство обладателей 9X, прошивал, модернизировал и неоднократно допиливал её. За несколько лет привык к ней настолько, что уже не хочется менять на что-то другое.
Но с недавних пор я увлёкся гоночными мини-квадриками. Тогда то меня и заинтересовал вопрос, а не слишком ли у меня большие задержки в управлении?

Я взял логический анализатор, подключил один канал к тумблеру на аппе, второй канал ко входу передающего модуля FrSky DJT (который на задней стороне аппы), а третий - к SBUS выходу приёмника X8R. Все каналы на аппе я назначил на этот тумблер.
После этого я переключал тумблер и смотрел, через какое время с приёмника придёт пакет, в котором все каналы имеют значение, соответствующее включенному тумблеру. Что примечательно, в определённый момент на выходе приёмника может быть пакет, в котором часть каналов имеют новые значения, часть - старые.

Задержки между переключением тумблера и окончанием приёма пакета с новыми значениями (жёлтая линия) варьируется от 29 до 41 мс, в среднем составляет 35 миллисекунд.

Узким местом этой системы, как видно, является связь между 9X и DJT. Аппа передаёт данные модулю посредством PPM, пакеты в котором достигают 22 мс. Если бы использовался модуль FrSky XJT, то можно было бы пересылать команды по протоколу PXX, где частота отправки пакетов значительно выше.

Ради интереса я провёл те же измерения с приёмником D8R-II plus, который стоит у меня на 450-м коптере. У приёмника есть только PPM выход, поэтому и задержки получились значительно больше: от 55 до 75 мс, в среднем 65 миллисекунд. Но на большом медленном камеролёте это не так критично.

Теперь размышляю над дальнейшими действиями. Вижу три варианта:

  1. Оставить всё как есть и летать с задержкой 35 мс.
  2. Поставить передающий модуль XJT вместо DJT.
  3. Купить в конце концов Taranis 😃

Подвес для съёмки 360-градусных панорам на Xiaomi Yi


Летаю на 450-м квадрокоптере с Xiaomi Yi. Пришла идея собрать подвес, автоматизирующий съёмку сферических панорам с высоты. Пока продумываю его конструкцию и буду рад любой критике.

Принцип действия предполагается такой:

  1. По команде с пульта подвес, закреплённый между шасси, опускается вниз. Камера смотрит вперёд.
  2. Камера поворачивается в горизонтальной плоскости и делает три кадра, поворачиваясь на -60, 0 и 60 градусов.
  3. Камера поворачивается в вертикальной плоскости на 90 градусов вниз и снимает надир.
  4. Камера поворачивается в вертикальной плоскости ещё на 90 градусов дальше (на 180 градусов относительно первоначального положения и снимает ещё три кадра на -60, 0 и 60 градусов в противоположную сторону.
  5. Подвес уезжает вверх под шасси коптера.

Благодаря такой штуке не придётся вручную крутить коптер и наклонять камеру, чтоб отснять все кадры. Достаточно будет лишь подвесить коптер в точке и переключить тумблер на пульте. Всё остальное сделается автоматически за 7-8 секунд. Камеру хочу расположить вертикально, чтобы захватить высокие здания и деревья и больше неба. Детали планирую вырезать из 1 мм стеклотекстолита на ЧПУ.

С электроникой проблем не возникнет, всё легко реализуется на самой маленькой и простой Arduino. А вот с механикой у меня, возможно, будут сложности.

Главная сложность - сделать подвес убирающимся. Вижу два варианта. Первый - подвес поворачивается на более мощной серве и выезжает из пространства между шасси. Пока что смутно представляю себе, как это сделать. Второй вариант - делать убирающиеся шасси (ретракты), но это усложнит и утяжелит коптер. Сейчас у меня стоят шасси от Фантома. Есть и третий вариант - взлетать и садиться в ведро)

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

PPM-to-USB адаптер на основе STM32F3-Discovery


geektimes.ru/post/263346/
Поделюсь здесь ссылкой на свою статью на Geektimes для тех, кто там бывает редко. В ней я рассказываю, как запрограммировать плату с микроконтроллером STM32, чтобы она работала в качестве PPM-USB адаптера и эмулировала HID-джойстик, подключенный к USB.
Разумеется, купить готовый PPM-адаптер сейчас проще и дешевле, чем создавать его самому. Поэтому в первую очередь статья будет интересна тем моделистам, кто увлекается не только полётами, но и разработкой электроники.

Логи на MultiWii/MahoWi на Crius AIOP v2

Немного доработал свою библиотеку для записи логов на MultiWii на контроллере Crius AIOP v2 с микросхемой AT45DB161. Предыдущие части тут и тут.

Что нового

• Логи теперь пишутся непрерывно. Новые записи автоматически пишутся поверх самых старых.

• Вывод делается в более удобной форме. Сначала выводится список всех полётов в хронологическом порядке от последнего до самого давнего. Затем по очереди выводятся логи каждого полёта, начиная с последнего.

• В GPS-треках в Google Earth можно смотреть высоту полёта в этой точке. Кроме того, точки в GPS-треке пронумерованы. В текстовом логе можно посмотреть более подробную информацию о том, что происходило с коптером в этом месте.

Установка и использование.

Способ установки такой же, как и раньше:

  1. Положить файл FlashLog.ino в папку с MultiWii.

  2. Добавить строку в файле config.h:

#define FLASH_LOG
  1. Добавить в файле MultiWii.ino в конце функции setup()
Flash_Log_Init();
  1. Добавить в файле MultiWii.ino в конце функции annexCode():
Flash_Log_Write_Values();
  1. В файле Serial.ino в функции evaluateOtherData(uint8_t sr) в конструкцию switch-case добавить:
case 'R': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_FULL); break;
case 'r': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_SHORT); break;
case 'g': if (!f.ARMED) Flash_Log_Read_Memory(FLASH_LOG_OUTPUT_FORMAT_GPX); break;
case 'e': if (!f.ARMED) Flash_Erase_Memory(); break

Считать лог можно из терминала или Монитора порта в Arduino IDE, отправив соответствующие символы:

R – вывод подробной таблицы (20 записей в секунду).
r – вывод сокращённой таблицы (1 запись в секунду).
g – вывод GPS-трека. Его можно скопировать и сохранить с расширением .gpx.
e – очистка памяти.


Структура памяти

Память в AT45DB161 физически поделена на 4096 страниц по 512 байт каждая. Данные во флеш-память могут записываться только постранично. Моя библиотека записывает примерно одну страницу в секунду. Таким образом, памяти хватает больше, чем на час полётного времени.

На иллюстрации показана постраничная структура памяти. Пустые страницы флеш-памяти всегда полностью заполнены единицами (FF в шестнадцатиричном виде). Страницы с данными в первых двух байтах содержат Record ID – номер записи полёта, который увеличивается на единицу при каждом новом “арме”. По Record ID программа определяет, в каком порядке выводить данные и откуда начинать запись в следующий раз.


a) Показана запись первого полёта, который длился около 8 секунд и занял 8 страниц в памяти.
b) Показана память после двух полётов.
c) При 25-м полёте заполнились все 4096 страниц и запись пошла по второму кругу. Самый ранний полёт частично перезаписан.

На каждой странице данные размещаются следующим образом:
• 32 байта заголовка. В них содержатся данные, которые сохраняются раз в секунду. Это GPS-координаты, количество спутников, расстояние от точки взлёта.
• 20 кадров по 24 байта. Кадры пишутся 20 раз в секунду и содержат часто изменяемые данные: каналы приёмника, показания датчиков, напряжение батареи, метки времени.
Итого 32 + 20 х 24 = 512 байт.
Как только все 20 кадров собраны в буфер, происходит запись буфера в основную флеш-память.

Предупреждение

Напомню, что для записи/стирания AT45DB нужно качественное питание. В моменты записи микросхема очень короткое время потребляет большой ток. При питании от USB через длинный тонкий кабель могут произойти ошибки записи и стирания. Особенно, если одновременно с AIOP запитываются GPS, приёмник и другие устройства.

Для чтения флешки питание не так важно. Логи можно считывать с любым питанием, при котором работает контроллер, то есть достаточно просто подключить его к USB.

Планы

Была идея сделать универсальную библиотеку и для 2.2/MahoWii, и для 2.3/2.4. Но у этих версий слишком большие различия в структуре кода. В 2.2 проект состоит из .ino-файлов, в начиная с 2.3 - из .cpp и .h. Потребуется немало усилий, чтобы одна и та же библиотека подходила и туда, и сюда. Делать два параллельных варианта проблематично, потому что у меня только один контроллер, на котором я летаю.

Сейчас я использую MahoWii, так как с этой прошивкой коптер летает стабильнее всего. Поэтому пока библиотека для записи логов останется в .ino-формате.

В планах – сделать десктопную программу для автоматического копирования логов и треков в файлы.

Библиотека MultiWii-FlashLog находится на Github.

Сравнение Mobius и простейшей курсовой камеры за 11$


На форуме часто звучала мысль о том, что Mobius очень плох как курсовая камера. В то же время немало людей по ней летают и не жалуются. Я тоже долгое время летал по Мобиусу, жалко было тратиться на хорошую курсовую и носить на борту лишний вес.
Недавно мне в руки попала FPV-камера [URL=“banggood.com/Eachine-700TVL-13-Cmos-110-Degree-Len…
972616.html”]Eachine 700TVL с CMOS-матрицей с Банггуда[/URL]. В ней нет совсем никаких настроек, только переключатель PAL/NTSC. Я решил сравнить её с Мобиусом.

Эксперимент

Камеры подключены к передатчику (900МГц, 200мВт), к приёмнику подключен LCD (7’’ 800x480), а экран в свою очередь снимает телефон. Всё честно, как в реальных условиях.
Для измерения задержки я просто положил LCD с приёмником на планшет с запущенным секундомером.

Результаты

Картинка с Mobius значительно более мутная, ветки деревьев на фоне неба практически неразличимы. В сумерках тёмные объекты сливаются в кашу.
Камера Eachine даёт очень резкое, «перешарпленное», контрастное изображение.

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

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

Таким образом, простейшая FPV-камера за 11$ превосходит Mobius в качестве курсовой. Ориентироваться в пространстве и различать предметы с ней намного проще. Весит она лишь 12 грамм.

Оставляю Mobius только как пишущую. И всем сомневающимся советую сделать так же. 😃

GPS-логи в MultiWii на Crius AIOP v2

Продолжаю эксперименты с записью лога MultiWii на flash-память AT45DB161 на Crius AIOP v2.
Предыдущая часть здесь.
Теперь в память пишутся GPS-треки полётов и временные метки.
После полёта контроллер можно подключить к компьютеру, отправить в терминале символ ‘g’ и получить трек в виде XML:

Всё это можно скопировать в блокнот, сохранить с расширением .gpx, открыть в Google Earth и увидеть трек своего полёта.

Устанавливается так же, как и предыдущая версия.
Изменение только одно: в файле Serial.ino надо добавить ещё одну строчку:

case 'g': if (!f.ARMED) Flash_Read_GPX(); break;

Дальнейшие планы такие:

  1. Переделать структуру лога, чтоб разные данные писались с разной частотой.
    Например, GPS-координаты и высоту по барометру нет смысла писать 50-100 раз в секунду, как показания гироскопа.
  2. Сделать кольцевую запись.
  3. Подключить эти функции к MultiWii 2.3 и 2.4, а не только к 2.2 и MahoWii.

Текущая версия файла FlashLog.ino лежит там же, на GitHub

Запись логов полёта в MultiWii на Crius AIOP v2 (beta-версия)

Во время полётов у моего коптера на MultiWii временами возникали странные глюки. Захотелось выяснить, в чём конкретно причина - в аппе, датчиках, регуляторах или в чём-то ещё. Для этого мне нужно было записать подробный лог полёта. На форумах я не нашёл готового решения. Многие используют bluetooth-модуль в связке со смартфоном, но у меня на тот момент не было ни того, ни другого, поэтому я решил изобрести свой велосипед.

На полётном контроллере Crius All in One Pro v2 стоит микросхема flash-памяти AT45DB161 на 16 Мегабит, которая подключена через SPI-интерфейс и никак не используется Мультивием. Её я решил задействовать.

Немного теории.

Вся память в микросхеме AT45DB поделена на страницы по 512 байт. Записывать и стирать данные можно только постранично. Запись данных весьма медленный процесс, на одну страницу уходит около 10 миллисекунд. Поэтому, чтобы записывать было удобнее, в микросхеме памяти есть два буфера по 512 байт каждый.

Функция Flash_Log_Values() вызывается каждый раз в главном цикле и записывает 32 байта данных в буфер. Когда буфер заполняется полностью, мы посылаем команду «записать буфер в основную память» и, пока буфер переписывается в страницу flash-памяти, мы заполняем новыми данными второй буфер. А потом снова переключаемся на первый и так далее.

Таким образом, во время полёта контроллеру не нужно надолго отвлекаться от своей главной задачи - стабилизации. На отправку 32 байт данных в буфер уходит примерно 120 микросекунд.

Цикл длится примерно 3-4 миллисекунды, а это значит, что данные будут записываться с частотой порядка 300 раз в секунду. Это излишне в большинстве случаев, в таком режиме памяти хватит чуть больше чем на три минуты. Поэтому я ввёл параметр AT45DB_DECIMATION, который задаёт прореживание. Если параметр равен 2, то значения пишутся в лог каждый второй цикл. Его можно изменять.

Как установить.

У меня установлен MahoWii RC3.1, который создан на основе MultiWii 2.2. В этой версии исходный код состоит из ino-файлов и инструкция ниже подходит именно для этой версии. Если у вас версия 2.3, то возможно, надо будет немного переделать код и вместо .ino-файла сделать .h- и .cpp-файлы.

  1. В папку проекта добавить файл FlashLog.ino.

  2. В файле config.h добавить строчку:

#define FLASH_LOG
  1. В главном файле MultiWii.ino в функции «annexCode()» добавить:
Flash_Log_Values();
  1. В функцию setup() в этом же файле добавить:
Flash_Log_Init();
  1. В файле Serial.ino найти функцию evaluateOtherData(uint8_t sr), в ней будет условие switch-case с кучей вариантов. Туда надо добавить ещё два:
case 'r':
if (!f.ARMED) Flash_Read_Memory(); break;
case 'e':
if (!f.ARMED) Flash_Erase_Memory(); break;

Как использовать.

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

Чтобы считать лог надо запустить Arduino IDE, через которую мы прошивали контроллер, и открыть «Монитор порта».

Команд всего две:
r - считать данные;
e - стереть всю память.

Так выглядят записанные данные:

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

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

В следующих колонках пишутся все записанные значения:

  • 4 канала приёмника;
  • 4 значения, выдаваемые на ESC (иными словами обороты моторов);
  • показания гироскопа по трём осям;
  • направление по компасу;
  • высота по барометру;

Полученные данные можно скопировать в Excel, Matlab или другой удобный софт и там уже их подробно изучить и построить графики.

Планы.

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

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

Ещё планирую сохранять GPS-координаты, напряжение батареи и полётные режимы.

Вопрос к аудитории: нужны ли людям логи на Мультивие? Интересна эта тема и стоит ли её дальше развивать? Принимаются любая критика и любые пожелания.

Текущую версию файла FlashLog.ino можно скачать на GitHub.

P.S. Флеш-память AT45DB требовательна к хорошему питанию. Во время прошивки и настройки я питал контроллер напрямую от USB. От контроллера питание разветвлялось на приёмник FrSky, OLED-экранчик, GPS-приёмник и светодиоды. При таком количестве устройств 5 Вольт проседали и, видимо, шли помехи по питанию. Память перестала стираться и стала выдавать какую-то чушь вместо данных. Память стала хорошо работать только тогда, когда я отсоединил питание от GPS.
При питании от батареи через 1,5-амперный DC-DC преобразователь таких проблем не наблюдается.
Так что, если вы запитываете контроллер от USB во время работы с AT45DB, следите, чтоб на линии питания не было сильно потребляющих устройств.

Изменяем подписи значений телеметрии FrSky в er9x.

Летаю на коптере с контроллером AIOP v.2, прошивкой MahoWii и управляю Turnigy 9X с FrSky модулем и телеметрией. Контроллер передаёт на экран аппы данные о высоте, о GPS-координатах, о расстоянии от точки взлёта и количестве пойманных спутников и, конечно, о батарее.

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

Проблема была следующая: для количества спутников и расстояния не предусмотрено специальных полей, поэтому эти числа пишутся под видом температуры с соответствующими подписями: T1=, T2=.
Вот так это выглядит:

Хоть я и помнил, где что находится, всё равно перфекционизм не давал покоя.

Попытался сперва изменить строки с названиями в исходниках er9x. Для этого там предусмотрена строки со всеми возможными подписями. Но так и не получилось скомпилировать их так, чтоб они влезли в 64 килобайта. Даже с отключением всего лишнего и с оптимизацией прошивка получалась 67 килобайт. Перепаивать Atmega64 на Atmega128 не хотелось.

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

  1. Сохранить имеющуюся прошивку и eeprom через eePe. Обязательно сделать резервную копию.
  2. Открыть .bin-файл с прошивкой в любом HEX-редакторе, например, Hex Editor Neo.
  3. Найти строку A1= A2= RSSITSIITim1Tim2AltGaltGspd… Это как раз и есть строка с названиями параметров, которые могут передаваться с борта на землю.
  4. Изменить названия по своему вкусу.
    На каждое поле отводится 4 символа, неиспользуемые надо заполнить пробелами, чтобы следующие за ними байты не сместились. Именно поэтому лучше открывать файл в hex-редакторе, а не в блокноте.
  5. Сохраняем и загружаем изменённую прошивку через eePe вместе с eeprom.

После этого на экране телеметрии появились новые подписи:

Единицы измерения всё равно остались прежними - градусы Цельсия © вместо метров (m). Но поправить их уже не так просто, придётся перекомпилировать.

Управление Hubsan X4 H107 с Turnigy 9X

Расскажу про то, как подружить микроквадрокоптер Hubsan X4 H107L с пультом Turnigy 9X.

Все описанные действия подходят для любого пульта, в котором которого есть выход PPM.

ПО и схемы составлены не мной. Я лишь перевёл с английского и добавил от себя инструкцию по установке модуля внутрь пульта.

Хочу поблагодарить PhracturedBlue, который проделал огромную работу и разобрал протокол связи:
www.rcgroups.com/forums/showthread.php?t=1773853
и Midelic, написавшего прошивку для Ардуино:
www.rcgroups.com/forums/showthread.php?t=1954078

Внутрь Turnigy 9X мы установим платку с ATmega и радиомодуль на микросхеме A7105. Такая же микросхема стоит в оригинальном пульте Hubsan X4.

Переключение питания между главным передающим модулем (в моём случае это FrSky DJT) и модулем для Hubsan назначим на один из тумблеров. В один момент времени будет работать только один передатчик.

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

Что потребуется

1. Arduino Pro Mini (около 3$ на ebay или aliexpress). Вместо Arduino Pro Mini можно использовать любую плату с микроконтроллером ATmega8, ATmega168 или ATmega328, с кварцевым резонатором на 8МГц или 16МГц. На RC-Groups лежат разные версии прошивки для разных контроллеров.
2. Радиомодуль A7105 или XL7105 (3$ там же).
3. Стабилизатор напряжения на 3,3В – 78L33 (1$ в ближайшем магазине). Подойдёт LM1117 или любой другой, который рассчитан на ток больше 30мА.
4. Резисторы 10 кОм и 20 кОм или других близких номиналов. Один должен быть в 1,5…2 раза больше другого.
5. Программатор USBasp, желательно с питанием 3,3В или с выбором 3,3В/5В.

Внимание! Для модуля А7105/XL7105 требуется напряжение питания 3,3В. Если на него подать 5В, он сгорит. Рекомендуется прошивать Ардуино до подключения радиомодуля, либо отключать питание VCC от радиомодуля на время прошивки, либо использовать программатор USBasp с джампером для выбора напряжения 3,3В/5В.

Схема подключения

Последовательность действий

1. Прошиваем в Arduino файл “Hubsan_V2_M328_16Mhz.hex” c помощью программатора USBasp. Фьюзы оставляем по умолчанию.

Мне попалась китайская Arduino Pro Mini, на которой уже был разведён 6-пиновый разъём ISP для программатора.
Для тех, у кого нет программатора USBasp или нет разъёма, автор советует программу Xloader для загрузки hex-файла через FTDI: russemotto.com/xloader/

Прошивку можно скачать здесь: www.rcgroups.com/forums/showthread.php?t=1954078

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

2. Соединяем Ардуино с радиомодулем A7105 проводами в соответствии со схемой: два для питания, три для передачи данных.

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

Сигнал PPM, который идёт от платы Турниги, имеет уровень 5В. Микроконтроллер на Ардуино питается от 3,3В, поэтому большее напряжение ему навредит.

На выходе делителя мы получим: 5В * 20кОм / (10кОм + 20кОм) = 3,3В – именно столько, сколько нужно.

4. В цепь питания модуля устанавливаем стабилизатор напряжения 78L33.

Распиновка такая:
1 - выходное напряжение;
8 - входное напряжение;
2,3,6,7 - земля.

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

Существуют версии Arduino Pro Mini, на которых уже стоит стабилизатор на 3,3В. На таких платах можно подключать 12В напрямую к пину RAW, а питание на модуль A7105 подавать с пина VCC.
Однако у меня оказалась версия со стабилизатором на 5В. Пришлось ставить внешний стаб.

5. Перерезаем на плате дорожку, подводящую питание к основному радиомодулю.

6. Для выбора радиомодуля (FrSky или A7105) мы используем переключатель Throttle Cut, дальний левый переключатель. К нему удобнее всего подвести провода.

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

7. Устанавливаем платы в корпус. Платы удобнее всего разместить в самой верхней части и закрепить термоклеем. Во-первых, здесь достаточно места. Во-вторых, ничто не будет мешать распространению радиосигнала.

8. Подключаем питание и PPM-сигнал в соответствии со схемой и фото.

Напряжение питания 12В берётся с нижнего ряда контактов, 7-й по счёту контакт слева, и подпаиваются к среднему контакту тумблера.

С крайних контактов тумблера один провод идёт на питание основного радиомодуля FrSky, другой – к питанию 78L33.

Землю для Ардуино и A7105 можно взять из любого контакта, соединённого с земляным полигоном.

PPM-сигнал берётся с верхнего контакта разъёма основного радиомодуля.
Таким образом, PPM поступает одновременно на оба модуля, а питание модулей выбирается тумблером.

Итого четыре соединения с большой платой.

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

9. Собираем и включаем пульт. Включаем Hubsan. Если всё сделано правильно, то квадрокоптер должен помигать светодиодами и забиндиться.

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

Настройка Turnigy 9X

Каналы настраиваются следующим образом:

1 канал – Aileron (в реверсе)
2 канал – Elevator
3 канал – Throttle
4 канал – Rudder (в реверсе)
5 канал – Переключатель светодиодов, любой тумблер
6 канал – Антифлип-режим, любой тумблер

Судя по поведению Хубсана, в нём внутри уже заложены экспоненты. Если хочется более резкого движения, каналы Aileron и Elevator можно компенсировать обратными экспонентами (с отрицательными коэффициентами, выгнутые в обратную сторону).

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

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

Режимы Expert и Normal не переключаются отдельно. В этом нет необходимости, так как расходы и экспоненты настраиваются в самой Турниге.

Итоги

Теперь мы можем управлять одним и тем же пультом как «взрослыми» аппаратами, так и Хубсаном.

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

Режим эксперта тоже не надо включать каждый раз.

За счёт большего хода стиков у Turnigy получили более точное управление.

Максимальную дальность не проверял. В пределах видимости на расстоянии 20-25м приём отличный.

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