Делаем сами GPS-трекер "Иван-с-усами"

Решил сделать самодельный GPS-трекер для авиамоделей со следующими вводными данными:

  1. Доступность компонентов в популярных интернет-магазинах - чтобы желающий мог повторить конструкцию.
  2. Работа только через СМС, без использования интернета - независимость от сторонних сервисов, в некоторых случаях - экономия денег.
  3. Возможность использования бортового GPS-модуля - зачем таскать, питать и правильно располагать ещё один GPS-приёмник, если бортовой будет работать до момента краша, а, при некотором везении, и после.
  4. Пищалка и выключатель питания борта - пищалка нужна для поиска уже на месте, выключатель бортового питания может спасти ходовые батареи, если поиски затянутся.
  5. Точность определения координат превалирует над обеспечением продолжительности работы - емкости батареи должно хватить на полетный день, если модель упала и найти её не получается, то вряд ли она будет перемещаться после краша.
  6. Код будет открытым.

GSM-часть реализована на популярном модуле SIM900, GPS-модуль поддерживается любой, выдающий NMEA на скорости до 57600 или же протокол ublox на скорости до 115200 - это покрывает самые распространенные варианты GPS-приемников, использующихся в любительских самолетах, в то же время можно поставить автономный модуль, которный будет обслуживать только трекер - в таком варианте вполне достаточно NMEA на скорости 9600. Управляется эта связка микроконтроллером Arduino Pro Mini (с прошивкой Optiboot, хотя сейчас специфичный для этой прошивки код не используется) - единственным, под который я могу что-то написать. Да, я не программист, я только балуюсь, поэтому получившийся код априори неоптимален и некрасив, но обладает неплохим качеством - он работает 😃 Ещё меньше, чем программист, я электронщик, поэтому опытный образец собран из готовых китайских breakout-плат, спаянных проводками. Бесспорно, получилась тяжелая и громоздкая конструкция, но она, опять же, функционирует и, надеюсь, переживет аварийные посадки.

Итак, железка состоит из 4 компонентов - платы с SIM900 www.aliexpress.com/snapshot/6180085055.html , источника питания www.ebay.com/itm/200962898162 , Arduino Pro Mini и батарейки 300mAh 2S. С платы SIM900 удалены ненужные разъемы, светодиод питания и MAX232, источник питания настроен на 4В, которые являются нормальным напряжением питания для SIM900. GPS-модуль либо питается от этой же схемы, либо от бортового питания - в таком случае требуется согласовать уровни сигналов (5.5В на борту и 4В на трекере) - я сделал это по-ламерски, резистором на 10К. SIM900 подключен к ардуиновским пинам 7 и 8 и сконфигурен на работу на 9600, GPS - на последовательный порт, на пин 5 можно подключить сервомашинку, которая будет отключать питание борта, на пин 6 - хоббикинговскую пищалку hobbyking.com/…/__14521__HobbyKing_174_Discovery_B… На пины 5 и 6 припаяны провода с колодками для подключения сервы и пищалки. Также на отдельную колодку выведены пины 2 и 3, которые используются в качестве debug-порта для отладки прошивки, а на другую колодку - пины 11-13 и Reset для заливки прошивки ISP-программатором. Вся коммутация сделана силиконовыми кабелями от сервомашинок, источник питания и ардуина приклеены на плату SIM900 толстым и мягким двусторонним скотчем hobbyking.com/…/__15214__Gyro_Flight_Controller_Mo…Батарейка закреплена на липучке 3М “для картин” на нижней стороне платы, а вся конструкция перетянута еще одной “репейной” лентой. SIM-карта также отдельно укреплена скотчем канцелярским внатяг. Вес без GPS-приёмника - 60г. Фото в собранном состоянии ниже:

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

Управляется всё хозяйство посредством SMS-команд, каждый блок команд начинается с символа “-”, команды и их параметры разделяются тем же символом “-” (впрочем, в коде можно определить другой символ). В одном исходящем от вам SMS может быть до 10 команд, например: “-w-rate-1-alarm” - тут 3 команды, вторая (rate) - с параметром. Можно установить PIN-код 4 символа длиной, который должен будет присутствовать в каждом вашем SMS-сообщении в качестве первой команды (т.е., “-1234-w-rate-1-alarm” на примере предыдущей SMS, но с PIN-кодом), также можно и желательно привязать трекер к какому-то одному номеру отправителя команд - без этого не будут приходить сообщения о запуске трекера, а также периодические сообщения с текущими координатами. Список команд:

“w” или “?” - сообщить текущие координаты. Отправляется SMS с координатами, скоростью, высотой, hDOP, vDOP и ссылкой на гугл-мапс. Если в настоящий момент GPS-фикса нет, отправляются последние известные координаты (2D или 3D), если есть только 2D-фикс - отправляется он и последний 3D-фикс. Трекер на каждом цикле опрашивает GPS-приёмник и сохраняет в памяти последний удачный 3D-фикс и 2D-фикс.

“сheckowner” и “nocheckowner” - включить или выключить привязку к номеру отправителя такой SMS. Настоятельно рекомендую включать привязку сразу. Отключить привязку сможет потом только владелец 😃 При включенной привязке трекер отправляет сообщения при загрузке и первом полученном 3D-фиксе.

“rate-N” - где N - минуты - включить отправку координат раз в N минут. Работает только при включенной привязке к номеру. Отключается заданием N=0. Логика отправки координат аналогична команде “w”.

“burst” и “noburst” - включение или выключение отправки координат на каждом цикле трекера (практически - раз в ~10 секунд). Может быть полезно при потере управления аппаратом и потере FPV-линка из расчета того, что при краше трекер будет поврежден и стоит знать хотя бы последние координаты перед падением. Опять же, работает только при включенной привязке к номеру.

“alarm” и “noalarm” - включение или выключение пищалки.

“cutoff” и “nocutoff” - отключение бортового питания и его включение. Пока собственно выключатель я не сделал 😃

“checkpin-XXXX” и “nocheckpin” - включение или выключение требования PIN-кода в каждом сообщение. PIN-код - обязательно 4 знака.

“sleep” и “awake” - пока не реализованная логика отправки SIM900 и GPS в спящий режим.

Трекер запоминает в EEPROM свои текущие настройки и состояние, при перезагрузке вернется в предыдущий режим. Шаблоны SMS можно редактировать, но нужно оставаться в рамках 160 символов - текущая реализация GSM-библиотеки не поддерживает составные SMS.

Что касается кода, то он написан для ардуины с использованием GSM-библиотеки www.gsmlib.org и больших кусков работы с GPS из мультивийного модуля I2C-GPS-NAV code.google.com/p/i2c-gps-nav/ . GSM-библиотека потребовала серьезной доработки напильником, поэтому включена в состав проекта. От GPS-модулей требуется передача сообщений GPGGA, GPGSA, GPRMC в NMEA-режиме или же POSLLH, STATUS, DOP, SOL и VELNED в режиме ublox. Примерные конфиги для NEO-6M приложены к коду. Сервомашинки на пинах 5 и 6 управляются аппаратным PWM, для этого его частота уменьшена в 16 раз, поэтому в коде везде, где требуется обработка времени, численная продолжительность временных интервалов сообразно сокращается.

Код доступен тут - github.com/iflyhigh/ivansusami , распространяется бесплатно под лицензией GPL v3. Требуется Atmega328. Желающие помочь на безвозмездной основе допилить софт или сделать правильную плату для трекера всячески приветствуются.

Энджойте.

  • 6583
Comments
John_Locke

Спасибо, отличное устройство. Надо присмотреться к этой sim900. Единственное, что интересно, это как выйдет дешевле - купить готовый шилд для ардуины, или купить голый модуль и самому паять обвязку. И ещё, похоже, модуль предназначен для gsm сигнализации) Кто-бы мог подумать, что любое устройство можно приспособить для rc нужд)

Scott_Tiger
John_Locke;bt129446

это как выйдет дешевле - купить готовый шилд для ардуины, или купить голый модуль и самому паять обвязку

Дешевле купить голый модуль, главное - не перепутать его с младшим братом SIM900A, который в России не работает без ядреной перепрошивки. У меня просто руки не из того места растут, чтобы плату под этот трекер самому развести и запаять 😃

dundel1

По-моему, очень полезное устройство, да и функционал вполне достаточный.
Готов повозиться с разводкой платы.

Scott_Tiger

Игорь, спасибо за предложение! На самом деле, у меня есть еще масса нерешенных концептуальных вопросов, которые надо утрясти до разводки:

  1. Питание. SIM900 питается от напряжения 3.2 - 4.8 В, в то время как типовая липо еще кое-как живет при падении напряжения до 3В на ячейку. Именно поэтому первый образец работает от двухбаночной батарейки и содержит источник питания на 4В. Может быть, плюнуть на идею работы “до последней капли крови” и запитаться от однобаночной батарейки большей ёмкости? Как тогда согласовывать уровни при работе с внешним GPS? Как питать серву-выключатель питания и пищалку?
  2. Собственно SIM900 - достаточно большой, тяжелый и охочий до питания модуль, не бывает ли вариантов попроще (ведь нужно только работать с СМС)?
  3. Стоит ли ориентироваться на хоббикинговскую пищалку или лучше сделать что-то своё прямо на плате? На мой взгляд, внешняя пищалка хороша тем, что её можно вынести в такое место, где её будет хорошо слышно, но, с другой стороны, можно выносить только саму головку, а управление оставить на основной плате. В текущей реализации кода красиво пищать МК не может, т.к. время работы с SIM900 всегда разное, а по таймеру прерывать взаимодействие тоже не хочется, т.ч. логика пищания должна быть внешней относительно МК.
  4. Может быть, заложить возможность подключения/напайки на плату автономного GPS-приемника небольшого размера, типа MTK3329?

Дальше ещё думать надо 😃

Scott_Tiger
  1. Ещё, наверное, нужна кнопка или джампер для сброса EEPROM
  2. Нужны ли ещё исполнительные устройства сигнализации, например, моргающий мощный светодиод?
МиГ17

Нужная девайсина, много можно навесить своего функционала. Скажите, сложно с модема отправить MMS ? Есть ли исходник ?

Scott_Tiger

MMS? Не знаю, не пробовал. Судя по доке, всё относительно несложно - mt-system.ru/…/sim900_mms_at_command_manual_v1.02_…

МиГ17

Хотелось иметь возможность принять снимок с фотокамеры (ещё ДО встречи с планетой), сделанный ниже критической высоты. При удачном снимке это сузит зону поиска. Готов допилить этот кусок функционала, камера со сжатием есть.

Scott_Tiger

Любопытно. А что за камера и по какому протоколу с ней можно взаимодействовать? Каким образом будет даваться команда делать снимок и как замерять высоту (GPS её измеряет относительно уровня моря, по хорошему, это полетный контроллер должен делать)? Как исключить срабатывание при нормальном завершении полёта?

МиГ17

Камера самодельная , протокол можно сделать каким нужно, степень сжатия можно менять , хоть в 5 кБайт. Работа с высотой, логикой срабатывания затвора и т.д. , всё решаемо, есть проц. на камере.

Scott_Tiger

В принципе, можно по I2C организовать. Камера будет слейвом, отвечать либо нулями, либо тремя байтами размера файла, дальше - данные (до 300Кб). Меня смущает только тот факт, что SIM900 отправляет MMS только через HTTP, а я хотел избежать использования мобильного интернета…