Да-да, всё именно так.
В статье я опишу изготовление самодельного ГПС приёмника к контроллерам серии NAZA, на основе комбо для контроллера АРМ. Хотя ничего не мешает изготовить девайс и из отдельных комплектующих.
Итак. Что понадобится?
1) APM GPS+compass combo. Другими словами ГПС приёмник с компасом. Такие используются в связке с APM, с MultiWii. Я брал такой. Сразу говорю - модуль ублох в нём фейковый. Но тем не менее, он очень хорошо ловит и держит спутники.
2) Arduino Pro Mini. Желательно, типа такого - с дополнительными отверсиями с торца - земля и питание. Удобнее подключать разъём.
3) Преобразователь уровней I2C 5v-3.3v В принципе, на худой конец, можно обойтись и без него - но это делать крайне не рекомендуется. Преобразователь можно купить готовый, можно собрать на двух полевых транзисторах (или на 4 биполярных). Я собрал самодельный и запихал его в корпус приёмника (см. ниже)
4) Для удобства подключения можно присобачить разъём к ГПС комбу. Обычно комбы идут с разъёмами Микро JST 1.25.
5) FTDI или какой-нибудь подобный адаптер USB-UART, для прошивки ардуины и настройки ГПС модуля.

6) Руки от плеч и соображающая башка крайне необходимы, без них ничего не выйдет. Это НЕ пошаговое руководство, где я покажу, как провода залуживать и куда какой проводок тыкать! Минимальные знания электроники и основы работы с компьютером необходимы. Если у вас с этим не очень - купите готовый модуль от DJI и не занимайтесь экспериментами.

ДИСКЛАЙМЕР!
Всё, что вы делаете, вы делаете на свой страх и риск. Если ГПС вам нужен для профессионального использования - купите оригинальный модуль!

Ну, со страшилками закончил, перехожу к вкусняшкам.
Первое - конструкция работает! В частности, сегодня она прошла тестовый облёт, где показала себя вполне работоспособной.
Второе - цена. Комбо стоит около 20 долларов, ардуина ещё 3, конвертер - 1. Итого 24 доллара, вместо оригинальных 100.

Начинаем изготовление.


Рис.2 Модуль GPS со встроенным I2C конвертером.
Начать стоит с настройки модуля U-blox, установленного в комбе. Настройка такая - скорость 57600, частота 5 Гц, протокол - только UBX, включены пакеты - NAV-SOL, NAV-DOP, NAV-POSLLH, NAV-VELNED, NAV-TIMEUTC. Всё остальное выключено. При этой настройке не будут отображаться сигналы со спутников (NAV-SVINFO) - это нормально, они не нужны. Но для тестов можно включить, главное выключить не забыть.

Далее. Определяемся с ориентацией компаса, установленного в комбе. Нормальная ориентация - точкой вперёд по ходу движения, торцом вперед (не под 45 градусов). Перевёрнут (стоит на обратной стороне платы, там же, где все остальные детали, кроме антенны). В частности, на картинке выше - "нормальная" ориентация компаса, "вперёд" - это влево. Если ориентация не такая - придётся править код, либо, в случае с прошивкой Павла - ставить перемычки (см. рис.6)

Соединяем все детали между собой.

Рис.3 Принципиальная схема.
Схема делалась для зарубежного сайта, поэтому все подписи - на английском. Если что непонятно - задавайте вопросы.
Если не хочется возиться с впиливанием конвертера в корпус приёмника - можно купить готовый модуль, типа как по ссылкам во введении. Там на плате уже установлен стабилизатор на 3 вольта, питать плату можно только со стороны 5 вольт. Удобно, без гемора. Схема такого модуля приведена на рис.3 во врезке. Это по схеме выше будет "вариант 2". Я не искал лёгких путей, плюс, платы конвертера у меня не было (не доехала). Поэтому я сделал конвертер самостоятельно:

Рис.4 Плата конвертера
Плата сделана из кусочка текстолита, дорожки сделаны путём прорезки ножом по жирным белым линиям. Все резисторы - 10К, 0805. Транзисторы - BSS138 или TN2501, корпус SOT-23. Не самые общеупотребимые транзисторы, но найти можно. В принципе, как я понимаю, подойдут любые с низким напряжением насыщения (1,5-2V). Схема приведена выше, на общей схеме, на врезке ("Mosfet-based I2C level converter"). Подключена плата в разрыв проводов SDA и SCL, с учётом напряжения (Н-сторона - это 5-вольтовый I2C, L-сторона - соответственно, 3-вольтовый). Так как провода 3.3 вольта на разъёме не было - пришлось припаяться прямо к плате (см.рис.2).
В итоге - получилось так:

Рис.5 Готовый конвертер

Чтобы приёмник можно было подключать и отключать (например, для настройки) - к ардуине я припаял разъём (см.рис.1). В принципе, можно обойтись и без этого, но так удобнее. Чтобы ничего не замкнуть на плате ардуины, на плату был наклеен кусочек каптона, а к нему уже, в свою очередь, суперклеем приклеен разъём.

Pawelsky замастырил собственную мезонинную плату, к которой припаивается ардуина. Исходники лежат на OSH Park.
Выглядит платка так: (его конвертер уровней также сделан на BSS138)

Рисунок 6. Мезонинная плата переходника от pawelsky

С железом закончили, приступаем к софту.

В данный момент в свободный доступ выложена прошивка автора pawelsky. Это, на мой взгляд, самая стабильная и оттестированная прошивка из всех. Павел плохого не делает. Рекомендую заливать именно её!

Сказанное ниже относится к открытой прошивке (не от pawelsky):
Для компиляции прошивки конвертера (ардуины) нужны будут следующие компоненты:
1) Собственно Arduino IDE
2) Библиотека AltSoftSerial
3) Библиотека I2CDevLib, из которой нужны будут только модули HMC5883L и I2CDev.
Все эти библиотеки есть в приложении, необходимо их скопировать в каталог C:\Program Files (x86)\Arduino\libraries

Далее. Для проверки можно залить тестовые скетчи. Для проверки софтового последовательного порта, к которому прицеплен ГПС-приёмник, заливается скетч-пример из библиотеки AltSoftSerial, а для проверки компаса - пример из вложения.

Рабочая прошивка компилируется и заливается в ардуину штатным образом. Никаких настроек в прошивке нет.

После прошивки алгоритм работы примерно такой: когда ардуина получает пакет от U-blox-а, она мигает светодиодиком на плате и выплёвывает пакет с данными GPS в формате назы в "железный" последовательный порт. Плюс, каждые 30 мС ардуина опрашивает компас и посылает его данные. Ну и каждые 2 секунды посылается версия модуля.
Визуально работоспособность модуля проявляется в мигающем с частотой около 2.5 герц светодиоде.
При подключении ардуины к последовательному порту на скорости 115200 бод - должны валиться пакеты, начинающиеся с "55 АА", и дальше 10 - ГПС, 20 - компас, 30 - версия.

Видео:
Включение модуля на подоконнике:


Тестовый полёт. К сожалению, видео некачественное(зато моё) - я не догадался снять по-нормальному, как коптер висит. ГПС режим включен с 10 секунды.


Зато есть видео от разработчика, там со съёмкой висения порядок:

(хорошо в Италии.....)

Видео от Павла - разработчика закрытой и стабильной прошивки адаптера:

Ссылки.
Основная тема на rcgroups:
http://www.rcgroups.com/forums/showthread.php?t=2331009
Сообщение, в котором выкладываются обновления открытой прошивки и всё такое прочее:
http://www.rcgroups.com/forums/showpost.php?p=30567232&postcount=4

Тема, с которой всё началось:
http://www.rcgroups.com/forums/showthread.php?t=2290346
Сейчас в первом сообщении этой темы можно найти всю информацию, и файл прошивки, необходимый для повторения этого адаптера.
Тут надо отметить отдельно. Pawelsky - это чел, который, собственно, и сломал протокол назы, за что ему большой респект. Его библиотека NazaDecoder используется, в частности, в проекте MinnazaOSD.
Если у вас нет цели экспериментировать - однозначно рекомендую прошивку Павла!!!

Благодарности.
Хочу сказать большое спасибо разработчикам - Luketanti и pawelsky! Особенно второму =)
Свои мысли
Лично моё мнение - адаптер надо делать на процессоре с двумя аппаратными UART-ами. Типа ATMega16, хотя бы. Но дело осложняется, что поддержки таких камней нет в Arduino IDE, за исключением Mega128/256, которые очевидно избыточны, и в огромных корпусах. Если бы кто-нибудь подсказал, как организовать поддержку ATMega16 в ардуине, с аппаратными уартами - был бы благодарен. Интернет как-то не очень в этом плане определёнен. STM32 не предлагать - обвязка тупая, и я его не знаю.

Исходники
Всё, необходимое для повторения адаптера - схемы, плата, прошивки - в архиве в приложении.
(NazaEncoder.zip)


А
пдейты
1) По-видимому, есть баг в частоте передачи показаний компаса. Задал вопрос автору. Нет, всё нормально. Просто очень странно в коде было сделано разделение передачи показаний компаса по времени - приходом пакетов с ГПС-приёмника.
2) Количество тестеров увеличивается, сейчас количество людей, протестировавших адаптер, приближается к десятку. Налётано приличное количество часов, багов не обнаружено. Иногда наза не видит адаптер при старте, такое бывает. Надо дождаться фикса и передёрнуть питание коптера. В полёте адаптер не отваливается.
3) Почему-то автор прошивки принял решение убрать её из открытого доступа. То ли автор нашёл критичный баг и никому не говорит, то ли хочет продавать свои платки с прошивкой. То ли админы rcgroups удалили, непонятно. Наиболее вероятно последнее, что косвенно подтверждается комментариями. Но по-итогу - на rcgroups теперь прошивки нет. А здесь - есть =)
3а) Прошивка снова появилась, но уже в виде скомпилированного hex-файла. Что позволит её залить, но не позволит ничего поменять простыми способами. Так что, я полагаю, версия, выложенная здесь, и есть последняя доступная версия адаптера на принципах open source.
4) Luketanti анонсировал выпуск прошивки 0.3 - но пока не выпустил.
5) Обновил Arduino IDE и обнаружил неприятную вещь - прошивка перестала компилироваться, ругаясь на неизвестный тип "prog_uchar". Поддержку этого типа выпилили из ардуины, заменив название на "const unsigned char". Соответственно, если вы собираете прошивку в ардуине старше 1.0.5 - замените первое на второе, и всё будет ок.