GPS/GLONASS (Troyka-модуль)

GPS/GLONASS принимает сигналы спутников глобального позиционирования — GPS, GLONASS и Galileo — и рассчитывает свои географические координаты, скорость перемещения, высоту над уровнем моря и точное локальное время.

Данные передаются на управляющую электронику в текстовом формате NMEA по интерфейсу UART.

Видеообзор

Принцип работы систем спутниковой навигации

Спутники непрерывно передают навигационные сигналы на дециметровых волнах. В сигнал входят метки точного времени и координаты самого спутника.

Навигатор, по задержке прохождения сигнала со спутника рассчитывает точное расстояние до него. Затем повторяет эту операцию для остальных известных спутников. Эти данные сводятся вместе — так получается точное значение координат приёмника.

Для работы навигаторов нужно открытое небо с минимум четырьмя спутниками в прямой видимости. Чтобы система работала по всей планете в каждой орбитальной группировке приходится держать более двух десятков спутников.

Подключение и настройка

GPS/GLONASS-модуль общается с управляющей платой по протоколу UART. При подключении к Arduino или Iskra JS удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов.

Примеры работы

Данные с GPS-модуля передаются на управляющую электронику в текстовом формате NMEA (от «National Marine Electronics Association») — это стандарт передачи данных оборудования навигации, связи и других информационных сетей.

Формат сообщений NMEA

NMEA сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое NMEA сообщение начинается с $, заканчивается \n (перевод строки) и не может быть длиннее 80 символов.

Список сообщений

  • AAM – Прибытие в путевую точку
  • ALM – Данные альманаха
  • АPA – Данные автопилота «А»
  • APB – Данные автопилота «В»
  • BOD – Азимут на пункт назначения
  • DTM – Используемый датум
  • GGA – Информация о фиксированном решении
  • GLL – Данные широты и долготы
  • GSA – Общая информация о спутниках
  • GSV – Детальная информация о спутниках
  • MSK – Передача управлению базовому приемнику
  • MSS – Статус базового приемника
  • RMA – Рекомендованный набор данных системы «Loran»
  • RMB – Рекомендованный набор навигационных GPS данных
  • RMC – Рекомендованный минимальный набор GPS данных
  • RTE – Маршрутная информация VTG – Вектор движения и скорости
  • WCV – Данные скорости вблизи путевой точки
  • WPL – Данные путевой точки
  • XTC – Ошибка отклонения от трека
  • XTE – Измеренная ошибка отклонения от трека
  • ZTG – UTC время и оставшееся время до прибытия в точку назначения
  • ZDA – Дата и время.

Некоторые из NMEA сообщений могут содержать одинаковые поля данных, либо полностью содержать данные других, меньших по размеру, NMEA сообщений.

Содержание NMEA сообщений

GGA - информация о фиксированном решении

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

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
  • GGA – NMEA Заговолок
  • 123519 –UTC время 12:35:19
  • 4807.038, N – Широта, 48 градусов 7.038 минуты северной широты
  • 01131.000, Е – Долгота, 11 градусов 31.000 минуты восточной долготы
  • 1 – тип решение, StandAlone решение
    • 0 – нет решения,
    • 1 – StandAlone,
    • 2 – DGPS,
    • 3 – PPS,
    • 4 – фиксированный RTK,
    • 5 – не фиксированный RTK,
    • 6 – использование данных инерциальных систем,
    • 7 – ручной режим,
    • 8 – режим симуляции
  • 08 – количество используемых спутников
  • 0.9 – геометрический фактор, HDOP
  • 545.4, М – высота над уровнем моря в метрах
  • 46.9, М – высота геоида над эллипсоидом WGS 84
  • [пустое поле] – время прошедшее с момента получения последней DGPS поправки. Заполняется при активизации DGPS режима
  • [пустое поле] – идентификационный номер базовой станции. Заполняется при активизации DGPS режима.
RMC — рекомендованный минимальный набор GPS данных

Это NMEA сообщение содержит весь наборы, так называемых «PVT» данных. «PVT» — общепринятое сокращение от «position, velocity, time» (позиция, скорость, время).

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
  • RMC – NMEA заголовок
  • 123419 – UTC время, 12:34:59
  • А – статус (А- активный, V- игнорировать)
  • 4807.038,N – Широта, 48 градусов 07.038 минут северной широты
  • 01131.000,Е – Долгота, 11 градусов 31.000 минута восточной долготы
  • 022.4 – Скорость, в узлах
  • 084.4 – Направление движения, в градусах
  • 230394 – Дата, 23 марта 1994 года
  • 003.1,W – Магнитные вариации

Пример кода для Arduino

В качестве примера выведем в Serial данные с GPS-модуля. Распарсим строки в отдельные переменные и сохраним их. Для этого скачайте и установите библиотеку TroykaGPS

gpsTest.ino
// библиотека для работы с GPS устройством
#include <TroykaGPS.h>
// создаём объект класса GPS и передаём в него объект Serial1 
GPS gps(Serial1);
// задаём размер массива для времени, даты, широты и долготы
#define MAX_SIZE_MASS 16
// массив для хранения текущего времени
char time[MAX_SIZE_MASS];
// массив для хранения текущей даты
char date[MAX_SIZE_MASS];
// массив для хранения широты в градусах, минутах и секундах
char latitudeBase60[MAX_SIZE_MASS];
// массив для хранения долготы в градусах, минутах и секундах
char longitudeBase60[MAX_SIZE_MASS];
 
void setup()
{ 
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(115200);
  // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial) {
  }
  Serial.print("Serial init OK\r\n");
  // открываем Serial-соединение с GPS-модулем
  Serial1.begin(115200);
}
 
void loop()
{
  // если пришли данные с gps-модуля
  if (gps.available()) {
    // считываем данные и парсим
    gps.readParsing();
    // проверяем состояние GPS-модуля
    switch(gps.getState()) {
      // всё OK
      case GPS_OK:
        Serial.println("GPS is OK");
        // выводим координаты широты и долготы
        // 1. в градусах, минутах и секундах
        // 2. градусах в виде десятичной дроби
        Serial.println("GPS Coordinates: ");
        gps.getLatitudeBase60(latitudeBase60, MAX_SIZE_MASS);
        gps.getLongitudeBase60(longitudeBase60, MAX_SIZE_MASS);
        Serial.print("Latitude\t");
        Serial.print(latitudeBase60);
        Serial.print("\t\t");
        Serial.println(gps.getLatitudeBase10(), 6);
        Serial.print("Longitude\t");
        Serial.print(longitudeBase60);
        Serial.print("\t\t");
        Serial.println(gps.getLongitudeBase10(), 6);
        // выводим количество видимых спутников
        Serial.print("Sat: ");
        Serial.println(gps.getSat());
        // выводим текущую скорость
        Serial.print("Speed: ");
        Serial.println(gps.getSpeedKm());
        // выводим высоту над уровнем моря
        Serial.print("Altitude: ");
        Serial.println(gps.getAltitude());
        // выводим текущее время
        Serial.print("Time: ");
        gps.getTime(time, MAX_SIZE_MASS);
        gps.getDate(date, MAX_SIZE_MASS);
        Serial.write(time);
        Serial.println();
        // выводим текущую дату
        Serial.print("Date: ");
        Serial.write(date);
        Serial.println("\r\n");
        // каждую переменную дату и времени можно выводить отдельно
  /*    Serial.print(gps.getHour());
        Serial.print(gps.getMinute());
        Serial.print(gps.getSecond());
        Serial.print(gps.getDay());
        Serial.print(gps.getMonth());
        Serial.print(gps.getYear());
  */   
        break;
      // ошибка данных
      case GPS_ERROR_DATA:
        Serial.println("GPS error data");
        break;
      // нет соединение со спутниками
      case GPS_ERROR_SAT:
        Serial.println("GPS no connect to satellites!!!");
        break;
    }
  }
}

Пример кода для Iskra JS

Выведем данные о координатах, высоте над уровнем моря, количестве видимых спутников и точном времени в консоль Web IDE.

testGPS.js
Serial3.setup(115200, {rx: P0, tx: P1});
var gps = require("GPS").connect(Serial3, function(data) {
  console.log(data);
});

Элементы платы

Модуль NL3333

NL3333 – навигационный приемник НАВИА, выполненный в оригинальном форм-факторе 8.7×9.5 мм на базе чипсета MediaTek MT3333.

Приемник использует весь спектр GNSS систем: GPS, GLONASS и Galileo. NL3333 отличается высокой чувствительностью, малым энергопотреблением и быстрым временем первой фиксации (TTFF). Связь с модулем осуществляется через UART, данные выводятся по протоколу NMEA.

Контакты подключения трёхпроводных шлейфов

1 группа

  • Земля (G) — соедините с землёй микроконтроллера
  • Питание (V) — соедините с питанием микроконтроллера
  • Сигнальный (TX) — подключите к пину RX микроконтроллера

2 группа

  • Сигнальный (P) — подключите к сигнальному пину микроконтроллера
  • Сигнальный (RX) — подключите к пину TX микроконтроллера

GPS/GLONASS антенна

Пассивная антенна на керамической подложке необходима для приёма сигнала навигационным приемником GPS/GLONASS.

Преобразователь логических уровней

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

В нашем случае это может быть управляющее устройство Arduino с 5 вольтовой логикой и GPS/GLONASS модуль с 3,3 вольтовой логикой.

Светодиодная индикация

Имя светодиода Назначение
RX и TX Мигают при обмене данными между GPS/GLONASS модулем и управляющим устройством.
P Индикатор приёма спутниковых сигналов. Мигает если GPS-модуль «нашёл себя»

Обновление прошивки GPS-модуля

По умолчанию в GPS-модуле NL3333 установлена стабильная прошивка. Периодически выходят новые версии прошивки — с улучшениями и новыми функциями. Для обновления прошивки вам понадобится одна из плат:

  1. В зависимости от выбранной платы, соберите следующую схему:
    1. USB-Serial адаптер
    2. Arduino Uno
    3. Arduino Mega 2560
  2. Скачайте и распакуйте необходимый софт и файлы прошивки модуля:
    1. Flash Tool — программа для обновления прошивки;
    2. прошивка загрузчика для чипсета NL3333;
    3. файл прошивки для чипсета NL3333
  3. Запустите программу Flash Tool.
  4. Нажмите на кнопку Download Agent и выберите файл прошивки загрузчика для чипсета NL3333. После чего увидите путь к файлу загрузчика для чипсета NL3333.
  5. Нажмите на кнопку ROM и выберите файл прошивки для чипсета NL3333. В результате вы увидите путь к файлу прошивки для модуля NL3333.
  6. Выберите номер COM-порта платы программатора. Узнать номер COM-порта вашей платы можно в диспетчере устройств.
  7. Выберите скорость обновление прошивки модуля 115200.
  8. Установите текущую скорость модуля 115200.
  9. Настройки закончены. Нажмите на кнопку Connect. Перед вами откроется окно состояния прошивки модуля.
  10. Нажмите кнопку Download. В прогресс баре вы увидите процесс прошивки GPS-модуля.
  11. После окончания прошивки в окне состояния появится зелёный кружок. Это значит всё получилось и можно продолжать работу с модулем.

Принципиальная и монтажная схемы

Характеристики

  • Модуль: NL3333
  • Рабочее напряжение: 3,3–5 В
  • Потребляемый ток:
    • Поиск: 22 мА
    • Слежение: 18 мА
  • TTFF (время до определения координат)
    • горячий старт: 1 с
    • холодный старт: 25 с
  • Рабочие частоты:
    • GPS L1: 1575.42 МГц
    • GLONASS L1: 1598.0625–1605.375 МГц
    • GALILEO E1: 1575.42 МГц
  • Габариты: 25,4×25,4 мм

Ресурсы