Делаем сами GPS-трекер "Иван-с-усами"
Решил сделать самодельный GPS-трекер для авиамоделей со следующими вводными данными:
- Доступность компонентов в популярных интернет-магазинах - чтобы желающий мог повторить конструкцию.
- Работа только через СМС, без использования интернета - независимость от сторонних сервисов, в некоторых случаях - экономия денег.
- Возможность использования бортового GPS-модуля - зачем таскать, питать и правильно располагать ещё один GPS-приёмник, если бортовой будет работать до момента краша, а, при некотором везении, и после.
- Пищалка и выключатель питания борта - пищалка нужна для поиска уже на месте, выключатель бортового питания может спасти ходовые батареи, если поиски затянутся.
- Точность определения координат превалирует над обеспечением продолжительности работы - емкости батареи должно хватить на полетный день, если модель упала и найти её не получается, то вряд ли она будет перемещаться после краша.
- Код будет открытым.
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. Желающие помочь на безвозмездной основе допилить софт или сделать правильную плату для трекера всячески приветствуются.
Энджойте.