Да-да, всё именно так.
В статье я опишу изготовление самодельного ГПС приёмника к контроллерам серии NAZA, на основе комбо для контроллера АРМ. Хотя ничего не мешает изготовить девайс и из отдельных комплектующих.
В статье я опишу изготовление самодельного ГПС приёмника к контроллерам серии 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 - замените первое на второе, и всё будет ок.
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 - замените первое на второе, и всё будет ок.
Ublox NEO 7 м GPS с компасом чехол для APM2.6 APM2.5 MWC PX4 Pixhawk 2.4.6 Подскажите, подойдет для реализации или нужна именно Ublox NEO 6?Как понимаю в этих модулях везде антена GPS 25x25x4 мм? Т.е. лучше чем оригинальная в назе лайт?
К слову - для использования адаптера павла никакие настройки делать не надо - надо запаять 3 ноги у ГПС приёмника. Вот так:
В мониторе при старте должно быть написано что-то вроде "Я адаптер, версия такая-то. Ищу компас... нашёл такой-то, ищу ГПС... нашёл такой-то"
Проверяйте, заливаются ли другие скетчи в арду (blink какой-нибудь, только время поменяйте на не стандартное (200, например), чтобы понятно было, что прошивка влилась). Может на адаптере DTR не выведен - так резет жать надо тогда.
Setting GPS UART Baud to 57600bps
Done!
Configuring Compass module
Done!
Configuring GPS module
Done!
Initialization Done!
я так понимаю это значит залилась прошивка?
Подключайте к назе - увидите, что компас появился. А когда спутники найдёт - то и индикация о спутниках появится
Ublox NEO 7 м GPS с компасом чехол для APM2.6 APM2.5 MWC PX4 Pixhawk 2.4.6 Подскажите, подойдет для реализации или нужна именно Ublox NEO 6?Как понимаю в этих модулях везде антена GPS 25x25x4 мм? Т.е. лучше чем оригинальная в назе лайт?
>> прошивки. Как можно получить нормальный лог?
Нормальное поведение.
Нормального лога не бывает - это же назовский ГПС, какой лог вы хотите? Модуль при старте выдаёт инфу о себе, вроде бы. Надо смотреть в описании.
К слову. То, что я говорил в заметке про "посылки вида 55 AA 20 06...." - это всё НЕХ. В обычном терминале это всё выглядит как иероглифы. Я использую прекрасный terminal by br@y - там есть отображение НЕХ. Но буфер быстро засирается, и потом всё адово тормозит.
Да. Именно 6. Это связано с ограничением бесплатной версии прошивки от Павла. Если вы заплатите Павлу денег - он вам пришлёт адаптер,ю в котором работает NeoM8N, но, кстати, насчёт 7-ки не уверен.
Protocol out: UBX
Baudrate: 57600Rates: Measurement Period: 200
Measurement Freguency: 5Hz
Navigation rate: 1
Navigation Frequency: 5 Hz Добавил скрины:По настройке на закладки MSG кинул для примера с NAV-DOP C такой настройкой при заливке скетча мигающей индикации нет, похоже модуль GPS как-то не правильно передает данные в ардуино?
Надеюсь кому-то помог)).
Скорее всего у вас разбилась керамическая антенна. Погуглив на эту тему узнал, что бьется она, даже если с метра уронить. Открываете модуль gps, антена — расположена на верхней стороне. Если она расколота — аккуратно поддеваете и снимаете, остается штырь, который надо просто выпаять. Потом заказываете антенну (gps patch 20×20) за 100-200р на ебэй и припаиваете назад. Отпишите, кому помогло плиз. Нагляднее на видео —
Когда антенна трескается - всё видится, но спутники не ищутся.
К слову. Автор как раз довёл конструкцию до вида "всё-в-одном". И вдруг внезапно появляются китайские клоны.