Originally published at Techno Mind. Please leave any comments there.

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

Для точного измерения пройденного пути я сразу подумал использовать GPS. Наивно полагая, что все получится, я установил в свой смартфон HTC Desire HD программу-логгер маршрута GPS и поехал.

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

Поразмышляв немного на эту тему, я пришел к выводу, что соберу-ка я сам GPS спидометр-одометр (далее девайс).

Это позволит убить массу зайцев одним выстрелом: откалибровать бортовик, познать азы работы с GPS приемниками, координатами и сопутствующими расчетами, ну и наконец, пощупать вживую известную платформу Arduino – именно на ней планировалось построить девайс.

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

Забегая вперед скажу, что я стал часто использовать борды Arduino в своих проектах, но программы стал писать в своем любимом компиляторе CodeVisionAVR, и заливаю ее в Arduino с помощью разработанной мной утилиты, встраиваемой в интерфейс компилятора. Я напишу отдельную статью касательно этого вопроса в ближайшем будущем.

Ну, вернемся к нашим баранам. Сердцем прибора стал борт Arduino Uno:

В качестве приемника GPS я использовал борд SparkFun основанный на чипе Venus638FLPx:

Приемник замечательный. Из основных достоинств могу отметить его 65 канальную архитектуру, широкий диапазон напряжений питания, возможность подключения резервного питания (что обеспечить быстрый старт при возобновлении основного питания), высокую частоту обновлений координат (до 20 Гц) и т.д.

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

Для индикации измерений использовался обычный экран 16×2:

Кроме того, раз уж пошла такая пьянка, в систему был добавлен Bluetooth передатчик HC-05 (pinout):

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

Сам модуль HC-05 доступен по цене 5-7 долларов за штуку и продается везде. К сожалению, работа с ним полна геморроя, потому как выпускает эти модули нынче каждый третий китаец, и делают они их все немного по разному, так, что найти 100%-но соответствующий даташит нереально. В итоге Bluetooth передатчик получается нормально запустить и настроить после нескольких циклов проб и ошибок.

Важно отметить, что для работы передатчика важно подтянуть к питанию ноги reset и wake-up, а также подсоединить к земле все GND.

Питать все это дело я решил он литий-полимерного аккумулятора на 3.7 вольт. За сим потребовался преобразователь напряжения (step-up) до 5 вольт, а также зарядное устройство для аккумулятора через USB порт:

Ну и наконец – антенна, первая, что попалась под руку:

Все вышеназванные детали были соединены вот таким образом (надеюсь, я не ошибся – девайс строился на лету, так что схему я рисовал по памяти):

В итоге из рассыпухи break-up бордов получилась вот такая лапша:

Снаружи:

После того, как девайс был готов, была написана прошивка, последнюю версию которой можно сказать .

Кратенько о прошивке.

При включении, после заставки, на экране высвечивается сообщение No fix detected. Оно будет продолжать высвечиваться, пока девайс не сможет определить собственные координаты.

Как только это произойдет, они тут же высветятся на экране, вместе с текущей скоростью и азимутом движения.

Левой кнопкой можно менять режим отображения данных на экране. Возможности:

  • Координаты и азимут движения
  • Пробег, текущая и максимальная скорости
  • Время и дата
  • Напряжение на батарейке

Длительным нажатием на правую кнопку можно обнулить одометр.

Девайс постоянно мониторит напряжение батареи, и как только оно упадет ниже 3.2 вольт, девайс перейдет в режим отображения напряжения на экране. При этом перейти на другой экран станет невозможно.

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

Кроме того, если в процессе работы ухудшится прием GPS и девайс начнет терять сигнал, высветиться сообщение DATA LOSS.

Подсчет пройденного расстояния производится по методу Great Circle distance calculation – HAVERSINE. В силу специфики гражданского GPS, измерения пробега получаются наиболее точными при движении по трассе. Хотя с хорошей антенной и в городе точность получается довольно точными. При контрольной проверке по карте, погрешность составила пару сотен метров на 50 километров пути.

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

Кроме того, вместо телефона к Bluetooth можно подключить компьютер и пользоваться им в качестве инструмента для записи и анализа маршрута, в том числе в реальном времени.

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

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

Ну вот пожалуй и все. Буду рад ответить на вопросы.

GPS cпидометр для автомобиля, мотоцикла, лодки и другой техники (хоть телеги с лошадью 🙂

Спидометр, не требующий привода и установки дополнительных датчиков на колеса
Ну как наверное понятно из названия, этот спидометр использует GPS позиционирование, со всеми вытекающими плюсами и минусами.
Покупался с конкретной целью, в качестве замены штатному, на мотоцикле УРАЛ. У этих мотоциклов имеется «болезнь», отчасти связанная с замысловатой прокладкой тросика, в результате чего происходит неравномерная работа (рывки, подергивания). Покупка нового тросика, как правило, не решает проблему. Поэтому было принято решение использовать что-нибудь нештатное, не требующее привода и установки всякого рода магнитных датчиков на колеса и т.п.
Выбиралось в стиле оригинального, что бы можно было заменить заводской не слишком уходя от «классической темы оформления»

Более остальных, подходящий по размерам, понравился именно этот…

1. Класс защиты IP67, весь корпус полностью водонепроницаемый
2. Функция антизапотевания
3. Безель из нержавеющей стали с изогнутым стеклом
4. Внешняя GPS антенна, Штекерная и инструментальная установка
5. Показывает скорость и общий пробег
6. Имеет высокую точность и быстрый запуск (поиск спутников)
Продается в нескольких цветовых вариантах и с разным цветом подсветки

Был заказан наиболее похожий на оригинальный.
Упаковка аскетичная…


Комплект, кроме самого спидометра, включает в себя инструкцию, выносную антенну GPS и кабель для электрического соединения с «техникой»

Спидометр сделан ОЧЕНЬ качественно! Выглядит весьма солидно и совсем «не по-китайски» 🙂

купленный вариант с единицами измерения в Км. Бывают в милях, с изменяемыми единицами измерения и всякого рода дополнительными функциями отображения компаса и т.п.
Сбоку немного информации о модели, распиновка, и даже похоже заводской номер!

Уплотнительное колечко, для установки в корпус

Вид сзади.

скоба для крепления, несколько разъемов и кнопка под резиновой заглушкой (для герметичности устройства) — загадочная кстати кнопка :).

Я два дня «пытал» продавца, и он связывался с изготовителем, никто не мог про нее рассказать ничего толкового 😉
Вернее начинали рассказывать, по вот этой инструкции

Перевел ее немного…
1. Включите питание, прибор начнет поиск сигнала, и SOG будет автоматически подсчитываться.
Если сигнал GPS не найден, до окончания поиска (счет до 300 индицирующий поиск спутников), отображается ошибка SOG «E01», указывающая, что сигнал не найден. Когда SOG мерцает, это индикация, что сигнал сигнала GPS потерян.
2. Задней кнопкой спидометра мы можем изменять единицы измерения: KNOTS, MPH, KM / H (сохраняется автоматически).

SOG: скорость над землей.
COS: (курс над землей): направление движения относительно положения грунта, показывающее направление по часовой стрелке относительно севера.
TRIP: Сброс на ноль при выключении питания.
ODO: накапливается и не сбрасывается при отключении питания.
3. Код неисправности: E01 указывает, что не может выполнять поиск сигналов GPS, когда они находятся в напряженном состоянии.
E02 указывает на то, что он потерял сигнал GPS.
E03 указывает, что существует проблема с цепью
Но весь нюанс оказался в том, что эта инструкция универсальная, и не совсем подходит к этому варианту спидометра 🙂
В присланном, например, при окончании поиска спутников, если сигнал не найден (конец отсчета 300), не выдается код ошибки.

Продавец так и сказал — у Вас вообще нет кнопки! 🙂 Кнопка это другой вариант спидометра.
Когда я ему ее показал, он попросил ее понажимать… -внешне ничего не менялось.
Если и были изменения, то никак не отображаемые на экране. Использовать ее на установленном спидометре в фару будет весьма затруднительно, поэтому я дополнительно протестировал ее (кликал разными вариантами) на ходу в автомобиле — все равно НИКАКОЙ реакции! Очень трудно поверить в установку неиспользуемой кнопки в китайском устройстве (скорее не установят там, где необходимо) — с ее назначением так и не смог разобраться 🙁
Кстати, что бы «потерять» сигнал (для получения ошибки на фото), мне пришлось отсоединять разъем антенны GPS.
Приемник GPS на спидометре ОЧЕНЬ чувствительный!
Я пытался экранировать выносную антенну в металлическую банку, и кроме того засовывал в большой металлический бокс, но он лишь иногда терял на пару сек. сигнал, и не хотел уходить в ошибку!

Поиск спутников происходит очень быстро!

На совсем «холодную» чуть дольше, но даже первый раз искал не более пары минут!
Кроме кнопки, на задней стороне расположен разъем выносной антенны GPS

Коннектор питания

И еще один, неизвестный разъем, спрятанный под заглушкой. О нем уже не стал расспрашивать продавца, сделав выводы из общения о кнопке 🙂

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


Содержимое



Размеры устройства




Провод питания, очень короткий 🙁

Соединяем для проверки, согласно инструкции 😉

Довольно быстро находит спутники и устанавливается «0» (одометр, еще не использовался, поэтому 0км)

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

Замеры потребляемого тока

При поиске спутников

в рабочем состоянии

при включенной подсветке

Скорее всего максимальное потребление (в инструкции заявлено до 100мА) во время работы сервопривода, но уловить и зафиксировать этот момент очень проблематично 🙁
подсветка надо сказать очень неплохая, в меру яркая, равномерная — выглядит красиво. По крайней мере белая!


Красная (фото от продавца) мне не нравится, от слова «совсем».

По работе спидометра

прокатился с ним на автомобиле, положив на парприз. Скорость отработки стрелкой ускорения/торможения, аналогична штатному спидометру автомобиля.
Не знаю каким образом это реализовано, но отрабатывает моментально, без видимой задержки!
Точность показаний весьма неплохая, на мой взгляд погрешность не более 2 км/ч (в сторону увеличения, как и полагается). Сравнивал с калиброванным (когда-то) БК.
Калибровка могла уже давно «уйти»(износ резины и пр.), но даже в таком варианте, на расстоянии 30км разница одометра с БК составила не более 300м, и что показывает более точно неизвестно 🙂

Снимал и видео работы спидометра, но оно получилось мало информативным — сложно снимать смартфоном и ехать за рулем одновременно, поэтому покажу только пару скринов из него.
Штатный спидометр в авто немного занижает реальную скорость — размер колес не заводской, но в сравнении с БК практически одинаково

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

Выводы:

Спидометр очень понравился, реально качественно изготовлен и хорошо работает! Скорость нахождения спутников и чувствительность отличная. Показания точные, отработка быстрая. Подсветка равномерная, красивая.
Использовать можно не только в мотоциклах. Как вариант замены штатного на автомобилях с проблемами приводов, замененными коробками и т.п. Возможно «заколхозить» и в родную приборку, внешний вид позволяет.
При использовании подобного спидометра не требуется калибровка скорости/пробега при смене размеров колес и замены летней резины на зимнюю 😉
Не понравилось: Короткий провод питания. Нет инструкции на мой вариант спидометра. Не понятно назначение кнопки и имеется ли возможность выбора суточного пробега или единиц измерения (предполагал, что кнопка может быть предназначена для этих функций)
После замены спидометра внешний вид «приборки» мотоцикла почти не изменился

Сообщества ›
Arduino для автомобиля ›
Блог ›
GPS спидометр на NEO-7 и Wemos D1 (ESP8266)

Всем привет!
Хочу поделиться реализацией простого GPS спидометра c возможностью замера времени разгона на базе платы Wemos D1 и модуля VK2828U7G5LF NEO7-M.
Подключение
Для начала давайте подключим всё следующим образом:
1) Соединим дисплей с шиной I2C: VCC -> 3V3, GND -> GND, SCL -> D1, SDA -> D2.
2) А GPS модуль с программным UART: V -> 3V3, G -> GND, R -> D8, T -> D7.

Спидометр
Напомню, что для максимальной производительности мы будем использовать только протокол UBX. Чтобы не перегружать статью кодом я вывел всю работу по обработке протокола в отдельные файлы, скетч целиком можно будет скачать ниже.
Напишем простой код, который будет выводить на экран текущую скорость.
#include <ssd1306.h> // Библиотека для работы с дисплеем
#include «UbloxGPS.h» // Библиотека для работы с GPS
#include «font.h» // Шрифт Orbitron_Light_26
// Инициализируем дисплей подключенный к пинам D2 и D1

SSD1306 display(0x3c, D2, D1);
char gpsSpeed; // Буфер для строки с скоростью
int gpsSpeedKm = 0; // Скорость в км/ч
void setup() {
serial.begin(115200);
delay(500);
gpsSetup(); // Настройка модуля Ublox
// Первоначальные настройки дисплея
display.init();
display.flipScreenVertically();
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.setFont(Orbitron_Light_26);
}
void loop() {
// Обновляем скорость по мере поступления данных от gps модуля
int msgType = processGPS();
if (msgType == MT_NAV_PVT) {
display.clear();
gpsSpeedKm = ubxMessage.navPvt.gSpeed * 0.0036; // Переводим в км/ч
sprintf(gpsSpeed, «%03d», gpsSpeedKm);
display.drawString(64, 22, gpsSpeed);
display.display();
}
}
Скачать архив со скетчем: Spedometr.zip
Загрузим его, и попробуем прокатиться.
Немного видео:

Замер разгона
Давайте усложним задачу, добавим замер разгона до 30, 60 и 100 км/ч.
Алгоритм предельно простой:
1) Ждем когда начнется движение
2) Замеряем время старта
3) При достижении определённой скорости вычитаем из текущего времени время старта и сохраняет результат
#include <ssd1306.h> // Библиотека для работы с дисплеем
#include «UbloxGPS.h» // Библиотека для работы с GPS
#include «font.h» // Шрифт Orbitron_Light_26
// Инициализируем дисплей подключенный к пинам D2 и D1
SSD1306 display(0x3c, D2, D1);
char gpsSpeed; // Буфер для строки с скоростью
int gpsSpeedKm = 0; // Скорость в км/ч
bool start = false; // Старт замера
long startMillis = 0; // Начало отсчета
long currentMillis = 0; // Текущее время
float meteringTime = 0; // Время замера
// Cтруктура результатов
struct Metering
{
float accel30;
float accel60;
float accel100;
};
Metering metering;
void setup() {
serial.begin(115200);
delay(500);
gpsSetup(); // Настройка модуля Ublox
metering = {0.0, 0.0, 0.0}; // Тут будем хранить результаты
// Первоначальные настройки дисплея
display.init();
display.flipScreenVertically();
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.setFont(Orbitron_Light_26);
}
int loops = 0;
void loop() {
currentMillis = millis(); // текущее время в миллисекундах
int msgType = processGPS();
if (msgType == MT_NAV_PVT) {
//loops++;
gpsSpeedKm = ubxMessage.navPvt.gSpeed * 0.0036; // Переводим в км/ч
//gpsSpeedKm = loops;
// Если движемся
if (gpsSpeedKm > 0) {
// Если это был старт
if (!start) {
start = true;
startMillis = millis();
}
meteringTime = (float)(currentMillis — startMillis) / 1000; // Время замера
// Результаты замера
if (0.0 == metering.accel30 && gpsSpeedKm >= 30) {
metering.accel30 = meteringTime; // Разгон до 30км/ч
}
else if (0.0 == metering.accel60 && gpsSpeedKm >= 60) {
metering.accel60 = meteringTime; // Разгон до 60км/ч
}
else if (0.0 == metering.accel100 && gpsSpeedKm >= 100) {
metering.accel100 = meteringTime; // Разгон до 100км/ч
}
}
else if (start && 0 == gpsSpeedKm) { // Если остановились
start = false;
}
updateDisplay();
}
}
void updateDisplay() {
display.clear();
// Выводим скорость
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.setFont(Orbitron_Light_26);
sprintf(gpsSpeed, «%03d», gpsSpeedKm);
display.drawString(44, 22, gpsSpeed);
// Разгон до 30 км/ч
display.setTextAlignment(TEXT_ALIGN_RIGHT);

display.setFont(ArialMT_Plain_16);
display.drawString(122, 10, (String)metering.accel30);
// Разгон до 60 км/ч
display.setTextAlignment(TEXT_ALIGN_RIGHT);
display.setFont(ArialMT_Plain_16);
display.drawString(122, 24, (String)metering.accel60);
// Разгон до 100 км/ч
display.setTextAlignment(TEXT_ALIGN_RIGHT);
display.setFont(ArialMT_Plain_16);
display.drawString(122, 38, (String)metering.accel100);
display.display();
}
Скачайте архив со скетчем и загрузите его в ваш Wemos D1: Spedometr2.zip

Теперь отправляемся на ровный безлюдный участок дороги и проводим тестовый замер.
ВНИМАНИЕ: Я настоятельно рекомендую соблюдать правила ПДД и СКОРОСТНОЙ РЕЖИМ, все действия производятся на Ваш страх и риск, а статья предоставлена исключительно в ознакомительных целях и автор никакой ответственности не несёт.
Вот мой результат разгона, по моему неплохо для «овоща». ))
На этом всё, до скорых встреч!
Оригинал статьи как всегда можно прочитать на моём сайте: ardulogic.ru/posts/gps-sp…-neo-7-i-wemos-d1-esp8266

GPS ТРЕКЕР, СПИДОМЕТР, ОДОМЕТР И СПУТНИКОВЫЕ ЧАСЫ. ПРОЕКТ НА АРДУИНО.

Страница проекта: https://github.com/voltnik/GPS-speed-tracker

Обзор на 3Д принтер: https://www.youtube.com/watch?v=l0Fw1vF3B60

Схема проекта:

Привет друзья, у нас с вами над головой летает большое количество разных космических аппаратов. Среди них есть примерно 90 крайне полезных навигационных спутников американской системы GPS, российской ГЛОНАСС, европейской Галилео и китайской БэйДоу. И сегодня мы будем ловить с них сигнал.

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

Радиосигнал распространяясь со скоростью света доходит до Земли с задержкой от 60 до 90 миллисекунд, это зависит от удаления спутника. Зная точное расположение источника радиосигнала по задержке времени его распространения можно узнать точное расстояние до спутника. И далее по триангуляции расстояний до нескольких известных объектов можно узнать где вы находитесь в пространстве.

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

Замер расстояний до каждого последующего спутника повышает точность позиционирования и сегодня она составляет от 1 до 3 метров при стандартной видимости около 10 навигационных спутников.

С теорией разобрались, перейдем к практике. Сейчас отдельно продаются разные навигационные модули. Самые простые и древние поддерживают только сигналы от американской GPS системы наблюдая, в среднем 5-7 спутников. Более продвинутые модули могут принимать сигнал еще и от российской группировки ГЛОНАСС, повышая общее количество наблюдаемых спутников в среднем в два раза. Также в продаже есть модули, совмещенные с компасом, они используются для точной навигации и поддержания курса.

На экране моего телефона видны спутники разных навигационных систем. Кружки это GPS, треугольники — ГЛОНАСС, а звездочки это китайская БэйДоу. Таким образом мой телефон поддерживает три разные навигационные системы и совмещая сигналы от них, повышает точность определения местоположения. Сейчас над моей головой находится 28 спутников, а доступен сигнал только от 7. Т.е. мой телефон уже заранее знает где находится каждый спутник. А отсутствующий сигнал от 21 спутника значит, что они находятся вне зоны прямой видимости. Навигационный сигнал очень слабый, от слова ВАЩЕ, он почти не отражается, его блокирует рельеф местности, здания, крыша автомобиля – любой металл у вас над головой или сбоку. Даже идущий за окном снег мешает хорошему приему.

Для реализации проекта понадобится ряд электронных модулей: программируемая платформа Arduino Nano, OLED экран 128 на 32 точки (он подключается по шине I2C), GPS модуль для подключения по UART, любой литиевый аккумулятор емкостью выше 200 миллиампер, защитно-зарядный модуль для лития и повышающий преобразователь для того чтобы получить 5 вольт. У меня тут три разных типа, подойдет любой. Еще планировал использовать цветной RGB светодиод для индикации состояния, но по ходу проекта отказался от этого.

Подключаем экран к Ардуино и сталкиваемся с первой трудностью. Стандартная библиотека OLED экрана занимает 20 кБ, это 70% памяти микроконтроллера и практически не оставляет места для программы. Ранее я собирал высотомер и столкнулся с тем что любая новая строчка кода приводит к переполнению памяти и зависанию микроконтроллера при работе. Поэтому буду использовать значительно более легкую библиотеку. В ней нет работы с графикой и доступен только вывод текста на OLED экран, а занимает она всего 1 кБ памяти.

Отдельно подключаю GPS модуль к макетной плате и вижу первые навигационные данные – сигнал из космоса пойман и обработан. Теперь делаю вывод информации на экран. Класс! Видит 4 спутника, теперь 3, и снова 4, уже 5! Для лучшего приема GPS модуль висит за окном на проводе.

Во время разработки проекта я использовал GPS модули разных типов. Простые GPS и совмещенные GPS c Глонасс. Пришлось провести ряд многочасовых экспериментов для проверки на стабильность работы. Модули оказались рабочими, а вот с программными библиотеками пришлось повозится. Пробовал несколько разных библиотек, и TinyGPS+ оказалась единственной, которая работала сразу со всеми модулями GPS.

Вообще библиотека занимается разбором протокола NMEA, по-простому парсит данные, которые выплевывает GPS модуль два раза в секунду. Вот так выглядит не обработанный поток данных.

В итоге моя прошивка позволяет подключать практически любой GPS модуль по UART с протоколом передачи данных NMEA. По сути это большинство модулей, у которых есть пины RX и TX. Рекомендую брать именно модуль GPS с Глонасс, он видит больше спутников, поэтому точность у него выше. Ссылки на все комплектующие и модули есть в описании к этому видео.

Макетка показала полную работоспособность системы, теперь можно собирать все в железе. В качестве питания я буду использовать литиевый аккумулятор, он подключатся к защитной плате с зарядкой. На этой плате нижний резистор R3 задает ток зарядки аккумулятора, по умолчанию установлен 1 ампер, это много для маленьких аккумуляторов, поэтому резистор нужно заменить. На экране вы видите табличку с номиналом резисторов под разные токи зарядки. Если ваш аккумулятор имеет емкость 500 миллиампер часов, то нужно выставлять ток заряда не выше этого значения. Т.е. можно поставить 200 или 300 миллиампер, и не превышать 500.

Далее напряжение нужно повысить, экран и GPS модуль питаются от 5 вольт. Это будем делать с помощью повышающего преобразователя напряжения. Такие обычно устанавливаются в повербанки для того чтобы поднять напряжения с 3.7 до 5 вольт. Я буду использовать маленький зеленый модуль, он может выдавать ток до 300 мА и его более чем достаточно для этого проекта.

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

Измеряю размеры всех модулей и пытаюсь расположить их максимально компактно. Но как я не старался, тонкий экран никак не увязывался с широким GPS приемником. Поэтому решил заменил экран на другой OLED 128х64 точки. Так получается эргономичнее и кнопочку можно большую поставить. OLED экраны полностью совместимы и требуют минимальной коррекции кода, поэтому прошивки будут доступны на обе версии устройства с маленьким экраном и с большим.

Схема сборки простая. Нужно подключить экран к шине I2C это пины А4 и А5, gps модуль подключается к программному serial порту на пинах D3 и D4. Кнопка на пин D7. Питание от аккумулятора через защитный модуль тащим на выключатель, далее на повышающий преобразователь, и подключаем на 5 вольт Ардуино.

Для удобного размещения компонент буду использовать зеленую макетную плату 7 на 3 сантиметра. Чтобы экран не висел на разъеме устанавливаю его на пластиковые стойки спейсеры на 5 миллиметров. Между экраном и кнопкой будет находится GPS приемник. С обратной стороны платы будет установлен контроллер Ардуино, аккумулятор и защитная плата. Аккумулятор буду использовать тонкий литий на 350 миллиампер, если не ошибаюсь такие используются в электронных сигаретах, но как я уже сказал можно использовать любой литиевый аккумулятор.

Заново все замеряю, промеряю и готовлю проект корпуса для печати на 3Д принтере. Буквально 15 минут на сайте TinkerCAD и проект готов к печати. Переношу файл на флешке, запускаю и погнали. Время печати составляет около 40 минут, это первый пристрелочный корпус для примерки размещения модулей.

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

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

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

Плата идеально устанавливается внутрь корпуса, крепления сошлись, кнопка не заедает. С одного торца есть отверстие под разъем Ардуино Нано, а с другой стороны для зарядки аккумулятора. Оно оказалось, немного уже, поэтому расширяю его скальпелем.

У зарядной платы по краям есть выступы, они мешают углубить разъем, стачиваю их надфилем. Теперь плата хорошо занимает свое место.

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

Далее снизу расположится контроллер Ардуино, зарядка лития и сам аккумулятор.

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

Пора паять. Запаиваю первый контакт экрана на плату, примерка – все правильно и можно запаять остальные три контакта. Теперь кнопка. И обязательно счищаем флюс щеткой. Запаиваю провода на модуль защиты аккумулятора.

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

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

Кстати, рекомендую классную аккумуляторную дрель. Она работает от одного аккумулятора 18650 и позволяет быстро рассверливать подобные отверстия на платах и в корпусах, раньше для такой работы мне приходилось доставать дремель из кейса и подключать его в розетку, а сейчас под рукой всегда есть эта дрель.

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

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

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

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

Запаиваю защитный модуль и закрепляю его на своем месте термоклеем.

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

Далее запаиваю все торчащие провода согласно схеме, на контроллер Arduino Nano.

Готово, теперь нужно залить прошивку. Подключаем Ардуино к компьютеру, заходим на страницу проекта, ссылка на него есть в описании видео. Качаем архив, распаковываем файлы, устанавливаем библиотеки, открываем нужную версию прошивки для экрана на 32 или на 64 точки и загружаем ее в контроллер. Все, заработало с первого раза! Данные с GPS прут. Круто!

Устанавливаю контроллер на свое место, включаю автономное питание… иииииииииии.. нифига. Светодиод питания на Ардуино горит, а экран не включился. И вот так случился трындец, причину которого я не знаю до сих пор. У меня ушло несколько часов работы чтобы заставить трекер работать автономно от встроенного аккумулятора.

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

Зарядил на нем аккумулятор и поставил трекер на окно ловить спутники. Через три минуты он словил сигнал от 4 спутников и определил местоположение. Ну что, значит работает и наверно можно собрать? Меняем повышающий преобразователь, видимо мелкий сильно шумит по питанию.

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

Все, провода скрутил в косички чтобы избежать наводок. Иии… эта гадина опять не включилась. Точнее включилась и сразу зависла с артефактами на экране. Столько часов работы и все в пустую. Замена преобразователя не помогла.

Пробовал устанавливать конденсаторы на питание – ничего не помогало. Трекер отказывался работать автономно, и от повышающих преобразователей, и от лабораторного блока питания – зависал или вообще не включался. Но при этом он отлично пахал от USB разъема Arduino.

Методом последовательного отключения удалось выяснить, что виноват в этом OLED экран – но почему, я так и не понял. Решение нашлось внезапно. Во время очередной проверки автономного питания я случайно подал на пин VIN 5 вольт. Замечу что этот пин !не! предназначен для подачи питания 5 вольт и требует напряжение от 7 до 12 вольт.

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

Заодно решил проверить ток потребления. От 5 вольт трекер кушал около 70 миллиампер. А от 4 вольт через повышающий преобразователь получилось около 110 миллиампер. Таким образом моего маленького аккумулятора на 350 миллиампер хватит на три часа автономной работы. И это я еще питание не оптимизировал, можно срезать вечно горящие светодиоды и еще сэкономить батарею.

Трекер стал полностью стабильно работать, оставил его на окне и спустя несколько минут он словил 4 спутника. Отлично

Если вам интересно помочь мне разобраться в причине странного поведения Ардуино, то вот вам вводная:

1 – Трекер работает если его запитать через USB разъем Ардуино.

2 – Трекер зависает и не включается если запитать его через пин Ардуино 5V подав на него напряжение 5 вольт от любого источника питания.

3 – Трекер зависает и не включается если подать на него 7 вольт и более через пин Ардуино VIN.

4 – Трекер работает если его запитать не стандартными 5 вольтами через тот же самый пин VIN.

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

На главном экране после загрузки сверху отображается текущее время и дата по Гринвичу, вторая строка — это текущая скорость 0.3 километра в час и максимальное значение скорости которое было зафиксировано со времени включения — 26 километров в час. На третьей строке текущее расстояние до нулевой точки 530 метров и максимальное удаление которое было достигнуто с момента включения — 580 метров. На четвертой строке одометр, показывает 923 метра и используемое количество спутников.

Нижняя строка chars – это количество данных принятых с GPS модуля.

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

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

Перейдем к тестированию. Сейчас трекер видит 12 спутников. Выставляю текущую нулевую точку и сбрасываю одометр в ноль. Тоже самое делаю на автомобильном одометре. Проехав 1.2 километра по спидометру автомобиля, я увидел на GPS трекере те же самые 1205 метров. Текущее расстояние до нулевой точки по прямой составляет 0.93 километра. И вот по карте те самые 930 метров, пока все точно.

Решил замерить более длинную дистанцию. Опять сбрасываю показания в нули на трекере и автомобиле. Проехав 8.4 километра, я обнаружил на трекере дистанцию пути меньше – всего 7974 метра. При этом текущее расстояние до нулевой точки составляет 4.930 метров. Проверим по карте, получается очень точно, те же самые 4.930 метров. Непонятно, только почему тогда одометр врет на 400 метров и какой именно одометр врет, на машине или GPS.

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

Приехал на каток и решил замерить скорость хоккеиста. Блин, чехлы ему еще для скорости нужно снять. Получилась лютая скорость, прямо «русская ракета» — 5 километров в час. Пешком ходил, а все потому что потолок на катке фольгой отражающей утеплен для удержания холода. Сигнал от спутников есть, но он не точный.

Давайте проведем последний тест с помощью мобильного телефона. Телефон видит 7 спутников, а трекер 9. Запускаю логгирование и сбрасываю одометр на трекере. Ну.. погнали. Проехав три километра телефон и трекер показывали идентичные значения на одометре. 3017 против 3021 метра – это супер результат, я не ожидал такой точности.

И далее показания скорости во время всей поездки тоже были идентичны. Максимальная скорость тоже совпала и там, и там 84 километра в час.

А вот одометр глюканул, аж на целых 12 тысяч километров. Некисло так. Ранее у меня при отладке программы уже проскакивал такой глюк и трекер разом перемещало на 7 тысяч километров. Придя домой я создал в Google точку с нулевой широтой и долготой. Оказалось, она находится в Атлантическом океане, недалеко от побережья Ганы. Замерив расстояние от нее до своего местоположения я и получил те самые 7 тысяч километров. Получается от GPS модуля иногда проскакивают нули по координатам. Это легко можно исправить, добавив всего одно условие в код программы. И более этого глюка при тестах не наблюдалось.

Считаю, что трекер получился афигенный, это мой первый опыт прямой работы с GPS модулями. Зачем он нужен? Такой трекер может выполнять роль автономного спидометра или независимого одометра. Его можно разместить на велосипед, автомобиль, игрушку или квадрокоптер. Также он позволяет измерять расстояние по прямой до заданной точки, значения нулевой хранятся в энергонезависимой памяти. Запоминает максимально достигнутые значения скорости и удаления. Делает это все автономно и не зависит ни от кого кроме спутников. Ну и конечно же это часы точного времени. Мне же он нужен для измерения максимальной скорости и максимального удаления от объектов. Точно, надо еще высоту на экран добавить, чтобы замерять как высоко поднялся!

Поговорим о том, как можно уменьшить вес, проще всего это сделать, собирая трекер на платформе Arduino Pro Mini на 3.3 вольта. Тогда вам не понадобится повышающий преобразователь, вместо него будет маленький линейный стаб на 3.3 вольта, GPS модуль без проблем работает от этого напряжения, а на экране нужно будет обойти стабилизатор питания.

Ну и сразу отвечу на вопрос можно ли добавить GSM модуль и управлять трекером по SMS? Да, можно. Для этого помимо самого модуля еще потребуется добавить в код программы обработку SMS команд и это должен быть отдельный проект.

На этом сегодня, если вам понравилось это видео, то я уверен вы оцените его лайком и поделитесь ссылкой на видос со своими друзьями.

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

Спасибо за просмотр, всем удачи и до встречи в новых видео! Пока-пока!

Рубрики: Мотоспорт

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *