GPS на Neo-6M

… ну как же без навигации 🙂

Это самый, наверно, «народный» GPS модуль на Aliexpress (около 200 рублей). Где только нет описаний, по его использованию…. Чтоб «не выделяться» — пусть будет и тут…neo6m

В этой заметке не будет «привычного» подключения модуля к Ардуино. Просто изложу свой «поверхностный» взгляд на предмет. Чтоб не изобретать велосипед, за основу будет принят очень хороший текст (хоть и ориентированный на PIC-и).

«Модуль u-blox GY-NEO6MV2 представляет из себя небольшую плату на которой расположены модуль NEO-6M-0-001, стабилизатор напряжения 3.3В, EEPROM память, аккумулятор и светодиод. Модуль продается вместе с активной антенной квадратной или прямоугольной формы. Как и все GPS приемники, для передачи данных, модуль использует широко распространенный интерфейс UART, что облегчает его сопряжение с микроконтроллером.

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

По стандарту NMEA все сообщения начинаются с символа “$” и заканчиваются спецсимволами – возврат каретки (шестнадцатеричное значение 0x0D) и – перевод строки (шестнадцатеричное значение 0x0A). Первые два символа после “$” являются идентификатором системы, следующие три символа — идентификатор сообщения, например $GPZDA, где GP – глобальная система позиционирования, ZDA – означает, что сообщение содержит информацию о дате по UTC и локальный часовой пояс. После идентификатора сообщения следуют поля, содержащие значения параметров, в конце сообщения после символа “*” находится контрольная сумма. Поля разделяются запятыми, некоторые значения в полях могут отсутствовать, при этом запятые в сообщении не удаляются.»

Для того чтобы увидеть сообщения которые выдает GPS модуль, я (так же как и автор статьи) подключил его к компьютеру через USB-UART преобразователь на чипе PL2303. dscf9999Для подключения использовал только один вывод на GPS модуле, выход передатчика TX, так как отправлять команды на модуль я не буду, только принимать сообщения. Логика у модуля трехвольтовая, но для входа RX преобразователя — уровня «такой единицы» вполне достаточно. В качестве терминальной программы я использовал обычный монитор от IDE Arduino. По умолчанию модуль настроен на скорость 9600 бит/сек.mon1

«В зависимости от количества видимых спутников, данный модуль выдает от 6 до 8 сообщений, которые обновляются каждую секунду (стандартное время для большинства приемников). При достаточном количестве спутников и устойчивом сигнале на модуле начинает мигать светодиод.»

В выводимых сообщениях масса часто совсем не нужной информации. Довольно подробно, структура сообщений рассмотрена в упомянутой выше статье. Для моих целей, наиболее удобная строка с префиксом: $GPGGA.

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

$GPGGA,170840.00,5509.68339,N,06125.49498,E,1,07,2.41,186.2,M,-13.5,M,,*77
170840.00 Время UTC: 17ч. 08м. 40.00 сек.
5509.68339 Широта: 55 градусов, 09.68339 минут
N N – северная, S – южная
06125.49498 Долгота: 061 градусов, 25.49498 минут
E E – восточная, W – западная
1 Статус определения координат: 0 – позиция не определена, 1 – позиция определена, 2- позиция определена с повышенной точностью (DGPS)
07 Количество использованных спутников
2.41 Снижение точности в горизонтальной плоскости (HDOP)
186.2 Высота над уровнем моря
M Единица измерения высоты (метры)
-13.5 Геоидальное различие — различие между земным эллипсоидом WGS-84 и уровнем моря (геоидом)
M Единица измерения геоидального различия (метры)
Время с момента последнего обновления DGPS (секунды), 0 – DGPS не используется
*77 Контрольная сумма

Для примера, приведу три отсчета, полученные с модуля у окна деревенского дома dscf9995с интервалом в 2 минуты:

$GPRMC,073847.00,A,5610.83240,N,04045.18088,E,0.568,,041216,,,A*77
$GPVTG,,T,,M,0.568,N,1.053,K,A*2F
$GPGGA,073847.00,5610.83240,N,04045.18088,E,1,04,2.71,115.2,M,10.1,M,,*57
$GPGSA,A,3,27,32,21,24,,,,,,,,,5.43,2.71,4.71*07
$GPGSV,4,1,13,01,14,292,,08,51,268,,10,73,086,07,11,29,296,*79
$GPGSV,4,2,13,14,21,175,,15,04,035,24,18,39,075,21,21,11,118,22*71
$GPGSV,4,3,13,22,00,246,12,24,16,062,25,27,42,203,26,28,14,337,*73
$GPGSV,4,4,13,32,43,157,32*4F
$GPGLL,5610.83240,N,04045.18088,E,073847.00,A,A*65

$GPRMC,074035.00,A,5610.83608,N,04045.17274,E,0.361,,041216,,,A*74
$GPVTG,,T,,M,0.361,N,0.668,K,A*2F
$GPGGA,074035.00,5610.83608,N,04045.17274,E,1,05,2.62,105.3,M,10.1,M,,*58
$GPGSA,A,3,27,32,14,21,24,,,,,,,,5.06,2.62,4.33*07
$GPGSV,4,1,13,01,15,292,,08,51,267,20,10,72,085,13,11,30,296,*7A
$GPGSV,4,2,13,14,22,175,17,15,03,034,18,18,39,075,21,21,10,119,21*7E
$GPGSV,4,3,13,22,01,247,20,24,17,061,18,27,41,203,27,28,14,336,*7D
$GPGSV,4,4,13,32,44,157,24*4F
$GPGLL,5610.83608,N,04045.17274,E,074035.00,A,A*69

$GPRMC,074235.00,A,5610.83235,N,04045.17204,E,0.249,,041216,,,A*70
$GPVTG,,T,,M,0.249,N,0.462,K,A*2C
$GPGGA,074235.00,5610.83235,N,04045.17204,E,1,05,2.35,101.6,M,10.1,M,,*54
$GPGSA,A,3,27,32,14,21,24,,,,,,,,4.12,2.35,3.38*0D
$GPGSV,4,1,13,01,16,292,,08,51,265,,10,71,084,13,11,31,296,*7A
$GPGSV,4,2,13,14,23,175,19,15,02,034,19,18,38,075,19,21,09,119,24*76
$GPGSV,4,3,13,22,02,247,18,24,17,060,16,27,40,202,31,28,14,336,*7D
$GPGSV,4,4,13,32,44,156,25*4F
$GPGLL,5610.83235,N,04045.17204,E,074235.00,A,A*66

«Легкие выводы» из наблюдаемого: в первом отсчете было 4 спутника (см сроку GGA), в остальных — 5. При этом высота объекта скакнула аж на 10 метров! И даже для пяти видимых спутников высота не стабильна 🙁   Координаты «прыгают» в тысячных долях минут — это единицы — десятки метров…

Остается надеяться что «в поле» результаты будут более стабильными…

Если выдаваемая модулем «по умолчанию» информация нас удовлетворяет — на этом можно остановиться… Контроллеру останется только «выудить» нужные цифры из сообщения. Но, как правило, такой избыток информации только усложняет задачу инженера. Куда правильнее будет сократить «изрыгаемый» модулем поток… Среди многообразного функционала, предоставляемого программой u-center от производителя чипа, есть и такой. Я специально привожу ссылку на версию 8.16, т.к. более поздние версии уже не поддерживают старые ОС типа Windows XP.u-cent_1

Программка хороша, главное, что, кроме красивых картинок она умеет настраивать модуль. Но — для этого надо цеплять к USB-UART еще и цепь RX модуля (помним о трехвольтовой логике и ставим делитель на входе 4,7К+10К).

Первым делом в программе настраиваем параметры портаu-cent_2 а уж потом разбираемся с многочисленными настройками модуля: меняем скорость обмена, убираем ненужные строки, меняем периодичность выдаваемых данных (об этом позднее — если руки дойдут).

 

 

Добавить комментарий