GPS-модуль NEO-6M: характеристики и подключение к Arduino

Что выдаёт GPS-приёмник NEO-6M, как подключить его к Arduino UNO по UART и получить время, дату и координаты с помощью готовой библиотеки.
Что определяет приёмник
Навигационные спутники, в том числе американской системы GPS и российской GLONASS, движутся по точным орбитам и передают уникальные сигналы. Приёмник принимает их и вычисляет собственное положение. Уже по одному спутнику можно узнать дату и точное время. Для координат нужно не меньше трёх спутников, а четыре и более позволяют определить ещё и высоту. Анализируя изменение данных во времени, устройство рассчитывает скорость и направление движения.

Модуль на чипе NEO-6M компании U-blox состоит из платы и активной керамической антенны, которую перед работой подключают к разъёму. На плате размещены батарейка для быстрого старта, память EEPROM, стабилизатор напряжения MIC5205 на 3,3 В и контакты для подключения.
Формат данных NMEA
Модуль работает автономно: без каких-либо запросов он раз в секунду отправляет по UART пакет строк протокола NMEA 0183. Каждая строка начинается с символа «$» и заголовка, который сообщает о её содержимом, далее следуют значения через запятую. Например, строка $GPGGA содержит данные о последнем положении и точности, $GPGLL — координаты, $GPGSA — сведения об активных спутниках.
Характеристики
| Чип | U-Blox NEO-6M-0-001 |
| Чувствительность | -161 dBm |
| Скорость обновления | 5 Гц |
| Интерфейсы | UART (выведен), SPI, DDC, IIC |
| Скорость UART по умолчанию | 9600 бод |
| Формат данных | NMEA |
| Напряжение питания | 3–5 В |
| Потребление тока | 45 мА |
| Антенна | активная, в комплекте |
| Размеры платы | 57 х 25 x 15 мм |
| Вес комплекта | 18 г |
Скорость обмена можно менять в пределах от 4800 до 230400 бод. Настройки — скорость, состав выдаваемых данных — хранятся в EEPROM, изменяются командами контроллера и применяются при следующем запуске. Модуль совместим с программой U-Center и её аналогами.
Батарейка и индикатор
Перезаряжаемая батарейка до двух недель сохраняет в чипе последние сведения о спутниках, и тогда координаты появляются примерно через секунду после включения. Если батарейка разряжена, поиск начинается с нуля и занимает от 10 до 30 минут. Состояние показывает единственный светодиод: быстрое мигание означает поиск спутников и сбор информации, медленное — данные получены и передаются в порт.
Подключение к Arduino UNO
Достаточно подать питание и соединить линии RX и TX модуля и контроллера крест-накрест. Аппаратный UART у UNO один, на пинах 0 и 1, и он занят связью с компьютером, поэтому для приёмника используют программный порт: в примере это пины 3 (TX) и 4 (RX), при желании их можно заменить другими. Поскольку модуль сам отправляет данные, линия от контроллера к модулю нужна только для изменения настроек, а менять их без необходимости не рекомендуется.
К компьютеру приёмник подключается напрямую через адаптер TTL-UART; специальные программы преобразуют принятые данные в координаты и показывают точку на карте.

Разбор данных в скетче
Расшифровать поток NMEA можно вручную: найти строку с нужным заголовком, разделить её по запятым и разобрать поля — время UTC, широту, долготу, качество фиксации, число спутников. Для этого придётся изучить структуру всех строк. Проще взять готовую библиотеку; для получения времени, даты и координат подойдёт самая компактная. В примере использована iarduino_GPS_NMEA вместе с SoftwareSerial.
Скетч открывает аппаратный порт для монитора и программный для модуля, оба на 9600 бод, передаёт программный порт библиотеке и задаёт часовой пояс вызовом gps.timeZone(3). В цикле после gps.read() в монитор выводятся время, дата и день недели, широта, долгота, высота, скорость, курс, число активных и видимых спутников, показатели PDOP, HDOP и VDOP. Значения доступны по отдельности: время, к примеру, лежит в переменных gps.Hours, gps.minutes и gps.seconds, чего достаточно для синхронизации часов без модуля реального времени и интернета.
Осмысленные данные появляются не сразу. Пока приёмник ищет спутники, в конце строки выводятся пометки о недостоверности времени, даты или координат. В помещении с толстыми стенами вдали от окон результата может не быть вовсе, поэтому антенну размещают у окна или снаружи. В описанном опыте 8 активных спутников набралось примерно через 15 минут после включения, а через час их стало 14; чем больше спутников, тем выше точность.
Применение, сильные и слабые стороны
Модуль служит независимым источником точного времени, позволяет узнать местоположение устройства, записывать треки и считать пройденное расстояние, следить за скоростью и направлением, реагировать на выход из заданной зоны или вход в неё. Типичные самодельные проекты — трекер для автомобиля или домашнего животного, спортивный трекер.
Достоинства NEO-6M — простое подключение, компактность, надёжность и низкое энергопотребление. Главный недостаток — долгий выход на рабочий режим: там, где координаты нужны сразу после подачи питания, он не подойдёт. Существуют и другие GPS-модули с более быстрым запуском или лучшей чувствительностью.