Спидометр на ардуино – Спидометр на Arduino | AlexGyver Technologies

GPS спидометр и одометр на Arduino + bluetooth трансивер

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.

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

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

mindhunterz.livejournal.com

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

Страница проекта: 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 команд и это должен быть отдельный проект.

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

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

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

voltnik.ru

Велосипедный спидометр на Arduino

Хотите отследить скорость на велосипедной прогулке? Тогда эта инструкция для вас!

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

Необходимые элементы

  • 1 плата Arduino
  • 1 геркон
  • 1 резистор на 10 кОм, 1/4 ватта
  • 1 Батарея на 9 вольт
  • 1 Провод
  • 1 Макетная плата для распайки
  • 1 LCD дисплей
  • 2 Переключателя
  • Дополнительные материалы:
  • Фанера, винты и т.п.
  • Программа для Arduino Arduino IDE

Электросхема

Электросхема проекта приведена ниже.

Она состоит из трех переключателей:

1. Один подключен к питанию 9 вольт

Установка Arduino и обвязки в бокс

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

Велосипед со спидометром на дороге!

Не забывайте про правила поведения велосипедистов на дороге! Несмотря на ваш прекрасный Arduino спидометр, следите за транспортом и людьми!


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

offlink.ru

GPS ТРЕКЕР, СПИДОМЕТР, ОДОМЕТР И СПУТНИКОВЫЕ ЧАСЫ. ПРОЕКТ НА АРДУИНО. Спидометр из ардуино


GPS спидометр и одометр на Arduino + bluetooth трансивер

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 вольт, девайс перейдет в режим отображения напряжения на экране. При этом перейти на другой экран станет невозможно.

В этот момент крайне рекомендуется выключит

motorsmarine.ru

Функциональный недорогой GPS-спидометр для автомобиля на Ардуино

Спидометр моей рабочей машины стал барахлить: временами значение скорости падает на ноль и после некоторого времени он снова начинает работать.

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

Эта проблема была переосмыслена мной в неплохую возможность создать новый девайс — GPS-спидометр. Конечно же, идеальным решением было бы просто отвезти машину в сервис, или использовать навигатор, или пользоваться программой на смартфоне с нужными функциями, но в этом нет никакого веселья!

Шаг 1: Компоненты

Микроконтроллер

Я выбрал DFRobot Dreamer Nano V4.1, ведь у него есть порт USB для питания, а также совместимая распиновка.

GPS

Я использовал UBX-G7020-KT, он поставляется со встроенной антенной. Также можно повысить скорость его обновления до 10Hz (для данного проекта эта функция будет очень полезной)

Дисплей

Я хотел подобрать хороший дисплей, но при этом не раздувать бюджет, и мой выбор пал на OLED 2828 Display Module.

Питание

Питание для девайса будет подаваться от прикуривателя автомобиля.

Футляр

Для этого проекта я создал дизайн для 3D принтера.

Файлы

Шаг 2: Соедините компоненты

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

Я забыл сделать фотографии процесса сборки, так что просто опишу на словах, что всё было собрано на макетной плате — на одной стороне поместились светодиоды, а на другой — микроконтроллер и все соединения. Чтобы сборка проходила легче, оставьте светодиоды на потом, так как некоторые соединения будут проходить по их задней части.

Шаг 3: Код

Чтобы код работал правильно, вам нужно будет установить эти библиотеки в папку библиотек Ардуино.

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

Еще одной особенностью моего джипиэс спидометра стала светодиодная полоса. Я настроил её на максимальную скорость в 190 км/час. Если ваша максимальная скорость вождения превышает мою, то просто поменяйте лимит в функции «map» на тот, который подходит вам.

Файлы

Шаг 4: Заключение

Я новичок в деле 3D-печати, поэтому мои заготовки не слишком хороши. Опытный человек сможет легко спроектировать более интересный корпус. Также, я разместил антенну на задней стенке корпуса и хотел бы в следующей версии спидометра убрать её. Отображение направления движения работает не слишком хорошо, но это мелочь — в будущем я хочу заменить его на более полезные данные, например время прибытия на место назначения.

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

masterclub.online

Отправить ответ

avatar
  Подписаться  
Уведомление о