Содержание
Давно хотел научиться использовать свой коммуникатор ASUS P750 в качестве GPS-треккера и внешнего GPS-приёмника, подключенного к ноутбуку.
Наконец, выкроил время разобраться в этом вопросе.
Итак, изначально была задумка при помощи сервиса www.gpsgate.com сделать подобие gps-треккера.
С этого и начну.
В идеале хотелось, имея в наличии Коммуникатор с GPS, просматривать его передвижение по карте.
Это оказалось очень легко реализовать.
Итак, делаем GPS-треккер.
1) Регистрируемся на сайте www.gpsgate.com (Ссылка на страницу регистрации: gpsgate.com/signup/gpsgate_com_buddytracker).
Оттуда же скачиваем программу-клиент для КПК (под Windows Mobile).
GpsGate Client for Pocket PC
(For Pocket PC devices and Windows Mobile Smartphones with touch screen)
14 day free trial
Для полноценной работы программу надо зарегистрировать. В сети полно мест, где можно найти ключики для этого продукта.
Я нашёл тут 4pda.ru/forum/index.php?showtopic=10264
Будем считать, что программу установили на КПК и зарегистрировали. Далее переходим к настройкам.
2) Во вкладке "Input" указывается аппаратный порт нашего GPS-приёмника. Как правило, это порт COM2. Можете уточнить, зайдя на вашем КПК в Контрольную панель — Внешний GPS — Оборудование
3) На вкладке "Output" указываются получатели сигнала GPS.
Здесь из выпадающего списка выбираем "Gpsgate.com (Send)"
Жмёте "Add". Выпадает окно настройки подключения к серверу. Нажимаете "Next".
В следующем окне вводите свой логин-пароль, такие же, как на сайте gpsgate.com
Нажмите "Test". По средствам GPRS произойдет соединение с сервером и авторизация. Если всё нормально, то увидите надпись "Test OK!". Жмём "Finish".
4) Теперь выбираем меню "Online". Значки должны гореть зелёным (включены).
5) Сейчас фактически идёт соединение со спутниками и передача координат на сервер. Пока координаты GPS не будут получены, проргамма не будет пытаться соединиться с сервером.
Для наглядности можно запустить какую-нибудь навигационную программу. Например, Навител.
Когда произойдет соединение со спутниками, Навител можно выключить. Данные GPS получены и будет происходить передача на сервер gpsgate.com
Если все эти процедуры получения и передачи координат проходят успешно, то значок на панели загорится зеленым цветом. Если устройство готово, но координаты еще не получены (спутники не пойманы) — ярлычок программа горит жёлтым цветом.
6) Теперь можно переходить к ноутбуку или ПК.
Открываем сайт www.gpsgate.com
Авторизируемся (Log in) в правом верхнем углу странички.
Теперь попадаем на карту, где будет отображаться трек нашего устройства.
Все треки переданные на сервер записываются и Вы сможете просмотреть движение устройства не только в реальном времени, но и треки за определенный период времени.
Можно создать группу пользователей и видеть друг друга в реальном времени или просматривать маршруты, по которым двигались пользователи.
-===========================================-
В следующий раз, я напишу, как использовать Ваш КПК с GPS-приёмником в качестве внешнего GPS.
Например, можно будет просматривать Ваше месторасположения и запись маршрута в таких программах, как Google Планета или SASPlanet.
Хочу представить вам GPS трекер собственной разработки.
Трекер каждую минуту отправляет данные на бесплатные сервер GPS мониторинга orange.gps-trace.com по протоколу Wialon IPS v1.1, данные о местоположении, скорость, курс направления движения.
Так же реализована возможность настройки и запрос координат по СМС. С любого номера.
Возможны следующие команды:
1.Настройка трекера. $0000#SETUP#111111111111111;2222#
0000 — старый пароль или пароль по умолчанию (при первой настройке).
1111111111111111 — ID устройства который задан на сервере (произвольные 15 цифр).
2222 — Новый пароль. В дальнейшем все команды должна начинаться с него. Пароль должен совпадать с тем что задан на сервере GPS мониторинга.
В ответ приходит сообщения вида: "ID-1111111111111111; PASS-2222" с новым ID и новым паролем.
2. Запрос координат. $0000#STATUS#
0000- ваш пароль.
В ответ приходит сообщения вида: "A;111111;222222;N3333.33333;E4444.44444;5;1"
"A" — Данные достоверны или "V" — данные устарели.
"111111" — время UTC.
"222222" — дата.
"N3333.33333" — широта.
"E4444.44444" — долгота.
"5" — скорость в км/ч.
"1" — питание от основного источника или "0" — питание от встроенного аккумулятора.
Если какие то данные не доступны то вместо них передается "NA".
3. Сигнал тревоги. $0000#ALARM#
В этом случае данные о местоположении передаются на сервер с интервалом 30 сек.
В ответ приходит сообщения вида: "ALARM ON"
Повторная отправка команды выключает сигнал тревоги.
В ответ приходит сообщения вида: "ALARM OFF"
4. Запрос баланса сим-карты. $0000#BALANS#
В ответ приходит сообщения вида: "Vash balans 50.01r."
Если в любой команде будет отправлен не правильный пароль то в ответ приходит сообщения вида: "Password ERROR".
Теперь техническая часть)))
Основа: Arduino PROMINI 3.3v 8mHz
После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой 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
Литература
Публикующийся код может быть использован в любых разрешенных законом целях любыми лицами. Качество кода ужасно, поскольку это, всё же, тестовый вариант. Когда допишу до чего-то более красивого, обновлю.
Для компиляции кода для ардуино нужно импортировать библиотеку tinygps.