GPS является весьма полезным устройством, широко применяемым в настоящее время в различных устройствах и системах, например, отслеживание местоположения автомобиля, GPS часы, система обнаружения аварий, навигация трафика и т.д. В этой статье мы рассмотрим процессы считывания данных GPS с помощью платы Arduino Uno и передачи их в персональный компьютер.
GPS (Global Positioning System) представляет собой систему глобального позиционирования и навигации, с помощью которой можно определить широту и долготу любой точки на Земле, а также точное время в этой точке (UTC time — Universal Time Coordinated). GPS модуль будет основным устройством в нашем проекте. Данный модуль принимает координаты от спутников каждую секунду. Вместе с координатами осуществляется прием времени и даты, а также других сопутствующих данных. Внешний вид GPS модуля показан на следующем рисунке.
В этой обучающей статье про GPS мы рассмотрим как проверить и осуществить подключение GPS модуля с использованием Arduino и персонального компьютера. Для подключения этого модуля к компьютеру необходимо использовать либо конвертер USB в последовательный порт, либо плату Arduino. В этом проекте мы использовали плату Arduino. Для подачи питающего напряжения на GPS модуль мы будем использовать адаптер 12v/3.3v. Мы будем использовать приемный модуль GPS SKG13BL (его внешний вид представлен на приведенных рисунках).
Перед подключением этого модуля к компьютеру необходимо с платы Arduino вынуть микросхему микроконтроллера Atmega поскольку нам будет необходима только последовательная схема платы Arduino. Этот режим работы Arduino будет называться Gateway mode (режим шлюза/привратника). Удаление микросхемы микроконтроллера с платы Arduino показано на следующих рисунках.
Теперь сделаем соединения согласно приведенному рисунку:
1. GPS TX pin to Digital PIN 1 of Arduino (TXD)
2. GPS Ground Pin to GND PIN of Arduino
3. GPS Power (3.3v) Pin to 3.3v PIN of Arduino
После осуществления этих соединений присоедините USB кабель к компьютеру, откройте на компьютере программную среду Arduino IDE, выберите com порт и откройте последовательный монитор (serial monitor) чтобы просматривать сообщения, получаемые по последовательному порту. Также с помощью USB кабеля будет осуществляться подача питания на плату Arduino и GPS модуль.
После этого вы увидите GPS данные в окне последовательного монитора Arduino – пример этого показан на следующих рисунках. На первом рисунке показан случай когда GPS модуль находится вне зоны действия системы GPS, а на втором рисунке – случай, когда GPS модуль находится в ее зоне действия.
В окне последовательного монитора вы можете увидеть ряд строк (предложений), которые начинаются со знака $. Это так называемые NMEA строки. GPS модуль передает данные местоположения в реальном времени в NMEA формате, который состоит из ряда строк (предложений). Наиболее важными для нас из этих строк являются следующие:
- $GPGGA: Global Positioning System Fix Data (фиксированные данные глобального местоположения);
- $GPGSV: GPS satellites in view (спутники GPS в нашей зоне действия);
- $GPGSA: GPS DOP and active satellites (активные спутники);
- $GPRMC: Recommended minimum specific GPS/Transit data (специализированные данные GPS/транзитные данные).
Более подробные сведения об NMEA формате можно получить здесь (на английском языке).
Для определения координат местоположения и времени мы можем использовать строки $GPGGA и $GPRMC. Для определения даты и времени мы можем использовать строку $GPRMC.
Когда мы используем GPS модуль только для определения местоположения нам из всей совокупности данных NMEA формата будут нужны только координаты, которые мы сможем найти в строке $GPGGA. И именно эта строка $GPGGA (Global Positioning System Fix Data — фиксированные данные глобального местоположения) и используется наиболее часто в различных программах и устройствах, использующих технологию GPS, а остальные строки просто игнорируются.
Эта строка имеет следующую структуру (вторая строка — ее расшифровка):
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47
$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
В следующей таблице представлен перевод (описание) данных GPS из строки $GPGGA.
Идентификатор | Описание |
$GPGGA | Фиксированные данные системы глобального позиционирования |
HHMMSS.SSS | Время в формате: час минута секунда и миллисекунда |
Latitude | Широта (координата) |
N | Направление: N=North (север), S=South (юг) |
Longitude | Долгота (координата) |
E | Направление: E= East (восток), W=West (запад) |
FQ | Данные фиксированного качества (Fix Quality Data) |
NOS | Номер использованного спутника |
HPD | Фактор снижения точности при определении положения в горизонтальной плоскости (Horizontal Dilution of Precision) |
Altitude | Высота над уровнем моря |
M | Meter (метр) |
Height | Height (высота) |
Checksum | Данные контрольной суммы |
А строка $GPRMC, в основном, содержит скорость, время, дату и местоположение:
$GPRMC,123519.000,A, 7791.0381,N, 06727.4434,E,022.4,084.4,230394,003.1,W*6A
$GPRMC,HHMMSS.SSS,A,latitude,N,longitude,E,speed,angle,date,MV,W,CMD
В следующей таблице представлен перевод (описание) данных GPS из строки $GPRMC.
Идентификатор | Описание |
RMC | Recommended Minimum sentence C |
HHMMSS.SSS | Время в формате: час минута секунда и миллисекунда |
A | Статус // A=active (активный) and V= void (пустой, недействительный) |
Latitude | Широта (координата) |
N | Направление: N=North (север), S=South (юг) |
Longitude | Долгота (координата) |
E | Направление: E= East (восток), W=West (запад) |
Speed | Скорость в узлах (1 узел= 1,87 км в час) |
Angle | Угол места в градусах |
Date | Временная отметка (дата в UTC, Universal Time Coordinated — всеобщее скоординированное время) |
MV | Магнитное возмущение |
W | Direction of variation E/W (направление изменения E/W) |
CMD (*6A) | Данные контрольной суммы |
В большинстве случаев эта строка ($GPRMC) используется для извлечения данных времени, даты и скорости.
Видео, демонстрирующее работу схемы: