Простой трекер


Автор: Александр
UNDER CONSTRUCTION
Здесь представлена конструкция наипростейшего трекера. Сделан он был в основном для проверки своих сил в подобных вещах. Делалось по вечерам урывками, начата работа несколько раньше и продолжено параллельно с разработкой "крутого" трекера на основной работе. Надо сказать, что "крутой" трекер руководство тормозило так, что тот так никогда и не был закончен. Представленный же был сделан, обкатан своими силами, и выпущена небольшая партия. Несколько экземпляров установлены на личные автомобили и постоянно пишут треки.
Обновлено: 2015.11.08



    Как в заголовке и было сказано..
    Наш дружный коллектив из двоих человек однажны тяжёлым рабочим днём внезапно решил, что мы могли бы сделать трекер небольшой чёрный удобный и хороший. После чего сделав небольшие деньговложения были произведены на свет первые опытные экземпляры плат, закуплены компоненты, спаяны. На них в состоянии "just for fun" была написана и отлажена прошивка. В силу адекватности результата приложенным усилиям, прикинули, можно ли сделать небольшую партию устройств.. Она была выпущена. Несколько из них были пославлены на личные автомобили, часть продана, несколько штук периодически даются на покатушки.

    В первую очередь хотелось чтобы устройство всегда показывало, где находится контролируемый объект типа легковой автомобиль. Также хотелось, чтоб контролировался ещё уровень топлива и напряжение бортовой сети. В плане охранных свойств, при соответствующей скрытой установке, хотелось чтобы владелец знал не пришло ли в движение авто без разрешения. Также хотелось немного автономной периодической работы - на случай, если основное питание было обрезано.
Всё это было реализовано. К сожалению, используемый трекинговый сервер не позволяет контролировать уровень топлива, но оно работает.. было бы куда вывести. (*)





    Что именно должно обеспечивать устройство:
  • Питаться от бортовой сети автомобиля: 9..30 вольт.
  • Контролировать цепь зажигания: при включённом - строить непрерывный трек, при выключенном - с заданым периодом заявлять о свём существовании (на случай проверки приёма СМС от владельца и сообщении собственных координат на сервер - если питание основное пропало и объект тоже пропал из под окна).
  • При пропадании напряжения бортовой сети выйти на связь и сообщить об аварии по питанию с помощью СМС.
  • Строить трек адаптивно: где надо большую точность (повороты, разгоны/торможения) - ставить больше точек.
  • Управляться и настраиваться с помощью СМС.
  • Уметь работать на резервной батарейке, чтобы иметь возможность найти пропавшее (не обязательно при угоне) авто.
  • Обеспечивать приём как GPS сигналов, так и ГЛОНАСС.
  • Иметь по-возможности компактные размеры.
  • Не требовать внешней GSM антенны (*).
  • Потреблять в покое от бортовой сети ток не более 5ма.
  • Иметь буфер для запоминания точек максимально возможной длины.





    Принципиальная схема
"rf.pdf"  "pwr.pdf"  "mcu.pdf" 

    Как это выглядит в железе:







Схема питания, к сожалению, категорически неудачна, хоть и работает без нареканий. Есть над чем поработать (*).
Скажу лишь, что работает такой вариант вполне сносно: от борта питается, работает, не перезагружается, от батарейки на связь выходит, переходы между батареей и бортом проходят гладко.
Что касается радиочастотной и процессорной частей, то тут всё просто:
  • Quectel M95 + SIM-карта + печатная антенна - GSM канал.
  • ML8088 - GPS/ГЛОНАСС приёмник с внешней антенной, подключаемой через разъём SMA.
  • AtMega640 - центральный процессор, который и управляет всеми протоколами и логикой работы. Тактируется от RC генератора, синхронизированного от внешнего часового кварца.
  • At45DB161 - флеш-память для хранения настроек и буферизации точек (помнит более 30000 точек).





    Логика работы
Для начала в картинках результат работы на примере наиболее долгих заездов, к трекам которых у меня есть доступ:

Немного Кольского полуострова.


 Общий вид.


 Общий вид на полуострове.


 Отрисовка дорог. 


 Отрисовка дорог. 


 Отрисовка дорог. Видно, что точки ставятся в тех местах, где есть кривизна дороги. 


 Работа адаптивки более детально. 


    При наличии бортового питания, вся схема питается от борта через импульсный преобрабователь LM2676. С него через преобразователи питаются микроконтроллер (2,7..3,3 вольта), модем (4 вольта) и gps модуль (3,2..3,5 вольта). Преобразователь работает непрерывно, отсюда довольно большой потребляемый в покое ток. Здесь можно было сделать лучше. И теперь уже прекрасно представляю, как это делать и продумаваю вторую итерацию.

    Если есть напряжение в цепи "Зажигание", то прибор работает непрерывно в ржиме "трекер" - используя адаптивный алгоритм ставит точки, но не реже заданного периода. Изначально период постановки точки 60 секунд. Период надо выдерживать по двум причинам: первое - длинная относительно прямая дорога с очень большим радиусом изгиба - если точек будет мало, то трек выбьется из дороги, и второе - операторы связи рвут соединение и округляют трафик до 100кб (как правило), если в течение 2-х минут (зависит от оператора) не было передачи данных.

    Если "Зажигания" нет, то прибор выходит на связь с указанным периодом, определяет координаты, и передаёт на сервер одну точку. (периодический режим). Изначально период выхода на связь 15 минут. Так часто в жизни не требуется, но по первости хочется поиграться с настройками, а это значит, что прибор должен быть иногда на связи чтобы поймать смс с командой. При ежедневной работе можно увеличить до 12-ти или 24-х часов. Этого достаточно.

    Если пропало напряжение бортового питания (не "зажигание", а именно питание), прибор переходит на питание от батарейки, сообщает текущие координаты, посылает тревожное СМС владельцу и продолжает работать в периодическом режиме. В таком случае, можно прибору дать команду выходить на связь чаще, так будет проще определить местоположение авто, если оно внезапно незапланированно стало меняться с чьей-то помощью.

    Если GSM-сеть теряется (на картинках поездка в мурманск - по дороге связь терялась на сотни километров пути), то точки складываются в буферную флеш-память. Длина буфера сначала была сделана небольшой - 8000 точек, после некоторых изысканий алгоритмических и практических-испытательных, был увеличен до ~30К точек (не предел, много памяти оставлено в резерве для обновлений прошивки по сети). При возможности установить связь с сервером - точки передаются последовательно, трек остаётся непрерывным. Алгоритм перезапуска модема отработал адекватно, ни разу не было такого, чтоб трекер сам не смог выкорабкаться на связь после длительной мёртвой зоны. С другими трекерами, к сожалению, бывали случаи залипания в состоянии "связи нет и не будет".

    Прибор умеет проверять баланс SIM-карты, но пока это работает не для всех операторов и не для всех тарифов (предоплатные Matrix и Megafon работают без проблем, для остальных надо выяснять какие именно USSD команды отправлять и в каком формате вернётся ответ, но всё это легко решается). В прибор была заложена возможность измерять температуру, но не точно, а +-лапоть. Возможность эта реализована, но так как датчик стоит на плате прибора, то практической ценности большой не представляет. Во второй итерации датчик будет выносной и цифровой.





    Работа над ошибками.


  • Брать питание в спящем режиме с бортовой сети не столь чудовищным током покоя импульсного стабилизатора. Тут можно придумать несколько вариантов.. Они уже придуманы и проходят опробирование.
  • Контролировать зажигание надо не отдельным проводом, а по напряжению бортовой сети. А для охранных свойств надо контролировать и напряжение, и цепь зажигания.
  • Нельзя применять продукцию NAVIA в том виде, в котором она продаётся (алгоритм внутренней фильтрации точек несколько ужасает, и модуль, к сожалению, сильно "заносит" на поворотах). На данный момент выбор мой лежит между модулями компаний UBlox и Quectel. Проходят испытания.
  • Автономная работа должна происходить от двух батареек указанного типа - снижаются требования к ним. В настоящий момент батарейка должна быть исключительно качественной.
  • Связываемся с Gurtam (разработчиками gps-trace.com) на тему поддержки адекватного протокола с поддержкой полезных функций.
  • Пишем свой сервер, благо yandex.ru предоставляет удобоваримое API для своих карт, а писать серверы на линуксе не так уж и сложно.
  • Антенны надо делать или обе внутренние, или обе внешние.





    Ещё немного треков и ошибок.





  Глобально, да? 


  Немного поближе. 


  Береговая дорога немного кривая. 


  Соответствие аэрофотосъемке. 


  Развязка в Ярославле. 


  Вторая там же. 


  Разбегаемся и несёмся по стенам.. Ну а что поделать? 


  Видно, что модуль GPS живёт своей жизнью и фильтрует трек, чтоб он был максимально прямым. Из-за этого и получается, что мы проезжаем через заборы и поля.. 


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




    Ещё применения
Как-то нас спросили, можем ли мы контролировать расход воды в поливальной технике?
Мы сказали: "да!".
А сделано было не сказать, что сильно сложно. Так как форсунки имеют прямую зависимость расхода воды от давления в подводящей магистрали, то расход можно посчитать измерив давление. Цена датчика давления на тот момент была ниже, чем расходного.. Его и поставили. Программно изменения были небольшие, но были. Пришлось измерять канал АЦП, немного фильтровать и нормировать. Пришлось так же отключать адаптивность постановки точек. Словили несколько ошибок связанных с отсутствием спутников в небе и постановкой точек в этом режиме.
Ну и решили так: скорость поливалки - суть вообще мало кого интересующая. А вот в какой точке сколько воды израсходовано - это важно. Потому как web был от wialon, с которым договариваться из-за нескольких устройств было бесполезно, то пришлось схитрить: вместо показаний скорости передавать на сервер давление воды. Этого оказалось вполне достаточным для контроля.




    SMS-команды
    1234 - первое, что надо послать трекеру после первого включения. Так он поймёт, кто здесь хозяин и будет слушаться в дальнейшем только вас (запоминает номер телефона).
    password=4321 - второе, что надо послать трекеру. Так вы смените пароль. В будущем, если вы поменяете свой номер телефона, послав трекеру именно этот пароль, вы покажете ему, кто тут главный (смотри первый пункт).
    name=Kamikaze - назначает устройству имя Kamikaze. Так оно будет представляться в СМС.
    period=15m - указывает период времени выхода на связь. Каждые 15 минут устройство, если оно не в режиме трекера, будет определять координаты и ставить точку на сервере. Так же здесь уместно что-то вроде 6h - получится период 6 часов.
    point=60 - указывает максимальный период в секундах постановки точки в режиме трекетра. Адаптивный алгоритм ставит точки не реже указанного.
    balance+ - включает проверку баланса.
    balance- - вЫключает проверку баланса.
    balance=*100# - включает проверку баланса и задаёт, каким именно USSD баланс будет проверяться. Указанный - значение по умолчанию.
    balance? - сообщает текущий баланс.
    gps? - в ответ трекер сообщит свои координаты.
    ?? - максимум сообщений по текущему состоянию (позиция, деньги, уровень сигнала и тп.).



the end