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

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

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

Видеообзор

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

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

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

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

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

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

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

1 группа

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

2 группа

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

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

Данные с 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-модуля
  switch(gps.getData()) {
    // всё 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.

GPS/GLONASS антенна

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

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

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

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

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

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

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

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

  • Модуль: 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 мм

Ресурсы