Проект AGLoRa — инструкция по сборке простого LoRa GPS трекера.
Всем привет! Вначале я расскажу как появился проект «AGLoRa» и кому он может пригодиться.
Меня зовут Евгений, и в обычной жизни я основатель и директор небольшого коллектива, который занимается интеграцией оборудования спутникового мониторинга.
Мне всегда было интересно пробовать новые технологии, так что я с интересом смотрел за новостями по технологии передачи LoRa. Сейчас модули стали настолько доступны, что не удержался и сделал свой небольшой прототип, для того чтобы в реальной жизни посмотреть возможности этого протокола. Всегда гораздо приятнее видеть расстояние приема в виде цифры на телефоне, чем смотреть за мигающей лампочкой.
Так как я занимаюсь спутниковым мониторингом транспорта, то всё до чего я дотрагиваюсь, в итоге превращается в трекер. Не знаю почему так происходит, но в данном случае пригодилось.

Сборка прототипа не сложнее сборки ЛЕГО
В этой статье содержится описание процесса сборки простого прототипа (MVP) спутникового трекера, который передает данные по протоколу LoRa. Это позволит использовать его например там, где нет покрытия сотовых сетей. Либо там, где важно бесплатное использование трекера, например на небольшой ограниченной территории. Либо при фиксированной передаче между стационарными объектами.
Фактически это прототип, который можно развивать в любую интересующую сторону. Вместо передачи координат можно, например, передавать данные каких-либо датчиков: температуры, уровня топлива, освещенности, влажности. При необходимости я могу доработать аппаратное и программное обеспечение под ваши потребности.
Первое испытание на первых попавшихся антеннах дало дальность 3 км на 868 МГц. Испытание на 433 МГц за городом, в чистом радиоэфире, показало устойчивый прием сигнал на 5 км (дальше не проверяли, в этот раз не было необходимости). Разумеется очень сильно влияет рельеф и препятствия.

Первые испытания дальности, на первых подвернувшихся антеннах
Мне интересно дальнейшее развитие проекта, так что присылайте свои предложения на shlyagin@gmail.com. Отчасти поэтому я решил выложить проект как open-source, и поэтому для аппаратной части выбрана популярная и очень доступная платформа Arduino. Благодаря этому чтобы любой желающий может быстро собрать свою версию устройства, при этом для коммерческого использования не сложно будет повторить всё на другой элементной базе, например STM32. Для повторения прототипа не надо даже уметь паять, достаточно купить нужные модули в любом радиоэлектронном маркетплейсе, соединить их разъемами и залить всего один файлик скетча. Заходите в мой github, пробуйте, присылайте свои предложения по развитию проекта. Начинаем!
Кому нужна AGLoRa
Я назвал проект AGLoRa, это аббревиатура от слов Arduino, GPS и LoRa.
Основная “фишка” — подключение к телефону по bluetooth, что позволит удобно видеть местоположение других трекеров.
AGLoRa может пригодиться тем, кто любит гулять там, где плохой прием сотовой связи. Квадроциклисты, мотоциклисты, лодки в открытом море. Организация спортивных мероприятий, трекинг прокатной техники, мониторинг животных, практически всё где применяются обычные персональные GPS трекеры, но при этом нет покрытия сотовой связи и достаточен небольшой радиус контроля. Китайцы обещают до 8 километров на 433 МГц, но разумеется это зависит от рельефа, условий и забитости эфира.
Что такое LoRa
Среди вышеперечисленных слов Arduino + GPS + LoRa, наверное только LoRa требует дальнейшего объяснения. Проще загуглить и почитать википедию, но в двух словах — это способ передачи цифровой информации по радиоканалу устройствами с малой мощностью, на большое расстояние. Разумеется мы жертвуем скоростью передачи. Передача по радиоканалу с помощью модуляции LoRa это закрытая проприетарная технология, фактически мы просто покупаем готовый чип и им пользуемся.
Важно отметить момент того, что стоит отличать просто модуляцию и радиоустройства LoRa от LoRaWAN. LoRaWAN это сеть построенная на базе устройств LoRa. Грубо говоря ничего не мешает устройствам общаться напрямую, но можно использовать их и в одной общей сети базовых станций, подобно сотовым телефонам.
Мы не пойдём по этому пути по двум причинам: даже простенькая базовая станция LoRaWAN стоит довольно дорого. Вторая причина — зачем нам в глухом лесу поднимать сеть, если нам нужно просто видеть данные с других трекеров. Если интересно почитать про LoRaWAN то вот одна из популярных статей на Xабре про iot — контроль котиков.
Архитектура трекера
Принцип работы у нас будет как у любого персонального трекера. Получаем свои координаты GPS и регулярно отправляем через передатчик LoRa широковещательным пакетом на все другие устройства которые могут услышать. Если при этом подключиться по bluetooth к устройству, то на телефоне можно будет видеть местоположение других устройств. Если не подключаться, то наш трекер просто регулярно кидает в эфир свои координаты.
![]()
Передача широковещательными пакетами. В рамках канала все слышат всех.
Принципы которые легли в основу прототипа:
- Простые компоненты. Кликнули детальки с какого-нибудь маркетплейса, или купили в радиодеталях. Это, например, причина отказа от Arduino Nano 33 BLE в пользу отдельной платки bluetooth. Я думаю что всё кроме LoRa модуля вообще может быть в наличии в магазине любого крупного города.
- Простая сборка. Не умеете или не хотите паять — не страшно. Собрать прототип для экспериментов можно и без этого. Cоединили модули проводами, загрузили скетч, упаковали это хозяйство в любой подходящий корпус и всё готово.
- Модульность. Не нужен блютус — не ставь. Не нужны координаты GPS — подключи любой другой датчик и немножко измени скетч. Нужно внешнее питание не от аккумуляторов, а от 12 вольт, тоже без проблем — ставим КРенку (микросхему-стабилизатор на 5 вольт) и всё работает.
Аппаратная часть трекера AGLoRa
Для того чтобы сделать трекер нам нужны следующие компоненты: Arduino Nano, LoRa, GPS, Bluetooth. Я поэкспериментировал с разными модулями, какой лучше купить — дальше в статье.

Коллекция для экспериментов. Модули из которых собирается трекер AGLoRa
Начнем описание с того, ради чего делался проект — с модуля LoRa.
Модуль LoRa
После небольшого «ресёрча» я решил попробовать относительно новые модули EBYTE. Они построены на микросхемах SEMTECH (что логично, это их проприетарная технология), но работают через UART, что довольно удобно. Программно модули одинаковые, но при покупке надо обращать внимание на частоту. Разумеется модуль на 868 Мгц не услышит модуль на 433 МГц. Эти частоты в России легально можно использовать, в а 2018 году частота 868 МГц даже была немного расширена к радости всего IoT сообщества. Так что даже несмотря на то что мы делаем маленькое маломощное устройство для глухомани, которое вряд ли кому-то помешает, его можно использовать вообще ничего не опасаясь.

Модуль EBYTE 868 МГц
Даташиты можно найти на сайте производителя: E220-900T22D (868 МГц), E433T30D (433 МГц). Вобщем это все без проблем гуглится для тех модулей которые будете использовать, я вставляю ссылки не для вас, дорогие читатели, а скорее для поисковых систем, которые любят это в статьях.
Ещё раз для понимания. Есть технология, её владелец Semtech. Они выпускают проприетарные микросхемы SX1278/SX1276 на базе который другой производитель, в данном случае EBYTE выпускает свой модуль LLCC68, у которого есть удобный интерфейс UART со своими командами, место куда прикручивается антенна, и какая-то внутренняя инженерная магия которая позволяет EBYTE обещать дальность работы больше, чем у отдельной оригинальной микросхемы от Semtech.

Модуль EBYTE 433 МГц
Программируется всё элементарно. В Arduino IDE есть библиотека для работы c модулями EBYTE, но как-то так вышло что пока я разбирался, то вначале нагуглил библиотеку EBYTE на GitHub от Kris Kasprzak, и так в результате на ней и сделал. Она очень простая, разберется даже ребенок. Переписать на ту которая устанавливается через Arduino IDE не сложно, но теперь уже лень.
Трекер у нас простой, так что по задумке нам нужно тупо регулярно кидать широковещательные пакеты на максимальную дальность, а все остальное время слушать что откуда прилетело. С ЛоРой все как в обычно, медленнее скорость — больше дальность передачи.
Судя по мануалу нам нет необходимости изменять значение частоты передачи по воздуху, по умолчанию оно должно стоять минимальное (то есть для макксимальной дальности).
Значения по умолчанию из мануала
Это описание модуля 868 МГц. Обратите внимание на условия при которых тот же мануал обещает дальность в пять километров.
Для максимальной дальности нужна минимальная поддерживаемая скорость передачи 2.4 и антенна 5dBi высотой 2.5 метра
Модуль GPS
GPS можно использовать любой. Если используете NEO от ubloxто нужно подключиться по USB и с помощью его родной программы u-center (внимательно читайте сайт, u-center2 это другая программа!) выключить бинарный протокол оставив только NMEA и переключить скорость передачи на 9600.
Из практического опыта — модули NEO-6M даже в идеальных условиях ловят спутники по полчаса и теряют при первой удобной возможности. Зато стоят дешево.

Самый дешевый GPS ublox NEO-6M
Вот такой модуль как на фото — не надо. Более дорогие варианты тоже NEO-6M, но с выходом для внешней активной антенны. Они тоже очень задумчивые и нормально работают только если подключать внешнюю антенну — своеобразный компромисс.
ublox neo-6m с разъемом для внешней антенны
NEO-8M работает получше, так что самый правильный совет при выборе — не экономить и купить какой-нибудь более дорогой модуль. В случае GPS зависимость дороже-лучше работает напрямую.

GPS GN-801
Библиотека для работы TinyGPS+, устанавливается непосредственно из среды программирования, примеры понятные, по программированию рассказать и нечего.
Модуль Bluetooth BLE
Для того чтобы наше устройство могло подключиться в iphone необходимо использовать модуль с поддержкой BLE (bluetooth low energy). У нас очень примитивные задачи, так что подойдёт любая платка умеющая в BLE . Я попробовал AT-09 и HC-05.

BLE HC-05 — зеленый

BLE AT-09 — синий
Про их различие напишу коряво, но более понятно — эти модули припаяны к одной и той же плате ZS-040 так что аппаратно выходы одинаковые, то есть если вы перевернете платку bluetooth — то вы поймете какой именно модуль в руках.

ZS-040
С точки зрения скетча arduino модули тоже ничем не отличаются. А вот по BLE связи — они разные.
При запуске трекера мы меняем название модуля на «AGLoRa», а потом отправляем в модуль данные через serial. Приложение на телефоне находит нужный дескриптор (мы просто ищем рабочий вариант из заранее предопределенных) и подписывается на его изменения. Каждое изменение — новый пакет данных.
Так как модуль подключен через основной порт serial — то подключать bluetooth надо уже после программирования микроконтроллера.
Arduino
Для проекта подойдёт любой микро-компьютер на процессоре Atmega328P, ну просто потому что в Atmega168 не хватит места для загрузки скетча. Можно взять UNO или Nano, это не важно.
Принцип работы программы
Принцип работы трекера «кто услышал хорошо». Так как мы кидаем широковещательные пакеты, то ситуация когда какой-то пакет не будет услышан всеми получателями — это нормально. Поэтому в данном случае мы не делаем никаких механизмов контроля получения данных получателями, как это сделано у персональных GPS трекеров которые работают по сети GSM. Во всех протоколах телематических серверов обязательно присутствует подтверждение получения пакета. Ну и не забываем что это просто бесплатный прототип, пока не будем заморачиваться.

Блок схема программы
Так как аппаратный serial может работать только один, то основное время мы занимаемся тем, что слушаем эфир. Если получаем данные с других трекеров то ретранслируем их в аппаратный serial (то есть отправляем в BLE).
Регулярно через заданный интервал времени переключаемся на GPS приемник, получаем оттуда координаты и кидаем свой пакет LoRa.
Насколько я разобрался в документации, модуль LoRa сам видит то что уже происходит передача информации другим модулем. Наша задача закинуть данные для передачи в сеть и сообщить по какому адресу адресу мы их отправляем.
В любом случае мы стараемся минимизировать время передачи за счет того что передаём тольок самый необходимый минимум информации. Это во первых сокращает вероятность возможных конфликтов при передаче, а во вторых потенциально увеличит дальность за счет уменьшения ошибок при передаче длинных пакетов.
Сборка. Подключение модулей.

Блок схема трекера
Подключение согласно настройкам в скетче:
#define GPS_PIN_RX 8
#define GPS_PIN_TX 7
#define LORA_PIN_RX 2
#define LORA_PIN_TX 3
#define LORA_PIN_M0 4
#define LORA_PIN_M1 5
#define LORA_PIN_AX 6

Собранный на макетной плате прототип
Bluetooth подключается к RX и TX самой ардуино, так что не забудьте, что это нужно делать после заливки скетча, иначе не получится запрограммировать.
Питание AGLoRa от 12 вольт или аккумуляторов 18650
Если хотите питать от 12 вольт или аккумуляторов то в самом простом вариант можно добавить стабилизатор питания «кренку» со сглаживающими конденсаторами или её импортный аналог. Я не думаю что это способно вызвать какие-то сложности.
Программа для телефона «AGLoRa Client»
Теперь нужно установить программу на телефон.
Исходный код выложен на гитхабе, вы можете скомпилировать и использовать его совершенно бесплатно. Прямая ссылка на скачивание AGLoRA APK для Android. Либо он же есть в релизах на GitHub.
На iOs (для устройств iPhone и iPad) клиент AGLoRa доступен в App Store.
Я решил написать клиента на Flutter чтобы было проще поддерживать android и ios версии одновременно.
Интерфейс программы
Для удобства можно использовать направление на север которое определяет GPS приемник телефон, чтобы увидеть направление на трекер. Но так как не во всех телефонах это работает корректно, то можно выключить галочку «use your compass» и направление на трекер будет показываться из позиции «верх это север». Когда вы перемещаетесь то расстояние до точки пересчитывается в реальном времени.
Тестирование трекера AGLoRa
Для тестирования AGLoRa нужно собрать минимум два таких LoRa трекера, один для передачи координат, второй для их приема. Ко второму по bluetooth подключается телефон, на передающем модуль BLE при сборке можно даже не подключать (как и GPS на принимающем). Я не стал заморачиваться и собрал тестовые комплекты из того что было — парочка Arduino UNO, просто на соединительных проводах. Питать их можно через USB ардуины от телефонного повербанка.

Быстро собранные пара комплектов для экспериментов
Вот в принципе и всё, поздравляю с тем, что дочитали до конца. Ваш прототип LoRa трекера по проекту AGLoRa — готов!
Осталось сфотографировать полученный результат, получить одобрение кошки и можно начинать эксперименты.

Куда в IoT теме без котиков?
Creating a GPS tracking device using an Arduino.
![]()
At my first ever hackathon earlier this year, I honestly had no idea what to do. Our basic idea was to create a device that can track a vehicle without much complications. Since I am an electronics student, I thought why not implement this using a micro-controller board. So, I went ahead and created a GPS tracker device using an Arduino-Uno board.
So we went to the market and bought in the following components to build the device:
- Arduino uno board
5. Male-Male and Male-Female Jumper Wires
6. 10 K Potentiometer
We will also need a power cable for the Arduino board that will provide the necessary power for all the components when we connect it to the computer, to upload the code into the Arduino and later a normal power supply can be used.
Basic Working Principle
The basic working of the tracker is that the GPS module detects the location of the vehicle it is installed in, displays it on the LCD screen and through the GSM shield it can be communicated to one’s cellular device.
How a GPS module works is a very interesting concept. The GPS module intercepts the signals transmitted by the satellites(which are at an altitude of 30,000 km!) and calculates how far each satellite is based on how long it takes the message to reach from them. At any given moment, at-least four satellites are visible from a given point, transmitting their position at regular intervals.
The NEO-6M module comes with an antenna that has to be connected to it. This helps in acquiring more precise data from the Satellites. Once the data is received, it gives the geographical coordinates as output, which are then connected to the LCD screen as an input. The LCD screen hence displays those coordinates.
The GSM module essentially picks up what is displayed on the LCD screen and then sends it to a cellular device. It is an optional module and you may construct your device without it.
Circuit Diagram
The circuit can be built as:
As seen from the circuit diagram, we mostly use the digital pins of the Arduino board for the operation, except for one analog pin that is connected to the potentiometer. All the components are interconnected through the Arduino board.
Code
Arguably the trickiest part about this device was to write a code for it. since there are 3 major components namely the GPS module, the GSM module and the LCD screen the code becomes a bit complex. You may found the code on my github repository, link to which is
GPS-трекер своими руками: материалы и этапы работ
![]()
В нашей статье речь пойдет о том, как сделать GPS-трекер для автомобиля своими руками. Потенциально пользоваться им будем на примере личного авто. Однако стоит отметить, что рассмотренную схему можно смело использовать для наблюдения за абсолютно любыми объектами, которые передвигаются. Так, существуют трекеры для собак, других животных или людей.
Для чего это нужно?
Возможно, прочитав нашу статью, мужская половина общества вздрогнет, ведь в настоящее время недоверчивые или любопытные жены имеют возможность без особых усилий отслеживать «неудобное» местоположение. Однако не будем думать о плохих вещах, ведь новые спутниковые технологии разработаны для службы исключительно на благо. Как из смартфона сделать GPS-трекер?
Выбор сервера GPS-мониторинга
Необходимо иметь в виду, что начинается процедура изготовления трекера для ребенка, домашнего питомца или автомобиля именно с выбора сервера. Только после этой процедуры осуществляется настройка специального программного обеспечения под его параметры на телефоне. Далее мы покажем принцип функционирования системы слежения на конкретном примере. Для этого возьмем достаточно известный онлайн-сервис gpshome.ru.
Настройки трекера
Как изготовить GPS-трекер своими руками? После выбора сервера целесообразно перейти к настройке механизма. В нашем примере для этих целей воспользуемся самым обычным смартфоном на базе Android. Так, на него следует установить определенную программу, которая называется GPS Home Tracker.
Необходимо заметить, что именно она станет связующим пользовательского устройства с сервером, предназначенным для спутникового мониторинга. Скачать ее бесплатно можно в официальном интернет-магазине. Нужно добавить, что технические требования непосредственно к рассматриваемому аппарату можно изучить в разделе под названием «Приложение Андроид» на ресурсе сервиса.

Достаточно интересный момент состоит в том, что даже относительно старый смартфон, в котором отсутствует GPS-модуль, вполне годен. В данном случае системой будет определяться положение конкретного объекта именно по сотовым вышкам. Естественно, это станет причиной увеличения погрешности. Однако чего еще желать при подобном раскладе?
Настройка GPS-трекера своими руками
Стоит иметь в виду, что процедура настройки осуществляется предельно просто. Для этого необходимо запустить скачанное, а затем установленное приложение в телефоне. Далее в меню настроек нужно открыть вкладку под названием «О программе». Это делается для того, чтобы выяснить, какой у устройства уникальный IMEI, который в будущем будет необходим для того, чтобы реализовать привязку к серверу.

Далее поступаем следующим образом:

Можно использовать подобную систему в автомобиле на «умном» зеркале, которое не имеет слота под SIM-карту. Однако следует иметь в виду, что GPS Home Tracker так или иначе формирует данный номер. Интересно, что такой подход в несколько раз расширяет перечень совместимых гаджетов (именно на них можно осуществлять раздачу интернета извне).
Как изготовить GPS-трекер своими руками? Дальше целесообразно активировать аппарат посредством соответствующего переключателя, а на мобильном устройстве включить интернет, в частности, функцию геоположения. Спустя небольшой промежуток времени позиция определится. Таким образом, можно будет наблюдать за своим местоположением по географической карте:

Итак, мы научились производить настройку GPS-трекера своими руками. Теперь он абсолютно готов к работе. Осталось лишь перейти в сервис мониторинга для окончания начатого.
Привязка GPS-трекера к серверу слежения
Итак, мы рассмотрели, как осуществить настройку GPS-трекера своими руками для собак, автомобилей или людей. Целесообразно перейти к привязке устройства к серверу, предназначенному для слежения. Стоит отметить, что процедура также достаточно простая. Для этого в личном кабинете необходимо пройти по следующему пути: «Мониторинг — Добавить объект». Далее в открывшейся вкладке (а именно в строке под названием «Модель трекера») нужно выбрать «ПО GPS Home Tracker + Android», а несколько ниже указать IMEI, который был сгенерирован программой ранее:

Заполнение остальных полей
Стоит отметить, что остальные поля заполняются в соответствии с примером, который приведен на скриншоте выше. Как выяснилось, абсолютно ничего сложного в процедуре нет. Во вкладках дополнительного типа можно отметить расчетный расход топливных ресурсов, чтобы была возможность произвести запрос в отношении отчета об израсходованных литрах, а также о пройденном расстоянии.
Так, если все реализовано верно, то на вкладке под названием «Мониторинг» должен быть отображен необходимый автомобиль с подробной информацией касательно местоположения. Стоит обратить внимание на вкладку, которая называется «Инфо». Она расположена в левой части окна. Дело в том, что там можно найти много интересных сведений:

Что еще нужно знать?
В принципе, предельно простая система, связанная со спутниковым мониторингом, готова к применению. Однако необходимо понимать, что мы рассмотрели лишь базовый функционал. Следует заметить, что подробную отчетность и историю передвижения авто можно найти исключительно на платных тарифах.
В бесплатном варианте имеется возможность привязать в данному сервисе не больше одного объекта, будь то машина, человек или питомец, и далее, соответственно, просматривать лишь расположение GSM-трекера в текущем периоде. Иными словами, архива нет. Если вдруг вас подобный расклад не устраивает, то есть вы желаете расширить функционал, возможности системы, то нужно платить деньги.
Например, в целях изучения системы был опробован определенный тарифный план под названием «Старт». Его стоимость равняется 70 российских руб. в месяц. Стоит отметить, что цена достаточно низкая. При этом количество опций, которые становятся доступными, возрастает в несколько раз. Так, появляются такие фишки, как SOS-оповещения на электронную почту, хранение истории по передвижению в течение суток, ориентиры, гео-зоны и так далее.
Заключительная часть
Итак, мы в полной мере рассмотрели, как изготовить GSM-трекер своими руками. В заключение целесообразно разобрать основные преимущества возможностей, перечисленных в статье. Так, SOS-оповещения предельно хороши, когда на автомобиле едут другие люди (например, жена или ребенок). После фиксации системой превышения установленной скорости человеку на электронную почту либо телефон мгновенно приходит соответствующее уведомление.
Интересно знать, что посредством гео-зон можно рисовать на карте определенные области, при выходе или входе в которые система слежения выдает сообщение. Так, предельно удобно осуществлять контроль, например, за тем, дошел ребенок до спортзала или нет, а также во сколько он это сделал в плане времени:

Стоит заметить, что тема про трекер для автомобиля, ребенка или питомца из телефона в любом случае плавно переходит в глобальный вопрос, связанный с GPS-мониторингом транспорта (это сложная аналитическая система, которая используется на крупных предприятиях; транспортный GPS-мониторинг сотрудников и стационарных объектов не что иное, как путь к существенной экономии ресурсов коммерческой структуры, повышению производительности автомобильного парка и, конечно же, увеличению прочности дисциплины работников компании). На этом этапе нецелесообразно «копать» слишком глубоко, потому что на любительском уровне подобные познания вряд ли понадобятся.
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
Литература
-
(содержит подробную информацию и о платах, и об их программировании) (ссылка на скачивание в середине страницы)
Публикующийся код может быть использован в любых разрешенных законом целях любыми лицами. Качество кода ужасно, поскольку это, всё же, тестовый вариант. Когда допишу до чего-то более красивого, обновлю.