Спидометр gps своими руками
Спидометры используются для измерения скорости движения транспортного средства. Ранее на нашем сайте мы уже рассматривали создание аналогового спидометра на основе платы Arduino и цифрового спидометра на Arduino и смартфоне на Android. В аналоговом спидометре для измерения скорости мы использовали инфракрасный датчик, а в цифровом – датчик Холла. В этой же статье для измерения скорости мы будем использовать технологию GPS. В большинстве случаев GPS спидометры более точно измеряют скорость чем обычные спидометры. Также технология GPS в настоящее время широко используется в смартфонах и транспортных средствах для навигации и предупреждения о различных дорожных ситуациях.
В данной статье мы рассмотрим создание GPS спидометра на основе платы Arduino, GPS модуля NEO6M и OLED дисплея.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- GPS-модуль GY-NEO6M (купить на AliExpress).
- OLED дисплей с интерфейсом I2C и диагональю экрана 1.3 дюйма (1.3 inch I2C OLED display) (купить на AliExpress - для данного проекта выбирайте вариант дисплея с 4 контактами).
- Макетная плата.
- Соединительные провода.
GPS модуль NEO6M
NEO-6M является популярным GPS приемником со встроенной керамической антенной, которая обеспечивает хороший прием сигнала с GPS спутников. Данный приемник способен отслеживать до 22 спутников и обеспечивает определение местоположения в любой точке земного шара. Модуль имеет аккумулятор для автономной подпитки (backup battery), что позволяет ему сохранять данные когда основное питание схемы отключено.
Ядром модуля является GPS чип NEO-6M от компании u-blox. Он может отслеживать до 22 спутников по 50 каналам и обладает чрезвычайно хорошей чувствительностью (-161 dBm). Модуль поддерживает скорости передачи данных 4800-230400 бод. По умолчанию он настроен на скорость 9600 бод.
Технические характеристики модуля:
- рабочее напряжение: 2.7-3.6V DC (постоянного тока);
- рабочий ток: 67 mA;
- бодовая скорость передачи: 4800-230400 (9600 по умолчанию);
- протокол связи: NEMA;
- интерфейс: UART;
- внешняя антенна и встроенная энергонезависимая память (EEPROM).
Назначение контактов (распиновка) GPS модуля NEO6M:
• VCC : входное питающее напряжение;
• GND : общий контакт (земля);
• RX, TX : контакты для UART (последовательной) связи с микроконтроллером.
На нашем сайте мы уже достаточно часто рассматривали проекты с использованием GPS модулей, список данных проектов можно посмотреть по следующей ссылке.
OLED дисплей
Термин OLED расшифровывается как “Organic Light emitting diode” (органический светоизлучающий диод) и в используемом нами OLED дисплее используется та же самая технология, что и в привычных нам современных телевизорах, только разрешение экрана нашего дисплея существенно меньше чем у телевизоров. С подобными дисплеями проекты на Arduino сразу начинают "сверкать новыми красками" поскольку они обеспечивают значительно более презентабельную картинку чем обычные монохромные ЖК дисплеи. В нашем проекте мы будем использовать монохромный OLED дисплей SH1106 1.28” с 4-мя контактами, подключаемый по интерфейсу I2C.
Технические характеристики дисплея:
- микросхема драйвера: SH1106;
- входное напряжение: 3.3V-5V DC;
- разрешение: 128x64;
- интерфейс: I2C;
- потребление тока: 8 mA;
- цвет пикселов: синий (Blue);
- угол обзора: >160 градусов.
Назначение контактов (распиновка) дисплея:
VCC : питающее напряжение 3.3-5V DC;
GND : общий провод (земля);
SCL : контакт синхронизации интерфейса I2C;
SDA : контакт передачи данных интерфейса I2C.
Сообществом Arduino разработано уже достаточно много библиотек для работы с OLED дисплеями, нам среди них понравилась библиотека Adafruit_SH1106.h – она проста в использовании и позволяет работать с графикой.
Подобный дисплей мы ранее уже использовали в следующих проектах:
Схема проекта
Схема GPS спидометра на Arduino и OLED дисплее представлена на следующем рисунке.
Внешний вид собранной на макетной плате конструкции проекта выглядит следующим образом:
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе необходимо подключить все используемые библиотеки. В нашем проекте мы будем использовать библиотеку TinyGPS++.h для считывания GPS координат с GPS модуля и библиотеку Adafruit_SH1106.h для работы с OLED дисплеем.
В этой статье мы рассмотрим создание спидометра на основе платы Arduino, способного измерять скорость движения велосипеда или любого другого транспортного средства и передавать значение этой скорости с помощью технологии Bluetooth на Android приложение на смартфоне. Приложение на Android мы разработали с использованием программной среды Processing. Устройство питается от литиевой батарейки (аккумулятора) 18650, поэтому легко устанавливается и транспортируется на любом движущемся средстве. Также в качестве бонуса в данное мобильное приложение мы добавили функцию зарядки мобильного телефона. Поэтому данное устройство также можно использовать как внешний аккумулятор (power bank) для вашего мобильного телефона во время движения транспортного средства поскольку 18650 имеет высокую плотность заряда и его можно легко заряжать и разряжать.
В статье вы найдете готовый APK файл для мобильного приложения на Android если вам неинтересно заниматься этими вопросами и вы хотите сосредоточиться только на той части нашего проекта, которая относится к работе с платой Arduino. Но также будет представлен и исходный код этого приложения который вы при желании можете доработать и подстроить под себя. В конце статьи приведено видео, поясняющее все описанные в статье процессы.
Необходимые компоненты
Аппаратное обеспечение
- Плата Arduino Pro Mini (5V 16MHz) (купить на AliExpress).
- FTDI плата (также для программирования Arduino Pro Mini можно использовать плату Arduino UNO).
- Повышающий конвертер с 3V до 5V (DC-DC) с выходом для USB зарядки.
- Модуль заряда литиевой батареи (аккумулятора) TP4056 (купить на AliExpress).
- Bluetooth модуль (HC-05/HC-06) (купить на AliExpress).
- Датчик Холла (Hall effect sensor) US1881/04E (купить на AliExpress).
- Литиевая батарея (аккумулятор) 18650 (купить на AliExpress).
- Небольшой кусок магнита.
- Перфорированная плата (Perf Board).
- Соединительные колодки (папа и мама).
- Набор для пайки.
- Небольшая закрытая коробка чтобы разместить в ней наше устройство
Программное обеспечение
Arduino IDE
Processing IDE с android ADK (только если вы самостоятельно хотите разрабатывать мобильное приложение для этого проекта)
Windows/Mac PC
Мобильный телефон (смартфон) на Android
Принцип измерения скорости с использованием датчика Холла и платы Arduino
Измерять скорость движущегося транспортного средства с помощью платы Arduino можно различными способами, однако использование датчика Холла является самым простым и экономным способом сделать это. Датчик Холла – это устройство, способное определять полярность магнита. Если один из концов магнита поместить рядом с датчиком Холла, то датчик изменит свое состояние. Существует много различных исполнений этого датчика, но при его покупке помните о том, что для нашего проекта нужен цифровой датчик Холла.
Для работы нашего устройства необходимо прикрепить небольшой кусок магнита на колесо нашего транспортного средства. При этом всегда когда магнит будет пересекать (находиться рядом) датчик Холла, датчик будет обнаруживать это и передавать соответствующую информацию на плату Arduino.
Каждый раз, когда рядом с датчиком Холла будет обнаруживаться магнит будет генерироваться прерывание в плате Arduino. В нашем проекте мы будем использовать непрерывный таймер на основе функции millis() и вычислять время необходимое для совершения колесом двух полных оборотов (для минимизации ошибки) с помощью следующей формулы:
Timetaken = millis() – pevtime;
Поскольку мы теперь знаем это время мы можем рассчитать число оборотов в минуту (rpm, rotations/revolutions per minute) по следующей формуле:
rpm = (1000/timetaken) * 60;
где 1000/timetaken – это число оборотов в секунду (rps, Revolutions per second), мы его умножаем на 60 чтобы конвертировать число оборотов в секунду в число оборотов в минуту (rpm).
После определения числа оборотов в минуту и зная радиус колеса мы можем рассчитать скорость транспортного средства по следующей формуле:
v= radius_of_wheel * rpm * 0.37699;
После расчета скорости Arduino передает ее значение к нам на смартфон при помощи Bluetooth модуля.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как можно видеть, схема состоит из двух частей – основная плата, которая содержит все основные компоненты, и дополнительная плата, которая содержит датчик Холла и резистор и монтируется рядом с колесом. Сначала давайте изучим основную плату.
Когда все соединения на ней сделаны ее можно протестировать с использованием литиевой батареи (аккумулятора) 18650. По своей сущности литиевые батареи в некоторой степени взрывоопасны, поэтому их следует устанавливать, соблюдая меры предосторожности. По этой причине мы и используем в нашем проекте модуль заряда литиевых аккумуляторов TP4056, который обеспечивает защиту при заряде и разряде аккумулятора, а также защиту от смены полярности. Поэтому теперь наш аккумулятор можно будет без проблем заряжать с использованием обычной micro USB зарядки и безопасно разряжать. Некоторые важные характеристики модуля TP4056 приведены в следующей таблице.
Параметр | Значение (на одну ячейку) |
Under Voltage cut-off | 2.4V |
Over voltage Cut-off | 4.2V |
Ток заряда | 1A |
Защита | от превышения напряжения и смены полярности |
Микросхемы | TP4056 (charger IC) и DW01 Protection IC |
Светодиодные индикаторы | красный - идет заряд, зеленый - зарядка окончена |
Теперь займемся платой с датчиком Холла, которая будет содержать всего два компонента – сам датчик Холла и резистор на 10 кОм. Соединения на ней показаны на схеме устройства, приведенной выше. После подключения к ней соединительных проводов мы должны получить примерный вид устройства, показанный на следующем рисунке:
Следующий ключевой шаг в сборке нашего проекта – это соединение аккумулятора 18650 к контактам B+ и B- модуля TP4056 с использованием провода. Поскольку литиевые аккумуляторы взрывоопасны, то крайне не рекомендуется использовать здесь паяное соединение. Хотя ряд радиолюбителей все же делают это, помните о том, что в этом случае вы подвергаете ваше устройство риску повреждения. Простой способ преодолеть это – использовать магниты как показано на следующем рисунке.
Просто припаяйте провод к небольшому куску магнита и затем прикрепите эти магниты к выводам аккумулятора как показано на рисунке – они будут держаться очень хорошо. Но также можно дополнительно использовать какую-нибудь ленту для укрепления этих соединений, то есть фиксации позиции магнитов.
Программирование Arduino
Программа для этого проекта крайне проста. Нам всего лишь будет нужно рассчитывать скорость вращения колеса и передавать ее на смартфон с помощью технологии Bluetooth. Полный текст программы с необходимыми комментариями приведен в конце статьи.
Каждый раз когда датчик Холла обнаруживает вблизи себя магнит, он генерирует прерывание. Функция magnet_detect() будет вызываться для обработки этого прерывания. В этой функции производится расчет числа оборотов колеса в минуту.
Когда число оборотов колеса в минуту известно в функции loop () можно вычислить скорость движения транспортного средства.
Мобильное приложение на Android для работы спидометра
Если вы не хотите писать собственное Android приложение для работы спидометра, то вы можете скачать и установить уже готовое приложение. Для этого необходимо выполнить следующие шаги:
- Скачайте APK file приложения по следующей ссылке - Android Application for Speedometer. Работает для версии Android 4.4.2 и выше. Извлеките APK файл из zip файла.
- Передайте этот .Apk файл с компьютера на ваш смартфон.
- Разрешите установку приложения из неизвестного источника в настройках вашего смартфона.
- Установите приложение.
Если установка приложения прошла успешно, то вы на экране своего смартфона увидите установленное приложение под именем “Processing_code” как показано на следующем рисунке:
Разработка своего собственного Android приложения для работы спидометра
Данная программа для Android устанавливает соединение с Bluetooth модулем, подключенном к плате Arduino и затем принимает передаваемые платой Arduino значения скорости транспортного средства. Программа рисует небольшой график скорости. Но если вам не нравится наш интерфейс приложения, то вы можете кастомизировать его под собственные нужды используя его скачанный по выше приведенной ссылке исходный код.
Также можете посмотреть другие проекты на нашем сайте, использующие программы, написанные в программной среде Processing:
- игра в Ping Pong с помощью Arduino;
- радар на Arduino, управляемый с помощью мобильного приложения.
Установка спидометра на транспортное средство
В нашем проекте мы установили этот спидометр на велосипед, на наш взгляд получилось весьма неплохо. Далее представлены решения каким образом мы все это смонтировали и разместили на велосипеде, но вы можете сделать этот шаг на ваше усмотрение, с использованием имеющихся у вас средств и материалов. Единственное, о чем нужно побеспокоиться – чтобы магнит был надежно прикреплен к ободу колеса, а датчик Холла был размещен как можно ближе к магниту чтобы он срабатывал всегда, когда магнит будет пересекать его.
Мы использовали 3D принтер для изготовления всех необходимых коробочек и креплений, поэтому мы не были ограничены в дизайне этих вещей. Если у вас нет доступа к 3D принтеру пропустите эту часть статьи и используйте свою собственную фантазию для закрепления спидометра на вашем транспортном средстве.
Если у вас есть доступ к 3D принтеру и вы хотите использовать наши файлы для работы 3D принтера, то убедитесь что размеры вашей платы примерно такие же, как и у нас на приведенном рисунке.
Полный комплект файлов дизайна и STL файлов для 3D печати можно скачать по следующей ссылке. Если размеры вашей платы совпадают с нашими то вы можете использовать скачанные STL файлы для печати корпусов устройства. Если же размеры не совпадают, то вы можете самостоятельно их подкорректировать, используя скачанные файлы.
Сначала напечатайте на 3D принтере корпус для нашей вспомогательной платы, содержащей датчик Холла и резистор, и разместите их на вашем транспортном средстве как показано на следующих рисунках.
Перед печатью корпуса для основной платы желательно смоделировать как все это будет выглядеть чтобы тщательно подогнать все размеры. Вид этой модели показан на следующем рисунке.
Теперь можно приступать к дизайну корпуса для нашей основной платы. Мы разбили дизайн этого корпуса на два файла, на одной части будет смонтирована вся электроника, а вторая будет неподвижно закреплена на велосипеде с помощью гаек и болтов. Эти две части в любой момент можно будет легко соединять и разъединять. После размещения в корпусе электроники мы получим следующий вид нашего устройства:
Как вы можете видеть, в передней части корпуса имеются два отверстия. Одно будет использоваться для вывода USB, через который мы будем заряжать наш мобильный телефон. А второе будет использоваться для micro USB, через которое мы сможем заряжать наш литиевый аккумулятор.
После этого печатаем вторую часть корпуса для главной платы и проверяем насколько хорошо они стыкуются друг с другом.
Если вы удовлетворены качеством стыковки этих двух частей, то вы можете установить неподвижную часть корпуса на велосипед.
Теперь подсоединяем аккумулятор к нашему устройству. Желательно замотать его в герметичную ленту чтобы обеспечить целостность соединений.
Теперь наше устройство готово к окончательному монтажу. Просто соедините модуль датчика Холла с основной платой и устройство будет готово к работе.
Исходный код программы
Если ваша литиевая батарея заряжена, то можете включить устройство с помощью переключателя, показанного на рисунках, и запустить Android приложение. Если все нормально, то вы должны увидеть на экране смартфона картинку, показанную на следующем рисунке. Перед тем как запускать приложение удостоверьтесь в наличии связи между Bluetooth модулем и вашим смартфоном.
Теперь немного проведите ваш велосипед и вы увидите как спидометр показывает вашу текущую скорость. Вы также можете заряжать свой мобильный телефон во время движения используя обычный кабель для зарядки телефона. После того как вы закончили поездку вы можете снять коробку с устройством с велосипеда и зарядить находящийся в ней литиевый аккумулятор используя зарядное устройство от мобильного телефона.
То есть с помощью созданного устройства вы не только сможете измерять скорость вашего транспортного средства, но и одновременно с этим заряжать от него ваш мобильный телефон.
Если ты хорошо водишь, то это не вызывает проблем. Но если ты новичок, то постоянно должен смотреть на спидометр. Всё нормально, если ты придерживаешься примерной нужной скорости, но что делать, если тебе нужно понизить её до значений, допущенных на данном участке дороги, а твой спидометр неожиданно падает на ноль?
Эта проблема была переосмыслена мной в неплохую возможность создать новый девайс — GPS-спидометр. Конечно же, идеальным решением было бы просто отвезти машину в сервис, или использовать навигатор, или пользоваться программой на смартфоне с нужными функциями, но в этом нет никакого веселья!
Шаг 1: Компоненты
Микроконтроллер
Я выбрал DFRobot Dreamer Nano V4.1, ведь у него есть порт USB для питания, а также совместимая распиновка.
Я использовал UBX-G7020-KT, он поставляется со встроенной антенной. Также можно повысить скорость его обновления до 10Hz (для данного проекта эта функция будет очень полезной)
Дисплей
Я хотел подобрать хороший дисплей, но при этом не раздувать бюджет, и мой выбор пал на OLED 2828 Display Module.
Питание
Питание для девайса будет подаваться от прикуривателя автомобиля.
Футляр
Для этого проекта я создал дизайн для 3D принтера.
Шаг 2: Соедините компоненты
Дизайн с использованием светодиодов я придумал позже, так что на приложенной схеме они отсутствуют, но в процессе сборки я добавил 10 светодиодов (7 зеленых и 3 красных).
Я забыл сделать фотографии процесса сборки, так что просто опишу на словах, что всё было собрано на макетной плате — на одной стороне поместились светодиоды, а на другой — микроконтроллер и все соединения. Чтобы сборка проходила легче, оставьте светодиоды на потом, так как некоторые соединения будут проходить по их задней части.
Шаг 3: Код
Чтобы код работал правильно, вам нужно будет установить эти библиотеки в папку библиотек Ардуино.
Код отправляет на экран информацию о скорости, направлении, числе спутников, широте и долготе. При желании, можно отобразить на дисплее гораздо больше информации: время, дату, расстояние до нужной точки и т.д. Проверьте полную версию библиотеки TinyGps++, чтобы узнать о всех её возможностях.
Шаг 4: Заключение
Я новичок в деле 3D-печати, поэтому мои заготовки не слишком хороши. Опытный человек сможет легко спроектировать более интересный корпус. Также, я разместил антенну на задней стенке корпуса и хотел бы в следующей версии спидометра убрать её. Отображение направления движения работает не слишком хорошо, но это мелочь — в будущем я хочу заменить его на более полезные данные, например время прибытия на место назначения.
В целом же у меня получился хороший функционирующий GPS датчик скорости, который можно использовать не только в машине, а, например, пристроить его на велосипед.
Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.
У собранного своими руками электронного спидометра будет три режима:
- Спидометр (определение скорости) и одометр (пройденная дистанция)
- Задача 1 – проехать 32 км (20 миль)
- Задача 2 – достичь скорости 30 км\ч
Спидометр собран на Ардуино, так что нет предела вашему воображению.
Шаг 1: Как всё работает
Принцип работы проекта прост, но для сборки его нужно понимать. В самом простом понимании, он состоит из Геркона или магнитного выключателя, установленного на раму велосипеда и еще одного магнита, установленного на спицу колеса.
Так как колесо вращается, то магнит активизирует выключатель при каждом обороте. Сигнал поступает на Ардуино, который считает количество оборотов и по ним определяет покрытую дистанцию (нужно будет сначала указать диаметр вашего колеса). Также Ардуино следит за временем и вычисляет скорость. Данные выводятся на дисплей, где они отображаются в милях в час (или в километрах, если доработать формулу).
Шаг 2: Необходимые материалы
Проект недорогой и может обойтись вам в 300-700 рублей. Сборка потребует от вас некоторые умения в пайке.
Материалы для сборки:
- Плата Ардуино – если вы возьмёте Ардуино Про Мини, то для программирования вам также понадобятся Ардуино Уно или адаптер usb-ttl (как программировать Ардуино Про Мини через Ардуино Уно) или используйте Ардуино Микро или Ардуино Уно.
- Дисплей Ардуино 16×2
- 3.7805 voltage regulator (increases the control over the contrast no major difference -optional)
- 2x выключателя для задней подсветки (опционально)
- Резистор на 220 Ом
- Потенциометр на 10k Ом
- Джамперы мамы и папы, если вы хотите, чтобы Геркон был съемным
- Геркон
- Провода
- Мгновенный переключатель, чтобы менять режимы
- Конденсатор 0.1uf чтобы уменьшить дибаунс кнопки
- Резистор 10k Ом
Список необходимого инструмента:
- Паяльник
- Припой
- Корпус
- Что-то наподобие дремеля, чтобы прорезать в корпусе отверстия для установки электроники и дисплея
- Горячий клей или что-то подобное для закрепления компонентов на местах.
Шаг 3: Код
Перед тем, как мы перейдём к электронике, будет неплохо загрузить код, чтобы вы не испытывали конфуз, метаясь между неправильно подключенными проводами. Загрузите код на Ардуино, перед этим не забыв указать диаметр колеса вашего велосипеда.
Шаг 4: Электроника
Схема соединения компонентов приложена выше, но я также напишу её отдельно.
- 1 — GND
- 2 VCC
- 3 VIPER PIN на потенциометре (концы на vcc и gnd, а центр на пин 3 дисплея)
- 4 13
- 5 gnd
- 6 12
- 7 —
- 8 —
- 9 —
- 10 —
- 11 11
- 12 10
- 13 9
- 14 8
- 15 VCC
- 16 GND
- Резистор на 220 Ом соединяем между пином 2 Ардуино и землёй
- Мгновенный переключатель соединяется с пином 2 и vcc
- Конденсатор на 0.1 uf помещаем между двумя клемами выключателя, чтобы уменьшить дибаунс
- Геркон на vcc и A0
- Резистор между A0 и gnd
После соединения всех компонентов можно запитать девайс и проверить, что всё работает.
Шаг 5: Корпус
Корпус можно сделать из пластика или дерева, он должен быть прочным и в нём должно быть достаточно пространства.
После установки переключателей, экрана, кнопки и хедеров проверьте девайс на работоспособность. Постарайтесь сделать устройство водонепроницаемым, ведь оно окажется в самых худших для работы условиях.
Шаг 6: Тестирование и устранение неполадок
Запитайте устройство от батарейки 9V и проверьте все три режима. Поднесите магнит близко к Геркону и скорость с дистанцией должны начать увеличиваться.
Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.
Как я уже писал, после установки в машину бортового компьютера 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.
Ну и наконец – антенна, первая, что попалась под руку:
Все вышеназванные детали были соединены вот таким образом (надеюсь, я не ошибся – девайс строился на лету, так что схему я рисовал по памяти):
В итоге из рассыпухи break-up бордов получилась вот такая лапша:
После того, как девайс был готов, была написана прошивка, последнюю версию которой можно сказать здесь.
Кратенько о прошивке.
Как только это произойдет, они тут же высветятся на экране, вместе с текущей скоростью и азимутом движения.
Левой кнопкой можно менять режим отображения данных на экране. Возможности:
Длительным нажатием на правую кнопку можно обнулить одометр.
Девайс постоянно мониторит напряжение батареи, и как только оно упадет ниже 3.2 вольт, девайс перейдет в режим отображения напряжения на экране. При этом перейти на другой экран станет невозможно.
Подсчет пройденного расстояния производится по методу Great Circle distance calculation – HAVERSINE. В силу специфики гражданского GPS, измерения пробега получаются наиболее точными при движении по трассе. Хотя с хорошей антенной и в городе точность получается довольно точными. При контрольной проверке по карте, погрешность составила пару сотен метров на 50 километров пути.
Передача данных по Bluetooth осуществляется параллельно основной работе девайса, и может быть полезна, к примеру, пользователям смартфонов на Android. Точность и чувствительность девайса в разы лучше оных на встроенном в смартфон GPS модуле, и потому, при помощи бесплатной программы Bluetooth GPS можно заставить все остальные программы, пользующиеся GPS для работы использовать данные приходящие по Bluetooth, вместо данных со встроенной антенны.
Кроме того, вместо телефона к Bluetooth можно подключить компьютер и пользоваться им в качестве инструмента для записи и анализа маршрута, в том числе в реальном времени.
После окончательной сборки и проверка девайса, я смог, наконец, с большой точностью откалибровать свой Multitronics.
Теперь активно пользую девайс при путешествиях на джипах по бездорожью – удобно измерять пройденные расстояния, чтобы не сбиться с маршрута.
Читайте также: