Проект «Автомобильный GPS-логгер

Описание проекта

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

В настоящее время я все реже вношу данные, так как то некогда, то забываю. И возникла у меня мысль автоматизировать часть вносимых данных. Так родилась идея создания данного устройства для моего автомобиля.

Вот список возможностей, которые я хочу реализовать в этом проекте (в устройстве):

  1. Логирование GPS треков поездок (при помощи GPS/GSM модуля)
  2. Автоматическое получение текущего пробега автомобиля (через OBD разъем)
  3. Просмотр информации на дисплее (валяется дома небольшой дисплей для ардуино LCD 1602)
  4. Управление устройством при помощи пульта (есть IR пульт)
  5. Возможность внесения данных по заправке (автоматическое получение GPS координат и текущего пробега; ввод данных о количестве заправленного топлива, его цене и информации о полностью заправленном баке или нет)
  6. Создание основных и вспомогательных путевых точек (основными точками являются: точка начала и окончания маршрута, а также точки, устанавливаемые вручную; вспомогательными точками являются все остальные GPS-координаты, получаемые от GPS-трекера и используются для создания трека поездки)
  7. Голосовые оповещения водителя (используется модуль mp3-плеер)
  8. Выгрузка данных на сервер при обнаружении домашней WiFi сети, либо принудительно через GPRS
  9. Режим Big Brother. Когда устройство постоянно шлет на сервер свои координаты по заданному алгоритму.

Теперь опишу каждую из возможностей более подробно.

Логирование GPS-треков поездок

При помощи GPS/GSM модуля устройство получает свои текущие координаты и сохраняет их в файл лога (в сыром, необработанном виде). Также производит обработку полученных координат и при необходимости пишет в отдельный файл маршрута. При этом для основных путевых точек (см. п.6) сохраняется также текущий пробег автомобиля (см. п.2). Таким образом для сырых данных новый файл создается каждый день и в него пишутся данные с 00:00:00 до 23:59:59 (время берется с GPS), а для данных маршрутов создается новый файл для каждого маршрута.

При включении зажигания устройство:

  • поигрывает приветствие (см. п.7)
  • получает текущие координаты устройства
  • если текущие координаты являются существующей основной точкой, считает, что предыдущий маршрут завершен, при этом проигрывает (“Предыдущий маршрут завершен, начинаю новый маршрут”, см п.7)
  • если текущие координаты не являются существующей основной точкой, определяет время выключения зажигания. Если зажигание было выключено более [2] (время настраивается) часов назад, считается, что начался новый маршрут (система произносит “Предыдущий маршрут завершен, начинаю новый маршрут”, см. п.7), иначе продолжается старый (система произносит “Продолжаем текущий маршрут”, см п.7)
  • если устройство определило, что необходимо продолжить текущий маршрут у водителя есть возможность принудительно начать новый
  • также водитель может указать, что в данный момент автомобиль находится на заправке и было заправлено топливо. В этом случае создается отдельная запись в файле о заправках, куда вносятся текущие координаты, текущий пробег и система ожидает ввода данных о заправке (при этом остальные функции не блокируются, так что водитель может отъехать от заправки и, остановившись в удобном месте, ввести данные по заправке, см. п.5), при этом новый маршрут не создается, а продолжается текущий
  • при начале нового маршрута устройство создает основную путевую точку, используя полученные координаты, которую вносит, как последнюю в файл предыдущего маршрута, затем создает файл нового маршрута и вносит в него эту же точку, как первую точку маршрута
  • во время движения по маршруту в маршрутный файл пишутся не все полученные координаты, а предварительно проверяются на ряд условий: не записываются одинаковые значения координат, не записываются координаты, расположенные близко друг от друга (расстояние настраивается), не записываются координаты с недостаточной точностью (порог точности настраивается)

Автоматическое получение текущего пробега автомобиля

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

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

Просмотр информации на дисплее

При включении зажигания на дисплее отображается информация о начале нового/продолжении старого маршрута и информация об основной путевой точке.

При движении по маршруту, отображается информация о текущем маршруте. А также информация о последней основной путевой точке.

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

Подсветка экрана включается при нажатии на кнопку [On/Off] на пульте, либо соответствующей кнопкой около экрана. После отсутствия каких-либо действий [1 минуту] (время настраивается), подсветка экрана отключается. Во время ожидания внесения данных о заправке экран не отключается (напоминая о необходимости внесения данных).

Управление устройством с помощью IR-пульта

Для начала нового маршрута, ручного создания основной путевой точки, активации режима заправки и включения/выключения подсветки дисплея существуют “быстрые” кнопки, расположенные рядом с дисплеем. Для ввода каких либо других данных в устройство, а также для осуществления настройки устройства необходимо использовать IR-пульт управления.

Для включения/выключения подсветки устройства используется кнопка On/Off.

Во время активации функции заправки, при помощи пульта вносятся следующие данные о заправке (вносимое значение мигает на экране при переходе к нему), для подтверждения ввода необходимо нажать кнопку [OK], для очистки кнопку [C]:

  • текущий пробег. По умолчанию тут отображается пробег, определенный автоматически через OBD2. Его можно изменить или оставить без изменения
  • бак (для случаев заправки в разные баки и в канистры). Заполняется так же, как и тип топлива (см. ниже).
  • данные о типе топлива. При активации режима заправки уже выбран тип топлива, назначенный по-умолчанию для указанного бака. Изменения типа топлива осуществляется при помощи цифровых кнопок пульта (1-9) для выбора типа топлива по-умолчанию нужно нажать кнопку [0].
  • неполный/полный бак. По умолчанию, установлено значение “полный бак”. Для указания полной заправки нужно нажать кнопку [1], для неполной заправки [0], либо просто подтвердить значение по-умолчанию
  • количество заправленных литров топлива. Для ввода данных используются цифровые кнопки. Каждое нажатие добавляет разрядность числу, таким образом, для указания заправки 35,5 литров необходимо последовательно нажать клавиши [3][5][5][0]. Нажатие лишь 3 кнопок [3][5][5] будет соответствовать значению 3,55 л. Т.о. после запятой необходимо всегда указывать два числа, например, для 1 литра необходимо нажать [1][0][0]. Если допущена ошибка ввода нужно нажать кнопку [C] для сброса значения и ввести значение заново
  • цена 1 литра топлива. Данные вводятся также, как и в случае ввода количества заправленных литров.
  • в самом конце запрашивается подтверждение правильности ввода данных. Для подтверждения необходимо нажать кнопки [1][OK], а если необходимо исправить какие-либо введенные данные — кнопки [0][OK] или просто [OK] и изменяемым значением вновь станет текущий пробег, затем бак, затем тип топлива и т.д. При этом ранее введенные значения не будут удалены. Таким образом для изменения значений о баке, типе топлива и полном/неполном баке можно произвести так же, как они вносились, а для остальных данные нужно будет очистить значение (нажатием кнопки [C]) и заново ввести верное значение.
  • после ввода [1][OK] данные о заправке сохраняются в файле заправки и устройство возвращается в стандартный режим работы

Также с помощью пульта осуществляется общая настройка устройства (значения по-умолчанию, таймеры и т.д)

Возможность внесения данных по заправке

Активация режима “заправка” осуществляется при помощи быстрой кнопки “Заправка”, расположенной рядом экраном. Внесение данных о заправки может быть осуществлено в любое удобное время, так как с момента активации данного режима устройство будет ожидать ввода данных о заправки до тех пор, пока они не будут внесены. При этом само устройство продолжает свою работу и лишь на экране сохраняется запрос данных по заправке и остается включенной подсветка экрана.

Внесение данных по заправке осуществляется при помощи IR-пульта дистанционного управления и описано в соответствующем разделе выше.

Создание основных и вспомогательных путевых точек

Основные путевые точки автоматически создаются при начале и окончании маршрута.

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

Голосовые оповещения водителя

Оповещение водителя о режимах устройства осуществляется при помощи модуля mp3-плеера, с использованием заранее записанных уведомлений на SD-карточку памяти. В случае наличия нескольких фраз по одной теме — выбирается случайная фраза.

Приветствие:

  • “Желаю легкой дороги!”
  • “Счастливого пути!”
  • “Доброго и счастливого пути!”
  • “Удачной дороги!”
  • “В добрый путь!”
  • “Увлекательного путешествия!”
  • “Доброй дороги!”
  • “Благополучной дороги!”
  • “Попутного ветра”
  • “Доброго пути!”
  • “Счастливо добраться!”
  • “Ни гвоздя, ни жезла!”
  • “Комфортной езды!”
  • “Быстрого пути!”
  • “Ровной дороги. ”
  • “Гладкой дороги.”
  • “Будь внимательней на дороге!”
  • “Удачи на дорогах.”
  • “Пусть удовольствие от дороги будет сильнее усталости.”
  • “Красивых видов за окном.”
  • “Приятного путешествия.”
  • “Поменьше крутых поворотов.”
  • “Поменьше крутых спусков и крутых подъёмов.”
  • “Тебе добраться и багажу не потеряться!”
  • “Пусть не будет на пути ни заторов, ни пробок, ни аварий!”
  • “Хороших радиоволн в дороге!”
  • “Хорошей погоды в пути.”
  • “Дороги — без ям, без выбоин и без ухабов!”
  • “Попутного ветра!”
  • “Всегда зелёного света!”
  • “Не гоняй и дураку дорогу дай.”
  • “Пусть будет лёгкою дорога”
  • “Пусть линия горизонта всегда остается ровной.”
  • “Легкого тебе пути и ровных дорог.”
  • “Пусть дорога преподносит только приятные сюрпризы.”
  • “Храни тебя судьба!”
  • “Пусть к колесам прилипают только счастливые лотерейные билеты и крупные купюры!”
  • “Пусть ничто не огорчит тебя в пути.”
  • “Пусть твоя дорога будет покрыта чудесами!”
  • “Безопасных тебе дорог!”
  • “Пусть любая дорога приведет туда, куда тебе надо.”
  • “Береги себя!”
  • “Желаю не сбиться с пути.”
  • “Пусть в конце пути тебя ждет награда.”
  • “Желаю чтобы твой путь стоил затраченных на него
  • усилий.”
  • “Пусть поездка будет в радость!”
  • “Удачи, и – в добрый путь!”
  • “Приятного вояжа!”
  • “Благополучно тебе добраться до пункта назначения!”
  • “Желаю получить новые интересные впечатления.”
  • “Пусть всегда тебе горит «зеленый»!”
  • “Пусть дорога будет к тебе добра.”
  • “Пусть всякая дорога всегда приводит тебя домой!”
  • “Бодрости в пути!”
  • “Успешной поездки и благополучного возвращения!”
  • “Пусть никто и ничто не омрачит твоего пути.”
  • “Пусть счастливая звезда освещает твой путь.”
  • “Безаварийного тебе пути.”
  • “Спокойствия тебе и терпения. Тогда путь сам станет счастливым!”
  • “Пусть дорога будет – ровной, а место для отдыха – сухим!”
  • “Везения в пути.”
  • “Волшебной поездки.”
  • “Хорошего тебе самочувствия за рулем.”
  • “Пусть все попутные события будут только – приятными!”
  • “В добрый путь!”
  • “Пусть всё у тебя будет ровно и гладко!”
  • “Безоблачного неба и бодрствующей интуиции.”
  • “Спокойствия тебе за рулем!”
  • “Пусть в пути встречаются только отзывчивые люди.”
  • “Пусть все цели будут достигнуты.”
  • “Поменьше тебе крутых поворотов.”
  • “Пусть помощь приходит своевременно, если она потребуется.”
  • “Пусть здравый смысл не изменяет в пути.”
  • “Довези себя не только живым, но и – здоровым!”
  • “Пусть повороты в пути будут только – к лучшему.”

Основные:

  • “Предыдущий маршрут завершен, начинаю новый маршрут”
  • “Продолжаем движение по текущему маршруту”
  • “Создана новая путевая точка”
  • “Ожидаю данные о заправке”
  • “Отмена приема данных о заправке”

Прощание (при выключении зажигания):

  • “До скорой встречи”
  • “Всего хорошего”
  • “Всего доброго”
  • “Удачи”
  • “В добрый час”
  • “Всего лучшего”
  • “Всего наилучшего”
  • “Всех благ”
  • “До свидания”

Синхронизация с домашним сервером

При обнаружении устройством домашней WiFi сети, оно синхронизируется с сервером, передавая на него все полученные данные. Передав данные и получив подтверждение, устройство удаляет информацию о маршрутах со своей карты памяти.

Сырые данные GPS, данные об основных путевых точках и данные о путевых точках заправок с карты памяти автоматически не удаляются.

Режим Big Brother

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

При включенном зажигании GPS-координаты постоянно отправляются на домашний сервер для обработки модулем GPS-трекер. Можно настроить, какие координаты не будут отправлены на сервер:

  • полностью одинаковые координаты
  • координаты, находящиеся друг от друга на расстоянии менее [10 метров] (расстояние настраивается)
  • полученные чаще чем [1 раз] (частота настраивается) в [30 секунд] (период настраивается)

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

Необходимые модули

  1. GSM/GPS-модуль — определение GPS координат, отправка/получение служебных SMS сообщений, синхронизация данных с домашним сервером (активируется вручную)
  2. ELM327 — подключение к OBD2 разъему для считывания текущего пробега автомобиля
  3. WiFi модуль — подключение к домашней WiFi сети для синхронизации данных с домашним сервером (в автоматическом режиме)
  4. LCD-экран с подсветкой — отображение информации устройства
  5. Тактовые кнопки (4х) — кнопки основного функционала устройства
  6. IR-датчик — считывание сигналов IR-пульта
  7. IR-пульт — полноценное управление устройством, настройка устройства
  8. RGB-светодиод (либо обычный (режимы мерцанием)) — отображение текущего режима работы устройства
  9. Модуль SD-карты — сохранение данных устройства
  10. Модуль MP3-плеера — для воспроизведения уведомлений устройства
  11. Динамик — для воспроизведения уведомлений устройства
  12. Arduino/ESP8266 — мозги устройства
  13. Нажимной подстроечный резистор, для более простого управления устройством (возможно)
  14. Акселерометр/компас (предположительно)

Вот такой концепт получился. Продолжение напишу, когда начну реализацию данного проекта и будет о чем написать.


Ссылка на основную публикацию