Да-да, всё именно так.
В статье я опишу изготовление самодельного ГПС приёмника к контроллерам серии 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 - замените первое на второе, и всё будет ок.
Здесь многие не знаюи с какой ножки у микросхемы начинается счет, да и море всего, что знает радиолюбитель.
Тема, тем не менее, напрямую связана с хобби. Ибо хобби - это не только бальза и прочие дрова, это совокупность многих дел и занятий.
К слову говоря, адаптер этот можно сделать вообще без паяльника. Все модули идут с гребёнками, можно их соединить на разъёмах. Но получится - колхоз и адЪ. Мне было бы стыдно такое показать людям.
У меня нет оригинального ГПСа - ничего сказать не могу.
Наза на фотках - лайт, апгрейженная до в2.
3DFix - отключаем питание - Включаем питание - 3DFix - в полёт.
У вас, очевидно, либо фикса не было, либо точка "дом" записалась километрах в 10 от вашего фактического положения, по первому фиксу.
Никому не интересно впилить глонасс? Хорошие модули МТК? Странно.
У меня тоже была мысль, что делать - если Назовский ЖПС по-каким-то причинам погиб безвозвратно. Оказывается, вот она - альтернатива.
Но так как моя Наза пока не летает, а лежит в коробочке (ожидает постройки коптера под неё), и "комплектный" ЖПС пока цел - значит пока мне это не актуально. Но я рад, что решение есть. И на "подкорочку" что-то отложилось.
Теперь получается что? Можно купить назу лайт в комплектации без ЖПС и сделать из неё полноценную V2 (была статья по прошивке Назы недавно).
Единственное, что возможно некоторых остановило, так это - "альфа-релиз, сырой и бажный".
Что касается возможностей - они большие. Если уж Наза с фактически Neo-6M летает хорошо, то что говорить про мультисистемные приемники спутников! (у меня стоит модуль GPS/Glonass, подключен к АРМ - от 16 до 24 спутников видит, при HDOP 0,5 - loiter хорош.)
Да, собственно, так и сделано на этом коптере. Получается v2 за 80 долларов, вместо 299.
>>Единственное, что возможно некоторых остановило, так это - "альфа-релиз, сырой и бажный".
И тут соглашусь. Поэтому я и написал - для проф.применений - покупать оригинальный приёмник. Потому что хз, что там сглючит с этом конвертере в следующий раз. Пока не будет большого количества тестеров и отзывов - рекомендовать этот конвертер даже для любительского применения - наверное, не стоит. С другой стороны - если Павел всё-таки выложит хекс - вот это уже можно будет юзать. В течение ближайших пары недель, я думаю, он определится.
А сырой и бажный - Павел посмотрел код адаптера и сказал, что там есть несколько багов. Но не уточнил, где именно, и насколько критичных. Может быть, он сказал это просто, чтобы умерить "наш" пыл, может, для поддержки своего проекта.
Зря вы так. По тэгам очень удобно потом что-то искать. Например, напишу я в строке поиска (даже в гугле) "Наза" - и не найду вашу статью. А напишу "naza" - тогда найду. )))
))))
Ну и - проект открытый. Ничего не мешает заменить обработчик ублох на обработчик нмеа и заюзать какой-нибудь МТК3333