- Назначение, принцип работы,
- Технические характеристики NEO 6M,
- Подключение, парсинг данных, пример программы,
- Применение, достоинства и недостатки,
- Вывод,
- FAQ.
Назначение, принцип работы
Давно прошли времена, когда свое местоположение определяли по звездам, а стороны света по компасу, теперь, как и много другое, за нас это делают электронные устройства, причем гораздо быстрее, точнее и в любых погодных условиях. На орбите Земли постоянно находятся десятки спутников от нескольких систем, наиболее известные из которых, GPS - производства США и российский GLONASS. Вращаясь по точным орбитам вокруг нашей планеты, они передают уникальные сигналы. Принимать, расшифровывать и определять по ним свои координаты призваны специальные устройства - GPS-трекеры. Про один из таких мы и расскажем в этой статье.Благодаря поступающей информации от одного и более спутника, трекер определяет текущее дату и точное время, что уже можно использовать в ряде изделий. Для более-менее точного определения собственных координат требуется уже не менее трех спутников. Четыре и более пойманных спутника дадут достаточно информации для определения высоты, возможно и это для чего-то понадобится. Кроме того, анализируя поступающие данные в динамике, трекер делает вывод о скорости и направлении движения (если он движется). Таким образом, можно получить достаточно много полезной информации для множества применений с помощью всего одного устройства и подключенного к нему контроллера.
В данном обзоре рассмотрим компактный, недорогой и популярный модуль GPS-трекера на базе чипа NEO-6M. Модуль состоит из платы с чипом и активной антенны. Плата оснащена батареей для быстрого старта, микросхемой памяти EEPROM, необходимых для стабилизации питания радиодеталей и контактов для связи с внешнем миром.
Передача данных на контроллер или другое устройство происходит по UART, а потому подключение схематически предельно простое и надежное. Модуль работает автономно, не требуя никаких входящих команд и запросов, просто выдавая раз в секунду в порт имеющиеся данные по протоколу NMEA 0183.
Если посмотреть в порт при помощи любой программы-терминала, можно увидеть подобные строки, кажущиеся непосвященному человеку полнейшей абракадаброй:
Например, с заголовка $GPGGA начинается передача данных о последнем положении и точности, с $GPGLL - координаты, с $GPGSA - данные об активных спутниках и так далее. Полный список заголовков и прочую информацию о строках NMEA можно почерпнуть из Википедии и других специальных источников. Задача контроллера с помощью нашей программы извлечь необходимую нам информацию из этого потока данных. Как это сделать, узнаем далее.
Необходимы комплектующие для Arduino ?
Купить модули ардуино можно в нашем магазине https://3d-diy.ru/catalog/arduino-modules/ с доставкой по России
Технические характеристики
Модуль базируется на небольшом чипе HEO-8M, производимом компанией U-blox. Обмен данными происходит через UART на скорости от 4800 до 230400 бод, по умолчанию установлена скорость 9600. Чип способен отслеживать до 22 спутников одновременно на 50 каналах с большим уровнем чувствительности, до -181 дБ. Потребление тока составляет всего 45 мА. Уровень питания чипа 2,7-3,6 В, которое обеспечивается стабилизатором напряжения MIC5205 с выходным уровнем 3.3 В.К модулю прилагается активная керамическая антенна, которую следует предварительно пристегнуть к соответствующему разъему.
Итак, основные характеристики модуля:
- GPS модуль: U-Blox NEO-6M-0-001;
- Встроенная батарейка для быстрого, холодного старта;
- Встроенный EEPROM;
- Чувствительность: -161 dBm;
- Скорость обновления: 5 Гц;
- Интерфейсы: UART (выведен), SPI, DDC, IIC;
- Передает координаты в формате: NMEA;
- Скорость подключения по умолчанию по UART: 9600 бод;
- В комплекте активная антенна;
- Напряжение питания: 3 – 5 В;
- Возможность работы с программами: U-Center и т.п.;
- Размеры платы: 57 х 25 x 15 мм;
- Вес комплекта: 18 г.
На модуле расположен единственный светодиод, сигнализирующий о состоянии работы: быстрое мигание - поиск спутников и сбор информации, медленное - данные получены и передаются в порт.
Подключение, парсинг данных, пример программы
Для работы модуля достаточно подать на него питание и крестообразно соединить разъемы RT-TX модуля и контроллера. В нашем примере в качестве контроллера мы будем использовать Arduino UNO. У UNO всего один аппаратный UART на пинах 0 и 1, который нам потребуется для связи с компьютером, поэтому для подключения GPS-трекера используем программный UART на пинах 3 (TX) и 4 (RX). Разумеется, при необходимости можно назначить любые другие пины. Как было сказано выше, трекер автоматически, в одностороннем порядке, посылает данные в порт раз в секунду, чего вполне достаточно для работы. Зеленый провод с обратной связью нам в этом примере и не потребуется, можно обойтись без него. Если же жизнь или любопытство заставит вас поменять настройки в NEO-6M, придется его подключить, однако лучше без острой необходимости этого не делать.Подключили, осталось перевести получаемую от модуля информацию с языка NMEA в человеческий. Для этого есть два пути: сложный и простой.
Второй - использовать чужие наработки, то есть библиотеки, где парсинг уже сделали за вас. Библиотек достаточно много, только в самой IDE Arduino нашлось больше десятка, а еще есть форумы и сайты, где каждый желающий вывешивает свое творение. Выбор широк. Библиотеки разного размера и функциональности, но если требуется минимум, то и выбирать следует самую простую и короткую, она и работает быстрее и память занимает меньше. Для наших целей достаточно извлечь из модуля время, дату и координаты, остальное не так уж обязательно. Мы выбрали библиотеку iarduino_GPS_NMEA, возможно, она не лучшая, но вполне рабочая, довольно компактная, и, что немаловажно, с подробными комментариями в примерах на русском языке.
Заливаем и запускаем.
// ПРИМЕР ВЫВОДИТ ДАННЫЕ NMEA ПОЛУЧАЕМЫЕ ПО UART: // дата, время, координаты, скорость, направление. // const uint8_t pinRX = 4; // Определяем вывод RX (программного UART) на плате Arduino к которому подключён вывод TX модуля. Номер вывода можно изменить. const uint8_t pinTX = 3; // Определяем вывод TX (программного UART) на плате Arduino к которому подключён вывод RX модуля. Номер вывода можно изменить. // #include // Подключаем библиотеку для расшифровки строк протокола NMEA получаемых по UART. #include // Подключаем библиотеку для работы с программным UART. // iarduino_GPS_NMEA gps; // Объявляем объект gps для работы с функциями и методами библиотеки iarduino_GPS_NMEA. SoftwareSerial SerialGPS(pinRX, pinTX); // Объявляем объект SerialGPS для работы с функциями и методами библиотеки SoftwareSerial, указав выводы RX и TX Arduino. // char* wd[] = {"Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"}; // Определяем массив строк содержащих по две первых буквы из названий дня недели. // void setup() { // Serial.begin(9600); // Инициируем работу с аппаратной шиной UART для вывода данных в монитор последовательного порта на скорости 9600 бит/сек. SerialGPS.begin(9600); // Инициируем работу с программной шиной UART для получения данных от GPS модуля на скорости 9600 бит/сек. gps.begin(SerialGPS); // Инициируем расшифровку строк NMEA указав объект используемой шины UART (вместо программной шины, можно указывать аппаратные: Serial, Serial1, Serial2, Serial3). gps.timeZone(3); // Указываем часовой пояс (±12 часов), или GPS_AutoDetectZone для автоматического определения часового пояса по долготе. } // // void loop() { // gps.read(); // Читаем данные (чтение может занимать больше 1 секунды). Функции можно указать массив для получения данных о спутниках. /* Время: */ Serial.print(gps.Hours); Serial.print(":"); Serial.print(gps.minutes); Serial.print(":"); Serial.print(gps.seconds); Serial.print(" "); /* Дата: */ Serial.print(gps.day ); Serial.print("."); Serial.print(gps.month ); Serial.print("."); Serial.print(gps.year ); Serial.print("г ("); /* Дополнительные данные даты: */ Serial.print(wd[gps.weekday]); Serial.print("), UnixTime: "); Serial.print(gps.Unix); Serial.print(". "); /* Координаты (широта, долгота, высота): */ Serial.print("Ш: "); Serial.print(gps.latitude, 5); Serial.print("°, Д: "); Serial.print(gps.longitude, 5); Serial.print("°, В: "); Serial.print(gps.altitude, 1); Serial.print("м. "); /* Движение (скорость, курс): */ Serial.print("Скорость: "); Serial.print(gps.speed); Serial.print("км/ч, "); Serial.print(gps.course); Serial.print("°. "); /* Спутники (активные/наблюдаемые): */ Serial.print("Спутники: "); Serial.print(gps.satellites[GPS_ACTIVE]); Serial.print("/"); Serial.print(gps.satellites[GPS_VISIBLE]); Serial.print(". "); /* Геометрический фактор ухудшения точности: */ Serial.print("PDOP: "); Serial.print(gps.PDOP); Serial.print(", HDOP: "); Serial.print(gps.HDOP); Serial.print(", VDOP: "); Serial.print(gps.VDOP); Serial.print(". "); /* Ошибка определения времени: */ if (gps.errTim) { Serial.print("Вемя недостоверно. " ); } /* Ошибка определения даты: */ if (gps.errDat) { Serial.print("Дата недостоверна. " ); } /* Ошибка позиционирования: */ if (gps.errPos) { Serial.print("Координаты недостоверны. " ); } /* Ошибка определения скорости и курса */ if (gps.errCrs) { Serial.print("Скорость и курс недостоверны. "); } /* */ Serial.print("\r\n"); delay(5000); // период опроса, без задержки будет выдавать примерно 1 раз в секунду }
Открываем монитор порта и наблюдаем примерно следующее. Количество времени на “устаканивание” напрямую зависит от окружающей антенну обстановки. Если эксперимент проводится в квартире с толстыми стенами и далеко от окон, объективные данные могут вообще не появиться никогда. Рекомендуется разместить антенну как можно ближе к окну, а лучше за его пределами, тогда рано или поздно все настроится само. В нашем случае 8 активных спутников появилось минут через 15 после включения, а через час их было уже 14. Чем больше спутников, тем выше точность!
Библиотека предоставляет нам данные по частям, можем брать только то, что нужно. Например, время хранится в трех переменных gps.Hours, gps.minutes и gps.seconds, их вполне достаточно, чтобы подвести часы с точностью до секунды, не имея в составе проекта модуля реального времени и/или доступа в Интернет.
Запчасти и комплектующие для вашего 3D принтера можно приобрести у нас https://3d-diy.ru/catalog/spare-parts-3d-printer/
Применение, достоинства и недостатки
Применение всегда можно найти отталкиваясь от функциональности. Что мы получаем от модуля? Дату и время - можем использовать для синхронизации часов наших устройств в любом месте на планете Земля. Координаты - всегда узнаем где мы находимся, если потерялись, или где находится само устройство, если оно не рядом с нами. Можно рисовать треки на карте, собирать статистику о пройденном расстоянии и так далее. Следить за скоростью и направлением движения, делая вывод, на чем трекинг движется - на пешеходе, машине или самолете. Отслеживание активной зоны, выход за которую или вход в которую должен вызывать какую-то реакцию, например сигнал тревоги.Предполагается масса вариантов использования для DIY-поделок: отслеживание положения машины, ребенка, собаки, потерянного чемодана или приближающейся тёщи. Сделать самодельный спортивный трекер, который всегда приятнее фабричного. Использовать как независимый источник точного времени и так далее.
Основными достоинствами NEO-6M является простота в подключении, компактность, надежность, низкое энергопотребление, невысокая цена и распространенность. К недостаткам можно отнести довольно большое время на “раскачку”. Если, в любой ситуации, требуется моментальное получение информации после подачи питания, NEO вам не подойдет.
Вывод
GPS-трекер NEO-6M - устройство полезное, простое, компактное и недорогое, такое сочетание должно понравиться DIY-мастерам, а сам трекер получит право быть всегда в запасе.FAQ
Существуют ли другие модули GPS-трекеров для DIY проектов?Да, конечно, их больше десятка. Они дороже, но могут предоставить лучшие характеристики. например более быстрый запуск или лучшую чувствительность.
Зачем на модуле память EEPROM?
Для хранения настроек. Настройки, такие как скорость передачи данных, состав данных и так далее, при необходимости, могут быть изменены командами от контроллера на модуль и будут применены при следующем запуске.
Зачем на модуле батарейка?
Для хранения в чипе последней информации о спутниках. Если она сохранена, модуль запускается гораздо быстрее. Однако срок работы батарейки всего две недели, если не заряжать ее дольше, модуль будет искать спутники с самого начала, то есть долго.
Можно ли подключать NEO-6M напрямую к компьютеру?
Конечно, для этого понадобится адаптер TTL-UART. С помощью специальных программ, принятые данные будут преобразованы в координаты и отмечены точкой на карте.