Подключение gps приемника eb500 к arduino uno

Используем с Arduino GPS модуль NEO-6m

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

Основные комплектующие

Нам для проекта нужны:

  • Arduino Uno
  • Модуль GPS NEO-6m
  • ЖК-дисплей
  • 10K резистор

Информация о GPS

Что такое GPS?

Глобальная система позиционирования (GPS) — это спутниковая навигационная система, состоящая по меньшей мере из 24 спутников. GPS работает в любых погодных условиях в любой точке мира 24 часа в сутки без абонентской платы или платы за установку.

Как работает GPS?

Спутники GPS обходят Землю два раза в день на точной орбите. Каждый спутник передает уникальный сигнал и параметры орбиты, которые позволяют устройствам GPS декодировать и вычислять точное местоположение спутника. GPS-приемники используют эту информацию и трилатерацию для расчета точного местоположения пользователя. По сути, GPS-приемник измеряет расстояние до каждого спутника на количество времени, которое требуется для приема передаваемого сигнала. При измерениях расстояния от нескольких спутников приемник может определить положение пользователя и отобразить его.

Чтобы вычислить ваше двумерное положение (широта и долгота) и направление движения, GPS-приемник должен быть зафиксирован на сигнал от не менее 3 спутников. При наличии 4 или более спутников приемник может определить ваше трехмерное положение (широта, долгота и высота). Как правило, приемник GPS будет отслеживать 8 или более спутников, но это зависит от времени суток и того, где вы находитесь на земле.

Как только ваша позиция будет определена, модуль GPS может рассчитать и другую информацию, такую ​​как:

  • скорость;
  • азимут, пеленг;
  • направление;
  • расстояние до отключения;
  • расстояние до пункта назначения.

Какой сигнал?

Спутники GPS передают по меньшей мере 2 маломощных радиосигнала. Сигналы движутся по прямой видимости, то есть они будут проходить сквозь облака, стекло и пластик, но не будут проходить через большинство твердых объектов, таких как здания и горы. Однако современные приемники более чувствительны и обычно могут отслеживать и сквозь дома.

Сигнал GPS содержит 3 различных типа информации:

  • Псевдослучайный код — это I.D. код, который идентифицирует, какой спутник передает информацию. Вы можете видеть, с какого спутника вы получаете сигналы на странице информации о спутниках на вашем устройстве.
  • Данные эфемерид необходимы для определения местоположения спутника и дают важную информацию о состоянии спутника, текущую дату и время.
  • Данные альманаха сообщают GPS-приемнику, где каждый спутник GPS должен быть в любое время в течение дня и отображать информацию о орбите для этого спутника и каждого другого спутника в системе.

GPS модуль NEO-6M и Arduino UNO

Внешне GPS модуль выглядит так:

Плата Ардуино Уно вам, скорее всего, уже знакома:

Подключение модуля GPS и Arduino UNO

Подключите четыре контакта к Arduino следующим образом:

GND → GND
TX → Цифровой вывод (D3)
RX → цифровой вывод (D4)
Vcc → 5Vdc

Предлагаем использовать внешний источник питания для питания модуля GPS, потому что минимальная потребляемая мощность для работы модуля Arduino GPS составляет 3,3 В, а Arduino не способен обеспечить такое напряжение. Для обеспечения напряжения используйте USB TTL:

Еще одна вещь, которая была обнаружена при работе с антенной GPS — модуль не принимает сигнал внутри дома, поэтому нужно использовать антенну.

Подключение Arduino UNO и ЖК-дисплея JHD162a

Теперь нам необходимо соединить Ардуино и ЖК-дисплей, мы взяли LHD162a:

Перечень соединений ниже, это LCD → Arduino:

VSS → GND
VCC → 5V
VEE → 10K резистор
RS → A0 (аналоговый пин)
R/W → GND
E → A1
D4 → A2
D5 → A3
D6 → A4
D7 → A5
LED+ → VCC
LED- → GND

Скетч и библиотеки

Дополнительно нам понадобятся некоторые библиотеки:

Больше различных библиотек вы можете найти на нашем сайте в разделе Библиотеки.

Скетч для Arduino GPS вы можете скачать или скопировать ниже:

В Visual Studio мы создали приложение в котором можно найти текущее местоположение GPS. Оно работает только тогда, когда подключено последовательно к ПК или ноутбуку:

Если вы хотите внести некоторые изменения в приложение, вы можете сделать это открыв sln-файл в Visual Studio (2012 и выше), или вы можете напрямую установить и использовать его.

Модули GPS в Arduino: подключение NEO 6 и обзор программ U-Center

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

Обзор программ для работы с GPS на компьютере

Прежде чем приступать к подключению GPS к ардуино, нужно научиться тестировать сам модуль. Для этого нам обязательно понадобится программа, позволяющая показать статус устройства, количество пойманных спутников и другу тестовую информацию. Мы постарались собрать вместе наиболее популярный софт для работы с GPS на компьютере.

U-Center

Ссылка на скачивание – https://www.u-blox.com/en/product/u-center-windows

Программа u-center используется для работы с GNSS-проемниками от фирмы U-Blox. С помощью этого программного обеспечения можно тестировать точность позиционирования, изменять конфигурацию ресивера и проводить общую диагностику, обрабатывать полученные данные и отображать их в режиме реального времени. Координаты приемник получает с помощью GPS, ГЛОНАСС. Полученную информацию можно экспортировать и показывать в картах Google Maps, Google Earth. Программа позволяет создавать двухмерные диаграммы, гистограммы и другие виды графиков. u-center можно использовать при работе с несколькими приемниками.

Возможности программного обеспечения U-Center:

  • Работа с Windows;
  • Чтение NMEA , SiRF данных, UBX;
  • Вывод полученных данных в виде текста и графиков;
  • Запись данных, и воспроизведение;
  • Полное управление модулем GPS;
  • Возможность изменения конфигурации GPS-модуля;
  • Запись новой конфигурации в модуль;
  • Запись конфигурации в файл формата .txt;
  • Обновление прошивки модуля;
  • Возможность холодного, теплого и горячего старта модуля.

Программа позволяет оценивать работоспособность приемника, анализировать его быстродействие и устанавливать его настройки. Помимо U-Center могут использоваться и другие программы, например, Visual GPS, Time Tools GPS Clock и другие.

Visual GPS

Эта программа используется для отображения GPS данных по протоколу NMEA 0183 в графическом виде. Программа позволяет записывать лог GPS данных в файл. Существует два режима работы в программе – в первом Visual GPS связывается с приемником GPS, а во втором Visual GPS считывает показания NMEA из файла. Программа имеет 4 основных окна – Signal Quality (качество сигнала), Navigation (навигация), Survey (исследование), Azimuth and Elevation (азимут и высота).

Time Tools GPS Clock

Эта программа работает на Windows и любых рабочих станциях, она проверяет время со стандартного приемника времени NMEA GPS, который подключен к компьютеру, и позволяет синхронизировать время на ПК. Отображается информация о времени, дате, состоянии GPS, полученная от приемника. Недостатком программы является невозможность высокоточного определения времени, так как GPS-устройства не имеют секундного импульса для последовательного порта компьютера.

GPS TrimbleStudio

Ссылка на скачивание http://softwaretopic.informer.com/trimble-gps-studio/

Программное обеспечение используется для работы с приемником Copernicus в Windows. Программа отображает принимаемые навигационные данные. Полученные координаты можно отобрать на картах Google Maps, Microsoft Visual Earth. Все установленные настройки приемника можно сохранить в конфигурационном файле

Fugawi

Ссылка на скачивание http://www.fugawi.com/web/products/fugawi_global_navigator.htm

Программа используется для планирования маршрута, GPS навигации в реальном времени. Программа позволяет записывать и сохранять маршруты и путевые точки на картах. Навигация производится как на суше, так и на воде и в воздухе. В программе используются различные виды цифровых карт – топографические карты, стандарты NOAA RNC, отсканированные копии бумажных карт, Fugawi Street Maps.

3D World Map

Ссылка на скачивание www.3dwamp.com

В этой программе можно увидеть землю в трехмерном виде. Используется как удобный географический справочник, в котором можно узнать информацию 269 странах и тридцати тысячах населенных пунктов, производить измерение между двумя точками, воспроизводить аудиозаписи.

Обзор GPS-модулей для Ардуино

Для работы с Ардуино существует большое количество различных GPS-модулей. С их помощью можно определять точное местоположение (географические координаты, высота над уровнем моря), скорость перемещения, дату, время.

Модуль EM-411. Устройство создано на базе высокопроизводительного чипа SiRF Star III, который обладает низким потреблением энергии. Модуль имеет большой объем памяти для сохранения данных альманаха, поддерживает стандартный протокол NMEA 0183. Время холодного старта составляет около 45 секунд.

VK2828U7G5LF. Этот модуль построен на базе чипа Ublox UBX-G7020-KT. С его помощью можно получать координаты по GPS и ГЛОНАСС. В приемнике имеется встроенная память, в которую можно сохранять настройки. Модуль оснащен встроенной керамической антенной, работает по протоколу NMEA 0183. Напряжение питания модуля 3,3-5В.

SKM53 GPS. Один из самых дешевых модулей, обладающий низким потреблением тока. Время холодного запуска примерно 36 секунд, горячего – 1 секунда. Для позиционирования используются 66 каналов, для слежения 22 канала. В модуле имеется встроенная GPS антенна, устройство обеспечивает высокую производительность навигации при различных условиях видимости.

Neo-6M GPS. Приемник производится компанией u-blox. В этом модуле используются новейшие технологии для получения точной информации о местоположении. Напряжение питания модуля 3-5В. Линейка устройств представлена типами G, Q, M, P, V и T со своими уникальными характеристиками. Время холодного старта около 27 секунд.

locosys 1513. Этот модуль поддерживает работу с GPS, ГЛОНАСС, Galileo, QZSS, SBAS. Базируется на чипе MediaTek MT333, который обладает низким энергопотреблением, высокой чувствительностью и стабильной работой в различных условиях. В приемнике имеется поддержка текстового протокола управления. Время холодного старта примерно 38 секунд.

Arduino GPS модуль GY-NEO6MV2

Модуль использует стандартный протокол NMEA 0183 для связи с GPS приемниками. Приемник представляет собой плату, на которой располагаются модуль NEO-6M-0-001, стабилизатор напряжения, энергонезависимая память, светодиод и аккумулятор.

Технические характеристики модуля:

  • Напряжение питания 3,3-5В;
  • Интерфейс UART 9600 8N1 3.3V;
  • Протокол NMEA;
  • Вес модуля 18 гр.;
  • Наличие EEPROM для сохранения настроек;
  • Наличие встроенной батареи;
  • Возможность подключения антенны к разъему U-FL;
  • Время холодного старта примерно 27 секунд, время горячего старта – 1 секунда;
  • Наличие более 50 каналов позиционирования;
  • Частота обновления 5 Гц;
  • Рабочие температуры от -40С до 85С.

Модуль широко используется для коптеров, определения текущего положения малоподвижных объектов и транспортных средств. Полученные координаты можно загрузить в карты Google Maps, Google Earth и другие.

Читайте также  Компания ti представила rs-485 приемопередатчик с быстрой автоматической коррекцией полярности

После холодного старта модуля начинается скачивание альманаха. Время загрузки – не более 15 минут, в зависимости от условий и количество спутников в зоне видимости.

Распиновка: GND (земля), RX (вход для данных UART), TX (выход для данных UART), Vcc – питание от 3,3В до 5 В.

Для подключения потребуются модуль GY-NEO6MV2, плата Ардуино, провода, антенна GPS. Соединение контактов: VCC к 5V, GND к GND, RX к 9 пину на Ардуино, TX к 10 пину. Затем Ардуино нужно подключить к компьютеру через USB.

Для работы потребуется подключить несколько библиотек. SoftwareSerial – требуется для расширения аппаратных функций устройства и обработки задачи последовательной связи. Библиотека TinyGPS используется для преобразования сообщений NMEA в удобный для чтения формат.

Проверка работы через программу U-Center

Как упоминалось выше, модуль производится компанией u-blox, поэтому для настройки приемника используется программа U-Center.

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

Чтобы настроить модуль, нужно подключить его через USB-UART(COM-UART) преобразователь. Настроить подключение можно с помощью меню Receiver-Port . Как только будет установлено соединение, загорится зеленый индикатор. Приемник начнет устанавливать соединения со спутниками, после чего на экране появятся текущие координаты, время и другая информация. Все сообщения появляются в окне Messages. В меню View – Messages можно выбрать сообщения, которые будут передаваться к микроконтроллеру. В зависимости от поставленной задачи, можно уменьшить количество отправляемых сообщений, что увеличит скорость обработки данных и облегчит алгоритм разбора сообщений контроллером.

Если не устанавливается связь со спутником, нужно проверить, подключена ли антенна. Затем нужно проверить напряжение питание, оно должно быть 5В. Если соединение так и не устанавливается, можно поместить модуль к окну или выйти на открытую территорию.

Посмотреть передающиеся данные можно через меню View.

Все сообщения начинаются символом $, следующие за ним символы – идентификаторы сообщения. GP- это глобальная система, следующие 3 буквы показывают, какая информация содержится.

RMC – наименьшая навигационная информация (время, дата, координаты, скорость, направление).

GGA – зафиксированная информация позиционирования. Записаны время, координаты, высота, статус определения местоположения, количество спутников.

Проверка работы через Arduino IDE

Работать с модулем можно также через стандартную среду разработки Arduino IDE. После подключения модуля к плате, нужно загрузить скетч и посмотреть на результат. Если на мониторе появится бессвязный набор знаков, нужно отрегулировать скорость интерфейса Ардуино с компьютером и скорость интерфейса модуля с контроллером.

Скетч для вывода данных о местоположении.

После того, как код будет залит, нужно подождать несколько секунд (время холодного старта), чтобы устройство смогло определить местоположение и начать показывать координаты. Как только устройство начнет свою работу, на плате будет мигать светодиод.

В мониторе порта появятся данные широты и долготы. Также будет получено значение текущей даты и времени по Гринвичу. Установить свой часовой пояс можно вручную – это делается в строке Serial.print(static_cast(hour+8));

Заключение

Как видим, для начал работы с GPS не требуется каких-то совсем уж сложных манипуляций. На помощь приходят готовые модули или шилды, взаимодействующие с Arduino через UART. Для облегчения написания скетчей можно использовать готовые библиотеки. Кроме того, любой GPS-модуль можно протестировать без Ардуино, подключив к компьютеру и воспользовавшись специальным софтом. Обзор наиболее популярных программ мы привели в этой статье.

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

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

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

Видеообзор

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

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

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

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

GPS-модуль общается с управляющей платой с помощью NMEA-сообщений (от «National Marine Electronics Association») — это стандарт передачи данных оборудования навигации, связи и других информационных сетей.

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

GPS/GLONASS-модуль общается с управляющей платой по протоколу UART. В зависимости от управляющей платформы выберите вариант подключения GPS-модуля.

HardwareSerial

На управляющей плате Iskra JS и Arduino платах с микроконтроллером ATmega32U4 / ATSAMD21G18 , данные по USB и общение через пины 0 и 1 осуществляется через два раздельных UART. Это даёт возможность подключить GPS-модуль к аппаратному UART на пинах 0 и 1 .

Список поддерживаемых плат:

При подключении удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов.

SoftwareSerial

Некоторые платы Arduino, например, Uno, прошиваются через пины 0 и 1 . Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с GPS-модулем. Решение проблемы — программный UART. Подключите пины TX и RX GPS-модуля к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.

Для примера подключим управляющие пины GPS-модуля TX и RX — на 4 и 5 контакты управляющей платы.

При подключении удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов.

HardwareSerial Mega

На платах форм-фактора Arduino Mega 2560 аппаратный UART, который отвечает за передачу данных через пины 1 и 0 , отвечает также за передачу по USB. Это означает невозможность использовать одновременно UART для коммуникации с GPS-модулем и отладки по USB.

Но на платах такого форм-фактора есть ещё дополнительно 3 аппаратных UART:

Список поддерживаемых плат:

Подключим GPS-модуль к объекту Serial1 на пины 18 и 19 на примере платы Arduino Mega 2560.

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

Рассмотрим примеры работы GPS-модуля в зависимости от управляющей платформы.

Пример для Arduino HardwareSerial

В качестве примера выведем в Serial данные с GPS-модуля. Распарсим строки в отдельные переменные и сохраним их. Для этого скачайте и установите библиотеку TroykaGPS.

Пример для Arduino SoftwareSerial

В отличии от аппаратного UART (HardwareSerial), за работу программного UART (SoftwareSerial) отвечает микроконтроллер, который назначает другие пины в режим работы RX и TX , соответственно и данные которые приходят от модуля GPS обрабатывает сам микроконтроллер во время программы. По умолчанию скорость общения GPS-модуля равна 115200 , что значительно выше чем позволяет библиотека SoftwareSerial. В итоге часть информации которая приходит с GPS-модуля будет утеряна.

Решение понизить скорость общения GPS-модуля с управляющей платой. Из описание команд управления GPS-модулем найдём NMEA-команду понижение скорости до 9600 бод.

Данную команду придётся выполнять при каждом новом включении GPS-модуля. В качестве примера выведем в Serial данные с GPS-модуля. Распарсим строки в отдельные переменные и сохраним их. Для этого скачайте и установите библиотеку TroykaGPS

Пример кода для Iskra JS

Выведем данные о координатах, высоте над уровнем моря, количестве видимых спутников и точном времени в консоль Web IDE.

Каждую секунду в консоль будет выводится информация от модуля.

Элементы платы

Модуль NL3333

NL3333 – навигационный приемник НАВИА, выполненный в оригинальном форм-факторе 8.7×9.5 мм на базе чипсета MediaTek MT3333.

Приемник использует весь спектр GNSS систем: GPS, GLONASS и Galileo. NL3333 отличается высокой чувствительностью, малым энергопотреблением и быстрым временем первой фиксации (TTFF). Связь с модулем осуществляется через UART, данные выводятся по протоколу NMEA.

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

На модуле выведены две группы Troyka-контактов.

Отслеживание местоположения автомобиля с использованием GPS, GSM и Arduino

В этой статье мы рассмотрим устройство на основе платы Arduino Uno для отслеживания местоположения автомобиля (транспортного средства) с использованием технологий GPS и GSM.

Отслеживание местоположения автомобиля представляет собой процесс определения его GPS координат: широты (Latitude) и долготы (Longitude). Эта функция находит широкое применение в современном мире: в службах такси, транспортных компаниях, для школьных автобусов, для поиска украденных автомобилей и т.д.

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. GSM модуль (купить на AliExpress).
  3. GPS модуль (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Потенциометр 10 кОм (купить на AliExpress).
  6. Соединительные провода.
  7. Источник питания с напряжением 5 В.

Принципы работы GPS модуля

GPS (Global Positioning System) представляет собой систему глобального позиционирования, с помощью которой можно определить широту и долготу любой точки на Земле, а также точное время в этой точке (UTC time — Universal Time Coordinated). GPS модуль будет основным устройством в нашем проекте. Данный модуль принимает координаты от спутников каждую секунду. Вместе с координатами осуществляется прием времени и даты.

GPS передает данные, идентифицирующие местоположение, в реальном времени. Но вместе с этими данными он передает и очень много других данных в формате NMEA – смотрите приведенный ниже рисунок. NMEA содержит несколько строк (предложений) – нам из всей этой совокупности данных будет нужна всего лишь одна строка. Эта строка начинается с $GPGGA и содержит координаты, время и другую полезную информацию. Эти данные относятся к фиксированным данным глобального позиционирования (Global Positioning System Fix Data).

Мы можем извлечь нужные нам данные из строки $GPGGA при помощи подсчета запятых в строке. К примеру, если вы нашли строку $GPGGA и сохранили ее в массиве, то широта может быть найдена в нем после двух запятых, а долгота – после четырех запятых. После извлечения значения широты и долготы можно поместить в другие массивы.

Приведем пример $GPGGA строки с расшифровкой:

В следующей таблице представлен перевод (описание) этих данных GPS.

Идентификатор Описание
$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 Данные контрольной суммы

Работа схемы

Схема устройства представлена на следующем рисунке.

Контакт Tx (передача) GPS модуля непосредственно подсоединен к цифровому контакту 10 Arduino. С использованием специальной библиотеки для последовательной передачи данных мы можем задействовать последовательную связь на контакте 10, благодаря этому стандартный последовательный порт Arduino на контактах 0 и 1 мы можем задействовать для подключения GSM модуля. Напряжение питания 12 Вольт используется для питания GPS и GSM модулей. Контакты данных ЖК дисплея D4, D5, D6 и D7 подключены к контактам 5, 4, 3 и 2 of Arduino. Контакты управления ЖК дисплея RS и EN подключены к контактам 2 и 3 Arduino, а контакт RW замкнут на землю. Потенциометр используется для установки яркости или контрастности ЖК дисплея.

Читайте также  Индикатор топлива и напряжения акб для автомобиля v.4

Плата Arduino используется управления всеми процессами в схеме, включая управление GPS приемником и GSM модулем. GPS приемник используется для определения координат автомобиля, GSM модуль – для передачи координат пользователю при помощи SMS. На ЖК дисплее отображается статус текущих операций или координаты. В нашем проекте мы использовали GPS модуль SKG13BL и GSM модуль SIM900A.

Структурная схема работы устройства показана на следующем рисунке.

Когда наше устройство будет собрано мы можем установить его в автомобиль и подать на него питание. Затем нам необходимо передать SMS “Track Vehicle” на устройство, размещенное на нашем автомобиле. Также мы можем использовать префикс (#) или суффикс (*), к примеру, #Track Vehicle* для того чтобы правильно идентифицировать начало и конец строки.

Принятое сообщение принимается GSM модулем, подсоединенным к системе, и передается затем в Arduino. Плата Arduino считывает его и извлекает из него главное (значащее) сообщение. После этого производится сравнение с заранее определенными (хранящимися в программе) сообщениями. Если фиксируется совпадение, то плата Arduino считывает координаты при помощи извлечения строки $GPGGA из данных, передаваемых GPS модулем. Затем эта строка обрабатывается и данные (координаты автомобиля) передаются пользователю с помощью GSM модуля.

Исходный код программы

В программе первым делом следует подключить необходимые библиотеки и инициализировать контакты для последовательной связи и взаимодействия с ЖК дисплеем. Программная библиотека для последовательной связи (Software Serial Library) позволяет задействовать последовательную связь на контактах 10 и 11 Arduino (мы будем использовать только контакт 10).

#include

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#include
SoftwareSerial gps(10,11); // RX, TX
char str[70];
String gpsString=»»;
. .
. .

Объявленный массив str[70] будет использоваться для хранения принятого сообщения от GSM модуля, а строка gpsString – для хранения строки с GPS данными. char *test=”$GPGGA” будет использоваться для сравнения «правильной» строки, которая будет нам необходима для координат.

После этого в программе необходимо инициализировать порт последовательной связи (стандартный), ЖК дисплей, GSM и GPS модули и показать приветственное сообщение на ЖК дисплее.

void setup()
<
lcd.begin(16,2);
Serial.begin(9600);
gps.begin(9600);
lcd.print(«Vehicle Tracking»);
lcd.setCursor(0,1);
. .
. .

В функции loop мы будем осуществлять прием сообщения и GPS строки.

Функции void init_sms и void send_sms() будут использоваться для инициализации и передачи сообщений. В функции init_sms необходимо использовать правильный 10-значный номер мобильного телефона.

Функция void get_gps() будет использоваться для извлечения координат из принятой строки с данными GPS.

Функция void gpsEvent() будет использоваться для приема GPS данных в Arduino.

Функция serialEvent() будет использоваться для приема сообщений от GSM модуля и сравнения принятого сообщения с заранее определенным сообщением (Track Vehicle).

void serialEvent()
<
while(Serial.available())
<
if(Serial.find(«Track Vehicle»))
<
temp=1;
break;
>
. .

Функция инициализации ‘ gsm_init() ’ используется для инициализации и конфигурирования GSM модуля, где сначала проверяется работоспособен ли GSM модуль и соединен ли он с сетью с помощью ‘AT’ команд. Если модуль ответил OK значит он готов к работе. Система будет проверять GSM модуль до тех пор пока не получит ответ ‘OK’. Затем выключается режим ECHO при помощи передачи ATE0 команды, иначе GSM модуль будет повторять все принятые команды. Затем проверяется доступность сети при помощи команды ‘AT+CPIN?’, если в модуль вставлена SIM карта и на ней присутствует PIN, то модуль ответит +CPIN: READY. Эта проверка будет осуществляться системой до тех пор пока сеть не будет найдена. Более подробно все эти процессы можно посмотреть в представленном видео. Также более подробно процессы взаимодействия GSM модуля с платой Arduino описаны в статье про беспроводную доску объявлений с использованием GSM и Arduino.

GPS Tracker на ардуино своими руками

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 — GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.

Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше — GSM модуль, немного больше — GPS).

GPS приемник

Для начала нужно разобраться с работой с GPS. Выбранный модуль — один из самых дешевых и простых. Тем не менее, производитель обещает наличие батарейки для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 36 секунд, однако, в моих условиях (10 этаж с подоконника, вплотную зданий нет) это заняло аж 20 минут. Следующий старт, однако, уже 2 минуты.

Важный параметр устройств, подключаемых к ардуине — энергопотребление. Если перегрузить преобразователь ардуины, она может сгореть. Для используемого приемника максимальное энергопотребление — 45mA @ 3.3v. Зачем в спецификации указывать силу тока на напряжении, отличном от требуемого (5V), для меня загадка. Тем не менее, 45 mA преобразователь ардуины выдержит.

Подключение

GPS не управляемый, хотя и имеет RX пин. Для чего — неизвестно. Основное, что можно делать с этим приемником — читать данные по протоколу NMEA с TX пина. Уровни — 5V, как раз для ардуины, скорость — 9600 бод. Подключаю VIN в VCC ардуины, GND в GND, TX в RX соответствующего serial. Читаю данные сначала вручную, затем с использованием библиотеки TinyGPS. На удивление, всё читается. После перехода на Uno пришлось использовать SoftwareSerial, и тут начались проблемы — теряется часть символов сообщения. Это не очень критично, так как TinyGPS отсекает невалидные сообщения, но довольно неприятно: о частоте в 1Гц можно забыть.

Небольшое замечание относительно SoftwareSerial: на Uno нет хардверных портов (кроме соединённого с USB Serial), поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае Uno это 2 и 3. Мало того, данные одновременно может получать только один такой порт.

Вот так выглядит «тестовый стенд».

GSM приемник/передатчик

Теперь начинается более интересная часть. GSM модуль — SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо — не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.

Подключение

Модуль управляется также по последовательному порту, с тем же уровнем — 5V. И здесь нам уже понадобятся и RX, и TX. Модуль — shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию — 115200.

Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно — всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания — 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.

После подключения пытаемся «поговорить» с модулем (не забываем его включить). Выбираем скорость порта — 115200, при этом хорошо, если все встроенные последовательные порты (4 на меге, 1 на uno) и все программные работают на одной скорости. Так можно добиться более устойчивой передачи данных. Почему — не знаю, хотя и догадываюсь.

Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.

После выгорания преобразователя я поискал потребляемый ток. Так вот, пиковый — 2А, типичный — 0.5А. Такое явно не под силу преобразователю ардуины. Нужно отдельное питание.

Программирование

Модуль предоставляет широкие возможности передачи данных. Начиная от голосовых вызовов и SMS и заканчивая, собственно, GPRS. Причем для последнего есть возможность выполнить HTTP запрос при помощи AT команд. Придется отправить несколько, но это того стоит: формировать запрос вручную не очень-то хочется. Есть пара нюансов с открытием канала передачи данных по GPRS — помните классические AT+CGDCONT=1,«IP»,«apn»? Так вот, тут то же самое нужно, но слегка хитрее.

Для получения страницы по определенному URL нужно послать следующие команды:

В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по GET.

Питание

Поскольку питать GSM модуль от преобразователя Arduino, как я выяснил, плохая идея, было решено купить преобразователь 12v->5v, 3A, на том же ebay. Однако, модулю не нравится питание в 5V. Идем на хак: подключаем 5V в пин, с которого приходит 5V от ардуины. Тогда встроенный преобразователь модуля (существенно мощнее преобразователя ардуины, MIC 29302WU) сделает из 5V то, что нужно модулю.

Сервер

Сервер написал примитивный — хранение координат и рисование на Яндекс.картах. В дальнейшем возможно добавление разных фич, включая поддержку многих пользователей, статус «на охране/не на охране», состояние систем автомобиля (зажигание, фары и пр.), возможно даже управление системами автомобиля. Конечно, с соответствующей поддержкой трекера, плавно превращающегося в полновесную сигнализацию.

Читайте также  Мягкий пуск стартерного электродвигателя постоянного тока

Полевые испытания

Вот так выглядит собранный девайс, без корпуса:

После установки преобразователя питания и укладывания в корпус от дохлого DSL модема система выглядит так:

Припаивал провода, вынул несколько контактов из колодок ардуины. Выглядят так:

Подключил 12V в машине, проехался по Москве, получил трек:

Точки трека достаточно далеко друг от друга. Причина в том, что отправка данных по GPRS занимает относительно много времени, и в это время координаты не считываются. Это явная ошибка программирования. Лечится во-первых, отправкой сразу пачки координат со временем, во-вторых, асинхронной работой с GPRS модулем.

Время поиска спутников на пассажирском сидении автомобиля — пара минут.

Выводы

Создание GPS трекера на ардуино своими руками возможно, хотя и не является тривиальной задачей. Главный вопрос сейчас — как спрятать устройство в машине так, чтобы оно не подвергалось воздействиям вредных факторов (вода, температура), не было закрыто металлом (GPS и GPRS будут экранироваться) и не было особенно заметно. Пока просто лежит в салоне и подключается к гнезду прикуривателя.

Ну и ещё нужно поправить код для более плавного трека, хотя основную задачу трекер и так выполняет.

Использованные устройства

  • Arduino Mega 2560 [compatible]
  • Arduino Uno [compatible]
  • GPS SkyLab SKM53
  • SIM900 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Литература

  1. Оф. сайт Arduino (содержит подробную информацию и о платах, и об их программировании)
  2. TinyGPS (ссылка на скачивание в середине страницы)
  3. GPS SKM53 Datasheet
  4. Описание GSM/GPRS Shield на SIM900
  5. SIM900 AT Commands
  6. Документация по Яндекс.Картам

Публикующийся код может быть использован в любых разрешенных законом целях любыми лицами. Качество кода ужасно, поскольку это, всё же, тестовый вариант. Когда допишу до чего-то более красивого, обновлю.

Для компиляции кода для ардуино нужно импортировать библиотеку tinygps.

NEO 6M GPS модуль подключение к Ардуино

GPS модуль NEO-6MV2.
Как определить свои координаты, узнать скорость и направление движения.
Сколько километров до точки назначения. Найти стороны света используя компас.
Всё это можно узнать, подключив GPS модуль NEO-6M к Ардуино.
И всё это абсолютно бесплатно не используя интернет.

Посмотрев это видео вы узнаете как получать.
Свои координаты, скорость движения, дату и время, количество спутников, направление частей света.
Узнаем сколько километров до пункта назначения, а конкретно до моей дачи и в каком направлении двигаться. И всё это без подключения к интернету, то есть абсолютно бесплатно.
Я расскажу, как подключить GPS модуль NEO-6M. Это конечно не самый лучший датчик, но он довольно точен и главное не дорогой.
Сначала мы просто проверим, работает ли он.
А в конце видео я расскажу с какими проблемами мне пришлось столкнуться и как я их решил.

Сначала выведем данные в программу U-CENTER.
Для этого вам надо скачать программу от разработчика чипа U-BLOX на котором и создан этот модуль.
Вот ссылка на их сайт

Программа u-center

Эта программа визуально показывает ваши координаты и месторасположение на карте, какие спутники найдены, определение частей света, часы, скорость и качество приёма сигналов от спутников. И многое другое.
Здесь так же можно, настраивать датчик, прошивать и сбрасывать до заводских настроек.
Я особо не вникал в эту программу, и если у вас появится интерес, то я могу изучить её и сделать про неё дополнительное видео.
Вам не обязательно устанавливать программу. Можно сразу подключить к Ардуино и получать все данные. Но для общего понимания лучше посмотреть, хотя бы на этом видео.

GPS модуль можно подключить с помощью переходника USB-UART или с помощью обычной Ардуино.
Я подключу вторым способом. Для этого сначала надо загрузить в Ардуино пустой скетч.
Затем подключить модуль так.
Контакты TX на датчике соединить с TX на Ардуино, а контакты RX на датчике соединить с RX на Ардуино.
То есть прямое подключение.

Теперь в программе выбираем порт на котором подключена Ардуино и выбираем скорость 9600 бод.
В эту программу также можно загружать данные из модуля и смотреть маршрут вашего передвижения.

Схема подключения, она очень простая, и на ней осталось много пустого места, но я надеюсь, что в следующих видео эта пустота будет заполнена.
Для работы нам понадобится библиотека SoftwareSerial.
В Ардуино реализована аппаратная поддержка интерфейса последовательной передачи данных через выводы 0 и 1 (которые также используются для связи с компьютером по USB). А так как мы хотим смотреть в мониторе порта, что у нас происходит в модуле, то нам надо подключить его к программному порту UART.
Вот это как раз и обеспечивает эта библиотека. Позволяя почти любые цифровые выводы работать как последовательный порт.
Я использовал выводы D10, D11.

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

Я вывел ряд параметров которые как мне показалось будут вам интересны.
Здесь можно указать координаты места назначения и модуль будет показывать расстояние и направление на него. Я указал координаты своей дачи. Напишите как далеко вы находитесь от этих координат.
Посмотрим, кто живёт дальше всех, а кто ближе.

Так же я вывел

  • количество спутников,
  • Точность по горизонту,
  • Широта и долгота,
  • Дата и время,
  • Высота над уровнем моря,
  • Направление движения (компас),
  • Скорость в километрах,
  • Направление,
  • Расстояние до дачи,
  • Направление к даче,

Чтобы значения не бегали очень быстро, я сделал интервал в 1 секунду. Это обычный delay().
Теперь надо сказать, что такое холодный запуск.
При первом включении датчик должен найти спутники и спозиционировать себя на местности. У этого датчика он довольно медленный. Правда других датчиков у меня не было, может у всех так.
Если модуль запускается с того же места, где и был остановлен, то поиск будет занимать меньше времени, так как в памяти были сохранены последние координаты.

Теперь я прокручу поиск координат, а то это процесс оказался очень долгим.
Вот сколько времени понадобилось чтобы модуль нашёл спутники. Правда он лежит у меня на подоконники и если бы он был на улице, процесс прошёл бы гораздо быстрее. Но что есть то есть.
14 минут.

Вы видите, как несколько скриншотов после того как модуль нашёл спутники. Данные постоянно прыгали, потому, что датчик хоть и видел 4 или 5 спутников, но показания не всегда были лучше.
А вот карта движения. Здесь я линейкой измерил расстояние. Расхождение из-за того что я не точно установил точки начала и конца.
Но эти плавающие данные возможно были из-за того, что модуль находится в помещении, а на улице приём будет лучше. В следующих видео я подключу к нему SD карту и посмотрю как он будет сохранять маршрут.

Так как я только купил этот модуль, то планирую ещё протестировать его.

В следующих видео, я покажу как

  • подключить к датчику LCD индикатор для вывода значений на экран.
  • Подключу датчик к ESP8266 и создам страницу с данными. Выведу на карту свою геопозицию.
  • Подключу SD карту для сохранения маршрута, и потом считаю значения и выведу пройденный маршрут на GOOGLE карту.
  • Есть ещё несколько интересных задумок, пока не скажу, так что подписывайтесь и не пропустите новые видео.

Теперь коротко про работу скетча.
Для работы понадобится вот такая библиотека и обязательно с плюсами. Это более новая библиотека и она лучше. Пока я тестировал этот датчик, то проверил несколько библиотек, но мне больше всего понравилась именно эта.
Про SoftwareSerial я уже рассказывал. Про пины D10 и D11, вроде тоже говорил.
Главное, не забудьте, что если будете пробовать примеры из этой библиотеки, не забудьте установить скорость 9600, иначе у вас ничего не будет работать.

Сюда нужно вставить координаты места назначения в формате Широта и долгота. Остальное я вроде написал по русски.

В архиве будет лежать ещё один скетч. Он позволяет получать необработанные данные, которые потом можно конвертировать другие форматы или загружать на сайты, которых очень много в интернете и которые из этих данных могут строить маршруты.

Ну, а теперь как и обещал рассказываю с какими проблемами я столкнулся и как удалось их решить.
Пришлось поискать на зарубежных форумах.

1. Библиотека. Есть несколько библиотек. Я их все попробовал, но больше всего мне понравилась TinyGPS++.h . Именно с плюсами. Потому, что есть просто TinyGPS.
2. Второе, это вывод информации, а точнее его отсутствие. При первом подключении даже не мигал светодиод. Потом я прочитал, что светодиод начинает мигать только после того как модуль найдёт спутники. А то я уже думал что у меня не рабочий датчик.
Оказалось, что аккумулятор на плате полностью разряжен, и для работы ему надо подзарядиться. Первые признаки жизни появились примерно минут через 30 — 40.
Сначала появилась дата. А потом, примерно через минут через 15 появились координаты.
Так, что если вы включили и у вас в течении часа ничего нет, ото не переживайте, возможно ещё не всё так плохо.
3. Приём в комнате. Если у вас не находит спутники, то поднесите к окну. У меня в комнате ловит 1 спутник и то не всегда. Около окна 6 спутников.

4. Подключение к UART аппаратная или программная. Проверьте правильность соединения RX-TX, TX-RX. То есть в перехлёст. Если вы используете SoftwareSerial.h то вам доступны почти все цифровые входы. Без библиотеки толь стандартные RX TX, пмны 0 и 1
5. Скорость вывода. Во всех примерах стоит скорость 4800 бод. При такой скорости не работает. Нужно установить 9600 бод.
6. Время в формате UTC. То есть не соответствует вашему региону. В следующих видео, когда буду выводить на экран, будем учиться изменять на свой регион для установки истинного времени.

Вот вроде и всё. Больше проблем не видел. Датчик работает хорошо. Ну если не считать, что координаты он начинает определять минут через 10. Повторюсь, на улице я его пока не тестировал.