Проект 33: Модуль GPS. Принцип работы, подключение, примеры

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

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
GPS-приемник V.KEL VK16E;
провода папа-папа.

GPS (Global Positioning System) – это система, позволяющая с точностью не хуже 100 м определить местоположение объекта, то есть определить его широту, долготу и высоту над уровнем моря, а также направление и скорость его движения. Кроме того, с помощью GPS можно определить время с точностью до 1 наносекунды. GPS состоит из совокупности определенного количества искусственных спутников Земли (спутниковой системы NAVSTAR) и наземных станций слежения, объединенных в общую сеть. В качестве абонентского оборудования служат индивидуальные GPS-приемники, способные принимать сигналы со спутников и по принятой информации вычислять свое местоположение. Мы используем GPS-приемник V.KEL VK16E (см. рис. 33.1).

GPS-приемник V.KEL VK16E
Рис. 33.1. GPS-приемник V.KEL VK16E

Назначение выводов:

• BOOT – зарезервировано;
• GND – общий вывод;
• RX – вход для данных в последовательном формате UART;
• TX – выход для данных в последовательном формате UART;
• VCC – вход напряжения питания от 3,3 до 5 В;
• PPS – выход импульсов времени.

Холодный старт происходит, когда GPS-приемник был выключен длительное время, перемещался в выключенном состоянии на значительное расстояние или его часы не совпадают с данными спутника. При холодном старте со спутников скачивается альманах. Время обновления альманаха – от 5 до 15 минут в зависимости от условий приема и количества видимых спутников. Особенность – приемник в это время должен быть неподвижен. Теплый старт происходит, когда приемник был выключен более 30 мин. При этом происходит прием уточняющих данных. Занимает 0,5–1,5 мин. Горячий старт происходит, когда приемник был отключен непродолжительное время. Данные считаются свежими, и приемник просто находит спутники (опираясь на данные альманаха). Для проверки работоспособности подключим модуль по последовательному порту к компьютеру с ОС Windows, используя USBTTL- адаптер, и запустим программу MiniGPS_v1.7.1.exe. Программа показывает количество найденных приемником спутников и в случае их достаточного числа показывает наше местоположение – географические широту и долготу (см. рис. 33.2). Мигание зеленого светодиода сигнализирует о достаточном для определения положения количестве спутников. Теперь подключим GPS-приемник к плате Arduino и будем выводить данные о местоположении – географические широту и долготу в монитор последовательного порта Arduino. Схема подключения показана на рис. 33.3.
 
Схема подключения GPS-приемника к Arduino
Рис. 33.3. Схема подключения GPS-приемника к Arduino

Приступим к написанию скетча. Будем использовать библиотеки SoftwareSerial и TinyGPS, позволяющую выделять нужные данные из всего потока, передаваемого приемником. Содержимое скетча показано в листинге 33.1.

#include
#include
TinyGPS gps;
SoftwareSerial gpsSerial(7, 8);
bool newdata = false;
unsigned long start;
long lat, lon;
unsigned long time, date;
void setup()
{
gpsSerial.begin(9600); // скорость обмена с GPS-приемником
Serial.begin(9600);
Serial.println("Waiting data of GPS...");
}
void loop()
{
// задержка в секунду между обновлениями координат
if (millis() - start > 1000)
{
newdata = readgps();
if (newdata)
{
start = millis();
gps.get_position(&lat, &lon);
gps.get_datetime(&date, &time);
Serial.print("Lat: "); Serial.print(lat);
Serial.print(" Long: "); Serial.print(lon);
Serial.print(" Date: "); Serial.print(date);
Serial.print(" Time: "); Serial.println(time);
}
}
}
// проверка наличия данных
bool readgps()
{
while (gpsSerial.available())
{
int b = gpsSerial.read();
//в TinyGPS есть ошибка: не обрабатываются данные с \r и \n
if('\r' != b)
{
if (gps.encode(b))
return true;
}
}
return false;
}

Порядок подключения:

1. Собираем схему, согласно рис. 33.1.
2. Загружаем в плату Arduino скетч из листинга 33.1.
3. Ждем мигания зеленого светодиода на приемнике GPS, сигнализирующего о наличии данных о местоположении.
4. Смотрим в мониторе последовательного порта Arduino вывод данных широты и долготы. Также получаем текущую дату и время по Гринвичу (рис. 33.4).

Вывод данных GPS в монитор последовательного порта Arduino
Рис. 33.4. Вывод данных GPS в монитор последовательного порта Arduino
 
Листинги программ скачать


 

Вверх