Arduino gps трекер для машины. Создаем GPS часы на Arduino

В этом проекте мы покажем вам как связать 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 вы можете скачать или скопировать ниже:

#include #include #include float lat = 28.5458,lon = 77.1703; // создать переменную для объекта широты и долготы SoftwareSerial gpsSerial(3,4);//rx,tx LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); TinyGPS gps; // создать gps объект void setup(){ Serial.begin(9600); // соединяем serial //Serial.println("Полученный сигнал GPS:"); gpsSerial.begin(9600); // подключаем gps датчик lcd.begin(16,2); } void loop(){ while(gpsSerial.available()){ // проверка gps данных if(gps.encode(gpsSerial.read()))// шифровать gps данные { gps.f_get_position(&lat,&lon); // получить широту и долготу // отобразить позицию lcd.clear(); lcd.setCursor(1,0); lcd.print("GPS Signal"); //Serial.print("Position: "); //Serial.print("Latitude:"); //Serial.print(lat,6); //Serial.print(";"); //Serial.print("Longitude:"); //Serial.println(lon,6); lcd.setCursor(1,0); lcd.print("LAT:"); lcd.setCursor(5,0); lcd.print(lat); //Serial.print(lat); //Serial.print(" "); lcd.setCursor(0,1); lcd.print(",LON:"); lcd.setCursor(5,1); lcd.print(lon); } } String latitude = String(lat,6); String longitude = String(lon,6); Serial.println(latitude+";"+longitude); delay(1000); }

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

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

На этом пока всё. Хороших вам проектов.

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

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

U-Center

Программа 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

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

Fugawi

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

3D World Map

В этой программе можно увидеть землю в трехмерном виде. Используется как удобный географический справочник, в котором можно узнать информацию 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 и другие.

После холодного старта модуля начинается скачивание альманаха. Время загрузки – не более 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. После подключения модуля к плате, нужно загрузить скетч и посмотреть на результат. Если на мониторе появится бессвязный набор знаков, нужно отрегулировать скорость интерфейса Ардуино с компьютером и скорость интерфейса модуля с контроллером.

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

#include #include //подключение необходимых для работы библиотек 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));

Заключение

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

Вам необходим источник точного времени от GPS? Данная статья покажет вам, как использовать модуль GPS для получения времени, даты и координат, и как показать их на LCD индикаторе с помощью Arduino.

Что необходимо?

  • компьютер с установленной Arduino IDE;
  • Arduino (мы используем Arduino Mega);
  • GPS модуль (мы используем EM-411, возможны и другие, поддерживающие протокол NMEA, например, VK2828U7G5LF или GY-NEO6MV2);
  • макетная плата , перемычки и потенциометр 5 кОм;
  • библиотека TinyGPS (ссылка ниже).

Введение

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

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

По сути, приемник по своим часам измеряет TOA (время получения сигнала, time of arrival) четырех спутниковых сигналов. Исходя из TOA и TOT (времени отправки сигнала, time of transmission), приемник вычисляет четыре значения времени «пролета» сигнала (TOF, time of flight), которые отличаются друг от друга в зависимости от расстояния спутник-приемник. Затем, исходя из четырех значений TOF, приемник вычисляет свое положение в трехмерном пространстве и отклонение своих часов.

Самые недорогие GPS приемники обладают точностью около 20 метров для большинства мест на Земле. Теперь посмотрим, как изготовить свои собственные часы GPS с помощью Arduino.

Аппаратная часть

Мой GPS модуль имеет 6 контактов: GND, Vin, Tx, Rx и снова GND. Шестой вывод никуда не подключен. Контакт GND соединен с корпусом на Arduino, Vin подключаем к шине +5В на Arduino, Tx подключен к выводу 10 на Arduino, а вывод Rx никуда не подключаем, так как не будем посылать на GPS модуль никаких сообщений. Мой модуль передает спутниковые данные, используя интерфейс RS-232, со скоростью 4800 бит/сек, которые принимаются Arduino на выводе 10.

Ниже показана фотография GPS модуля:

GPS модуль EM-411

Модуль отправляет то, что известно как NMEA сообщения. Здесь вы можете увидеть пример одного NMEA сообщения и его разъяснение (выдержка из технического описания):

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,0000*18

Формат данных GGA
Название Пример Единицы Описание
ID сообщения $GPGGA Заголовок протокола GGA
Время UTC 161229.487 hhmmss.sss (две цифры часы, две цифры минуты, затем секунды с точностью до тысячных)
Широта 3723.2475
Флаг N/S N N - север, S - юг
Долгота 12158.3416 ddmm.mmmm (первые две цифры градусы, затем минуты с точностью до десятитысячных)
Флаг E/W W E - восток, W - запад
Индикатор местоположения 1
  • 0 - местоположение недоступно или некорректно;
  • 1 - режим GPS SPS, местоположение корректно;
  • 2 - дифференциальный GPS, режим SPS, местоположение корректно;
  • 3 - режим GPS PPS, местоположение корректно.
Количество используемых спутников 07 В диапазоне от 0 до 12
HDOP 1.0 Ухудшение точности по горизонтали
Высота относительно уровня моря 9.0 метры
Единицы измерения M метры
Геоидальное различие Различие между земным эллипсоидом WGS-84 и уровнем моря (геноидом)
Единицы измерения M метры
Возраст дифференциальных данных GPS секунды Нулевые поля, когда DGPS не используется
ID станции, передающей дифференциальные поправки 0000
Контрольная сумма *18
Конец сообщения

Все эти данные принимаются Arduino через вывод 10. Библиотека TinyGPS читает сообщения GPGGA и GPRMC (для подробной информации о GPRMC смотрите техническое описание).

Arduino на схеме не показан. Подключите периферийные устройства согласно подписанным соединениям.


Схема GPS часов на arduino

Программное обеспечение

При подаче питания GPS модуль затрачивает некоторое время, чтобы получить правильное местоположения от спутников. Когда местоположение получено, модуль шлет NMEA сообщения на Arduino. Библиотека TinyGPS содержит функцию для получения времени и даты из GPRMC сообщения. Она называется crack_datetime() и принимает в качестве параметров семь указателей на переменные: год year , месяц month , день месяца day , часы hour , минуты minute , секунды second , и сотые доли секунды hundredths . Вызов функции выглядит так:

Gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);

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

Чтобы получить ваше местоположение, можно вызвать функцию f_get_position() . Данная функция принимает в качестве параметров два указателя на переменные: широта latitude и долгота longitude . Вызов данной функции выглядит так:

Gps.f_get_position(&latitude, &longitude);

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

#include #include #include #define RXPIN 10 #define TXPIN 9 #define GPSBAUD 4800 #define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 TinyGPS gps; SoftwareSerial uart_gps(RXPIN, TXPIN); LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Переменные int seconds; int timeoffset = 1; // Пользователь должен изменить единицу на соответствующий часовой пояс. В примере используем сдвиг на +1 час. // Объявление функций. void getgps(TinyGPS &gps); // Функция настройки - запускается только при включении void setup() { Serial.begin(115200); // Запуск последовательного интерфейса для отладки uart_gps.begin(GPSBAUD); // Запуск приемника UART для GPS lcd.begin(16,2); // Объявление LCD lcd.print(" GPS clock"); // Сообщение приветствия delay(1000); // Ждем одну секунду lcd.clear(); // Очистить LCD } // Цикл главной программы - запущен всегда void loop() { while(uart_gps.available()) { int c = uart_gps.read(); if(gps.encode(c)) { getgps(gps); } } } /* * Данная функция получает данные от GPS модуля * и отображает их на LCD */ void getgps(TinyGPS &gps) { int year; float latitude, longitude; byte month, day, hour, minute, second, hundredths; gps.f_get_position(&latitude, &longitude); gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths); hour = hour + timeoffset; lcd.clear();//lcd.setCursor(0, 0); lcd.print("Time: "); if (hour <= 9) { lcd.print("0"); lcd.print(hour, DEC); } else { lcd.print(hour, DEC); } lcd.print(":"); if (minute <=9) { lcd.print("0"); lcd.print(minute, DEC); } else { lcd.print(minute, DEC); } lcd.print(":"); if (second <= 9) { lcd.print("0"); lcd.print(second, DEC); } else { lcd.print(second, DEC); } lcd.setCursor(0,1); lcd.print("Date: "); if (day <= 9) { lcd.print("0"); lcd.print(day, DEC); } else { lcd.print(day, DEC); } lcd.print("-"); if (month <= 9) { lcd.print(month, DEC); } else { lcd.print(month, DEC); } lcd.print("-"); lcd.print(year, DEC); delay(2000); lcd.clear(); lcd.print("Lat: "); lcd.print(latitude, DEC); lcd.setCursor(0,1); lcd.print("Lon: "); lcd.print(longitude, DEC); delay(2000); // Debugging purpose only. Serial.print(latitude, DEC); Serial.print(" - "); Serial.println(longitude, DEC); }

Тарас Каленюк

Время на чтение: 3 минуты

А А

GPS трекер

Ардуино – это возможность для каждого создать сложные вещи просто. А также своего рода конструктор, как для взрослых, так и для детей. С помощью Arduino воплощаются мечты, создаются и оживают роботы.

Ардуино обладает большим выбором плат, предназначенных для выполнения разного объема и вида работ. Самые популярные из них – Arduino Uno, Ardino Mega, Arduino Nano и Arduino Leonardo. Также есть еще большой выбор вариантов для конкретных случаев.

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

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

Цель создания GPS трекера

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

Геотрекеров сейчас великое множество, однако, как говорит пословица – «Хочешь сделать что-то хорошо – сделай это сам». При наличии понимания как должно это работать, или при желании разобраться во всем самому, шанс создать выглядит предпочтительным.

К тому же в каждом из нас живет параноик. Иногда он тише, иногда громче. Доверия чужим «жучкам» нет. Лучше сделать самому и точно знать, что прослушивать его будешь только ты, а не пять соседних держав.

Работа

Для создания GPS трекера Arduino были изучены всевозможные материалы в интернете. И принято решение остановиться на таких запчастях:

  • модуль Sim808 – для использования сим-карты;
  • GPS и GSM антенны;
  • непосредственно плата Arduino nano и переходники к ней, для скрепления всего со всем.

Схема, найденная в интернете, оказалась невероятно проста. В качестве учебного занятия в будущем после ознакомления с Arduino самостоятельно имеет смысл создать еще один GPS/GSM трекер со своим ребенком.

Подключив схему Ардуино к модулю сим, подключаем антенны, и обеспечиваем всё это зарядом батареи на 12В. И это всё. Гениально и просто. Далее при помощи Ардуино и имеющегося скретча прошиваем получившийся аппарат и вуаля – готово.

Результаты

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

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

В интернете существуют статьи про более сложные системы и платы, но целесообразности их использования или замены на них того что есть нет. Как говорится «зачем исправлять то, что и так работает».

Из замечаний стоит отметить, что просветы между точками геолокации машины слишком высоки, хотя в этом виновата программная часть. У покупных китайских аналогов есть возможности записи голосов вокруг, и в целом они выглядят намного компактнее того что сделано при помощи Ардуино.

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

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

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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 нет хардверных портов, поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае 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 нужно послать следующие команды:

AT+SAPBR=1,1 //Открыть несущую (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип подключения - GPRS AT+SAPBR=3,1,"APN","internet" //APN, для Мегафона - internet AT+HTTPINIT //Инициализировать HTTP AT+HTTPPARA="CID",1 //Carrier ID для использования. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Собственно URL, после sprintf с координатами AT+HTTPACTION=0 //Запросить данные методом GET //дождаться ответа AT+HTTPTERM //остановить HTTP

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

Питание

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

Сервер

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

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

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


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

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

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


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