Сегодня GPS модули применяются практически во всех сферах человеческой жизни. Маяки встраивают в ошейники для собак и котов, размещают в брелоках. Выпускаются любые GPS-трекеры для ношения на руке – спортивные, детские варианты.
Специальные модели часов могут выполнять функции, например, навигатора, компаса, сопровождать на маршрутах. И, конечно, маячки широко применяются велосипедистами, байкерами и автолюбителями для контроля местоположения своего транспортного средства, скорости передвижения. В автомобилях такой модуль GPS помогает работе автопилота, может запереть или открыть двери, заблокировать двигатель и многое другое.
GPS-трекер нужного назначения можно купить, а можно собрать самостоятельно.
Расскажем, что нужно для того чтобы создать автомобильный маяк. Рассмотрим процесс изготовления трекера на базе GY-NEO6M своими руками.
Модуль позволяет:
- Получать широту, долготу и высоту над уровнем моря.
- Получать скорость и курс на истинный полюс.
- Получать дату и время UTC.
- Получать количество спутников участвующих в позиционировании.
- Получать данные: уровень приёма, положение и тип системы.
- Получать геометрические факторы ухудшения точности и точность позиционирования.
- Определять ошибку определения координат, даты, времени, скорости и курса.
- Настраивать скорость передачи данных по шине UART.
- Настраивать частоту обновления выводимых данных.
- Выбирать версию протокола NMEA0183 для формирования отправляемых сообщений.
- Настраивать состав сообщений NMEA0183.
- Выбирать спутниковые системы, данные которых требуется получать.
- Выбирать динамическую модель платформы.
- Перезагружать модуль с выбором типа старта (холодный / горячий).
- Перезагружать модуль со сбросом настроек в заводские.
- Сохранять настройки в энергонезависимую память модуля.
- GPS-модули для «Ардуино»
- GPS модуль GY-NEO6MV2
- Комплектация
- Технические характеристики
- Подключение
- Проверка работы GPS модуля
- Через программу U-Center
- Visual GPS
- Через Arduino IDE
- Подключение:
- Способ – 1: Используя провода, Piranha UNO и программный UART
- Способ – 2: Используя провода, Piranha ULTRA и аппаратный UART
- Способ – 3: Используя Trema Set Shield
- Способ – 4: Используя проводной шлейф и Shield
- Способ – 5: Напрямую к компьютеру через USB-UART
- Тестирование GPS модуля Arduino
- Как сделать GPS-трекер на основе GY-NEO6M
- Перезагрузка модуля со сбросом его настроек на заводские:
- Описание функций библиотеки iarduino_GPS_ATGM336:
- Подключение библиотеки:
- Функция begin;
- Функция baudrate;
- Функция updaterate;
- Функция composition;
GPS-модули для «Ардуино»
Arduino – это небольшая плата (цена ее около ста рублей) со встроенной микросхемой, управляющей электронными устройствами (микроконтроллером).
Фактически это база с открытым исходным кодом, предназначенная для сборки цифровых приборов.
Для работы с ней выпускается большое количество GPS модулей, которые могут определять координаты точки расположения, время, дату, функционируют в качестве спидометра (показывают скорость движения).
Из наиболее известных можно отметить:
- GPS модуль VK2828U7G5LF, работающий со спутниками GPS и поддерживающий GLONASS. У него есть собственная память, сохраняющая настройки прибора. Работает при напряжении 3–5 вольт и по протоколу NMEA0183. Есть керамическая антенна.
- SKM53 GPS отличается малым потреблением энергии, невысокой ценой. Оснащен антенной. Высокая производительность обеспечивается наличием двадцати двух каналов слежения и шестидесяти шести позиционирования. Устройство обеспечивает высокую производительность навигации при различных условиях видимости.
- GPS-трекер для машины EM-411. Также отличается низким потреблением питания, имеет большую память. Работает с данными протокола NMEA0183.
- GY NEO6MV2 GPS модуль тоже рассчитан для подключения. Выпускается фирмой U-Blox. Это одна из самых новых разработок, позволяющая получить максимально точные данные о локации. Ниже разберем его возможности подробнее.
GPS модуль GY-NEO6MV2
Чаще всего модуль GPS NEO 6M используется в автомобилях и коптерах. Новая модификация NEO6MV2 с блоком управления полетами EEPROM MWC APM2.5 и большой антенной.
Фактически этот GPS модуль является самостоятельным микроконтроллером, анализирующим полученные от спутников данные.
Прибор работает по протоколу NMEA0183, использующемуся для связи с приемниками.
Расшифровывается как National Marine Electronics Association. Цифры 0183 обозначают использование для морского оборудования.
NMEA 0183 обеспечивает получение информации:
- GPRMC – минимальные данные со спутников навигации (координаты, параметры времени, скорости, направления);
- GPGGA – фиксация све́дений по глобальной системе определения геолокации;
- GPGSA – активные спутники и их расположение относительно антенны приемника;
- GPGLL – показатели широты, долготы, время установления координат.
После установления локации GPS модуль может рассчитать:
- скорость перемещения;
- направление движения;
- расстояние до точки назначения;
- через какое количество километров GPS модуль отключится без подзарядки.
GPS трекер использует:
- SBAS – спутниковые системы коррекции, увеличивающие точность координат (до двух метров);
- A-GPS – система, снижающая время холодного старта прибора. Ускорение происходит за счет загрузки предварительных данных не с космических аппаратов, а через другие каналы (сервера u-blox, сервисов AssistNow Offline (долгосрочный альманах) и AssistNow Online).
Комплектация
Состоит из платы, на которой размещены:
- NEO-6M-0-001;
- независимая от источников энергии память;
- аккумуляторная батарея;
- стабилизатор напряжения;
- светодиод.
Технические характеристики
Параметры, описывающие инженерные особенности GPS прибора, разместим в таблице.
Характеристика | Единица измерения | Значение |
Напряжение питания | Вольты | 3–5 |
Вес | Граммы | 18 |
Частота обновления (выдачи информации) | Герц | 1–5 |
Диапазон рабочих температур | Градусы Цельсия | –45… +85 |
Точность местоположения | Метры | 2,5 |
Погрешность показаний скорости | Метры в секунду | 0,1 |
Погрешность курса (азимута) | Градусы | 0,5 |
Время запуска:
Горячего Холодного |
Секунды | 1
27 |
Количество каналов связи | Штуки | 50 |
Ток потребляемый модулем: до 25 мА.
Подключение
У приемника НЕО-6М есть всего четыре контакта:
- VCC;
- GND;
- TX;
- RX.
Для последовательной связи устройства подключение нужно производить следующим образом
- вывод GND (земля) «кидается» на одноименный;
- RX (вход для данных UART) на модуле соединяется с третьим контактом;
- TX (выход для данных UART) GPS-блока выводится на четвертый контакт платы;
- VSS (питание) с NEO6 подводится к штырю 5V.
После соединения Arduino подключается к компьютеру через USB. Производится холодный старт, и начинается скачивание «альманаха» (получение «псевдослучайного кода», «эфемеридов» и собственно «альманаха»). Период загрузки, как правило, не превышает 15–20 минут. Время зависит от доступности и количества космических аппаратов в точке расположения.
Для удобного отображения информации (скетча), расширения возможностей GPS прибора нужно подключить библиотеки.
Проверка работы GPS модуля
Перед окончательной сборкой трекера на Arduino нужно проконтролировать его работоспособность, сделать это можно двумя способами.
Через программу U-Center
Это специальное ПО от производителя GPS приборов для установки местоположения.
Для того чтобы скачать программное обеспечение, нужно зайти на u-blox.com, в разделе «Техподдержки» найти версию, подходящую NEO-6M, нужной операционной системе, установленной на десктопе, скачать ПО на компьютер.
Настраивается функционал через меню в разделе Receiver-Port.
После соединения GPS прибора с компьютером (USB-UART) преобразователь и соединения с программой на приборе загорится зеленый индикатор, и начнется поиск. Как только ответ будет получен, на экране появятся данные: время, азимут, координаты.
Все сообщения лучше смотреть в окне Messages. Выбрать, какая информация будет передаваться на микроконтроллер, можно через пункты меню View – Messages. Чем меньше данных потребуется, тем быстрее контроллер будет обрабатывать массив.
Передаваемая информация отображается в меню View. Каждая строчка начинается с символа $. Затем пишется код протокола NMEA 0183, а уже за ним следуют значения параметров.
Также можно изменить частоту отправки информации в разделе Measurement Period. Если Navigation Frequency установить равным 0,5 Герц, то обновления будут производиться раз в 2 секунды.
Программа U-Center разработана для использования разных блоков, и не все ее опции будут работать на GPS модуле GY-NEO6MV2. Как пример: даже после установки получения данных GLRMC информация приходить не будет, потому что ГЛОНАСС описываемый прибор не поддерживает.
Visual GPS
Эта программа используется для отображения GPS данных по протоколу NMEA0183 в графическом виде. Программа позволяет записывать лог GPS данных в файл. Существует два режима работы в программе – в первом Visual GPS связывается с приемником GPS, а во втором Visual GPS считывает показания из файла. Программа имеет 4 основных окна – Signal Quality (качество сигнала), Navigation (навигация), Survey (исследование), Azimuth and Elevation (азимут и высота).
Через Arduino IDE
Программное обеспечение тоже позволяет работать с шилдом NEO 6M.
Узел, подключенный к Arduino, также присоединяется к компьютеру, загружается скетч (это файлы .ino, или прошивка), и на экране проверяется результат. Иногда можно увидеть только непонятные наборы символов. В этом случае нужно согласовать скорость работы интерфейса Arduino с компьютером и шилда с контроллером.
Для сопряжения требуется некоторое время (несколько минут), после чего прибор начнет передавать координаты. А на микроконтроллере замигает светодиодная лампочка.
В программе отобразятся долгота и широта текущей точки, время и дата получения данных по Гринвичу.
Arduino IDE позволяет откорректировать часовой пояс в строке Serial.print
Подключение:
На плате модуля расположен разъем из 5 выводов.
- TX – выход данных шины UART от модуля. Подключается к выводу RX Arduino.
- RX – вход данных шины UART в модуль. Подключается к выводу TX Arduino.
- Vcc – вход питания 3,3 или 5 В.
- GND – общий вывод питания.
- PPS – выход меандра с частотой 1 Гц. Передний фронт импульсов совпадает с временем UTC.
При подключении модуля не к аппаратной, а к программной шине UART, вы сами назначаете выводы TX и RX Arduino к которым подключается модуль.
Модуль удобно подключать 5 способами, в зависимости от ситуации:
Способ – 1: Используя провода, Piranha UNO и программный UART
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ – 2: Используя провода, Piranha ULTRA и аппаратный UART
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha ULTRA.
С данным подключением будет использоваться второй аппаратный UART на Piranha ULTRA. Стоит заметить, что программный порт на UNO безошибочно работает на скорости до 57600 бод, в то время как аппаратный без проблем может работать на скорости 115200, вдвое большей.
Способ – 3: Используя Trema Set Shield
При таком подключении можно использовать программный UART на 8 и 9 цифровых выводах. Так же на этих выводах находиться второй аппаратный последовательный порт Piranha ULTRA, что ещё больше упрощает работу с модулем.
Способ – 4: Используя проводной шлейф и Shield
Используя 2-х и 3-х проводные шлейфы, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Способ – 5: Напрямую к компьютеру через USB-UART
Тестирование GPS модуля Arduino
Иногда в процессе контрольного подключения не устанавливается связь с навигационными спутниками. Тогда необходимо проверить:
- подключение антенны;
- уровень напряжения питания (5 вольт).
Если все сделано верно, а спутники продолжают оставаться вне зоны доступа, надо вынести прибор на открытое пространство: за окно, на улицу.
Еще лучше для проведения теста взять заряженное устройство Neo-6 и контрольный аппарат (например, планшет или смартфон) и пройтись (проехать) по определенному маршруту. А вернувшись домой, посмотреть записанные треки.
Пользователи, проводящие сравнение, отмечают что:
- GY NEO6MV2 начал показывать информацию быстрее, чем мобильное устройство;
- энергопотребление у NEO-6 ниже;
- получить отображение маршрута на карте сложнее, для этого нужно дополнительно конвертировать данные.
Как сделать GPS-трекер на основе GY-NEO6M
Один из способов собрать своими руками маяк для машины выглядит следующим образом:
- Подготавливаем:
- STM32F3-Discovery – отладочная плата;
- шилд NEO-6M;
- ЖК-матрицу, которая будет отображать данные;
- внешний аккумулятор для обеспечения возможности автономной работы.
- Соединяем NEO6 с Arduino.
- Подключаем экран к плате по схеме:
Выводы LSD | Пины Ардуино |
VSS | GND |
VCC | 5V |
LED+ | VCC |
LED | GND |
VEE | 10K резистор |
D4 | A2 |
RS | A0 |
D5 | A3 |
R/W | GND |
D6 | A4 |
E | A1 |
D7 | A5 |
- Размещаем собранное устройство в корпусе.
- Скачиваем и устанавливаем библиотеки:
- для преобразования сообщений в удобочитаемый формат;
- SoftwareSerial для ускорения обработки данных.
- Подключаемся с ноутбука или ПК к Google Maps или другим картам и снимаем информацию с прибора через монитор.
Можно самостоятельно собрать полноценный GPS- приемник-маяк. Итоговые затраты будут значительно ниже предлагаемых на рынке подобных приборов.
Для настройки функционала, проверки работы устройства есть специальное программное обеспечение от разработчиков платы, модуля GPS NEO6.
Перезагрузка модуля со сбросом его настроек на заводские:
Пример перезагружает модуль со сбросом его настроек (скорость передачи данных, частота обновления выводимых данных, версия протокола и его состав, используемые спутниковые системы и динамическая модель) в значения по умолчанию.
Описание функций библиотеки iarduino_GPS_ATGM336:
Библиотека iarduino_GPS_ATGM336 может использовать как аппаратную, так и программную реализацию шины UART для работы с Trema GPS модулем.
Подключение библиотеки:
- Если GPS модуль подключён по аппаратной шине UART (в примере используется UART-1):
Строки со звездочкой в комментарии можно исключить, если вы не собираетесь читать данные при помощи библиотеки iarduino_GPS_NMEA.
- Если GPS модуль подключён по программной шине UART (в примере используются выводы D8 и D9 для подключения модуля к Arduino):
Строки со звездочкой в комментарии можно исключить, если вы не собираетесь читать данные при помощи библиотеки iarduino_GPS_NMEA.
- Вывод TX подключается к выводу RX, а вывод RX подключается к выводу TX.
Функция begin;
- Назначение: Инициализация работы с GPS модулем по шине UART.
- Синтаксис: begin( SERIAL );
- Параметры:
- SERIAL – объект или класс для работы с шиной UART по которой подключён GPS-модуль.
- Возвращаемое значение: bool – результат инициализации (true или false).
- Примечание:
- Функция должна быть вызвана до обращения к функции begin библиотеки iarduino_GPS_NMEA, если таковая используется в скетче.
- Функция определяет наличие GPS модуля на шине UART, узнаёт скорость передачи данных на которую настроен модуль (это может занять несколько секунд) и указывает шине UART работать на обнаруженной скорости.
- Если шине UART была задана скорость до обращения к данной функции, то функция сначала проверит соответствует ли указанная скорость для работы с модулем, а если скорость не подходит, то изменит её на скорость передачи данных модуля.
Функция baudrate;
- Назначение: Установка скорости передачи данных модуля по шине UART.
- Синтаксис: baudrate( [СКОРОСТЬ] );
- Параметры:
- uint32_t СКОРОСТЬ – целое число может принимать следующие значения:
- 4800 бит/сек.
- 9600 бит/сек. – это значение установлено в модуле по умолчанию.
- 19200 бит/сек.
- 38400 бит/сек.
- 57600 бит/сек.
- 115200 бит/сек.
- uint32_t СКОРОСТЬ – целое число может принимать следующие значения:
- Возвращаемое значение: uint32_t – результат установки скорости модуля (true / false).
- Примечание:
- Функция устанавливает указанную скорость и модулю и шине UART.
- Если функцию вызвать без параметра, то функция обнаружит текущую скорость модуля и установит её для шины UART.
При этом функция вернет:- false (0) – если скорость модуля не определена.
- true (1) – если скорость модуля совпадает с уже установленной скоростью шины UART.
- СКОРОСТЬ – обнаруженная скорость модуля установленная для шины UART.
Функция updaterate;
- Назначение: Установка частоты обновления сообщений выводимых модулем.
- Синтаксис: updaterate( ЧАСТОТА );
- Параметры:
- uint8_t ЧАСТОТА – целое число от 1 до 10 Гц (от 1 до 10 раз в секунду).
- Возвращаемое значение: Нет.
- Примечание:
- Функция указывает модулю, как часто надо отправлять сообщения NMEA по шине UART.
- По умолчанию модуль отправляет сообщения NMEA с частотой 1 Гц (1 раз в секунду).
- Данные читаются функцией
read
библиотеки iarduino_GPS_NMEA, в два раза медленнее, чем их отправляет модуль. Функцияread
не знает какое количество строк включено в сообщение NMEA 0183 отправляемое GPS-модулем, по этому читает данные до получения идентификатора уже прочитанной строки, или до истечения времени указанного функциейtimeOut
той же библиотеки.
Функция composition;
- Назначение: Установка состава сообщений отправляемых модулем.
- Синтаксис: composition( ИДЕНТИФИКАТОРЫ );
- Параметры:
- uint8_t ИНДЕНТИФИКАТОРЫ – от 1 до 11 идентификаторов строк сообщения NMEA. Идентификаторы указываются через запятую и могут принимать следующие значения:
- NMEA_GGA – данные о последнем зафиксированном местоположении.
- NMEA_GLL – географические координаты.
- NMEA_GSA – активные спутники и геометрические факторы ухудшения точности.
- NMEA_GSV – информация о всех наблюдаемых спутниках.
- NMEA_RMC – рекомендуемый минимум навигационных данных.
- NMEA_VTG – скорость и курс относительно земли.
- NMEA_ZDA – дата и время.
- NMEA_ANT – текстовое сообщение о состоянии антенны.
- NMEA_DHV – скорость движения GNSS приемника.
- NMEA_TXT – текстовое сообщение.
- NMEA_GST – статистика ошибок позиционирования.
- uint8_t ИНДЕНТИФИКАТОРЫ – от 1 до 11 идентификаторов строк сообщения NMEA. Идентификаторы указываются через запятую и могут принимать следующие значения:
- Возвращаемое значение: Нет.
- Примечание:
- По умолчанию модуль отправляет сообщения NMEA 0183 состоящие из строк с идентификаторами: GGA, GLL, GSA, GSV, RMC, VTG, ZDA и ANT.
- Уменьшение строк в составе сообщения NMEA приводит к уменьшению количества данных содержащихся в нём, но способствует ускорению передачи всего сообщения.
Скетч для вывода данных о местоположении.
#include <SoftwareSerial.h> #include <TinyGPS.h> //подключение необходимых для работы библиотек TinyGPS gps; SoftwareSerial gpsSerial(8, 9); //номера пинов, к которым подключен модуль (RX, TX) bool newdata = false; unsigned long start; long lat, lon; unsigned long time, date; void setup(){ gpsSerial.begin(9600); // установка скорости обмена с приемником 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; }
После того, как код будет залит, нужно подождать несколько секунд (время холодного старта), чтобы устройство смогло определить местоположение и начать показывать координаты. Как только устройство начнет свою работу, на плате будет мигать светодиод.
В мониторе порта появятся данные широты и долготы. Также будет получено значение текущей даты и времени по Гринвичу. Установить свой часовой пояс можно вручную – это делается в строке Serial.print(static_cast(hour+8));