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


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

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

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

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

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

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

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

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

5

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

11058-01

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

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

10

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

2

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

1

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

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

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

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

 9 3 4

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

ANT-EMB-SMA

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

gps

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

77

Снаружи:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



27 комментариев на “GPS спидометр и одометр на Arduino + bluetooth трансивер”
poddubniak Дата записи: 20.12.2013 в 14:17

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

-=MindHunteR=- Дата записи: 20.12.2013 в 14:37

Помогу, чем смогу =)

skill771 Дата записи: 20.01.2014 в 13:32

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

Добрый день. Тоже встал вопрос прошивки arduino (2560), прошивкой скомпилированной с помощью CodeVisionAVR. Ранее пробовал с помощью avrdude. Шьется, но не проходит верификацию и убивается загрузчик. Хотелось бы узнать, каким образом Вы производили сеё хитрое дело? =)

-=MindHunteR=- Дата записи: 21.01.2014 в 07:52

@ skill771:

привет.

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

во вторых — я все еще могу выложить свою утилиту. через день другой — дел невпроворот.

skill771 Дата записи: 21.01.2014 в 09:46

@ -=MindHunteR=- :

Спасибо за быстрый ответ. Да, я скачал CodeVisionAVR v3.08. Там при прошивке ругается на адрес при верификации. При сравнении, в адресах с 0x1F071 по 0x1F5FF находятся разные значения. Ну и снова убивается загрузчик, прошивка при этом не работает. В настройках проекта не производили изменения начального адреса? Бутлоадер зашит родной — ардуиновский из папки ардуино с рабочим ватчдогом. В ардуино IDE шьется нормально.

P.s. В настройках своего проекта ставлю частоту 16 МГц(кварц на плате) Boot size = 4K.(как во фьюзах 2560 для загрузчика) Проект простой — моргание светодиодом раз в секунду.

Подозрения на неверные настройки CodeVisionAVR.

skill771 Дата записи: 21.01.2014 в 10:06

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

maxlada011 Дата записи: 18.09.2014 в 20:50

здравствуйте, делаю такое устройство,

меня интересует подключение дисплея,

могли бы вы подробнее рассказать

я в том деле новичок

maxlada011 Дата записи: 18.09.2014 в 21:58

я уже розобрался

maxlada011 написал:

здравствуйте, делаю такое устройство,

меня интересует подключение дисплея,

могли бы вы подробнее рассказать

я в том деле новичок

-=MindHunteR=- Дата записи: 19.09.2014 в 08:56

Рад за вас. *DANCE*

vaz Дата записи: 21.07.2015 в 04:09

Здравствуйте. Скажите пожалуйста, есть датчик спидометра 12В (ваз 2110) который передает импульсы от КПП на спидометр и тот показывает скорость и пробег. На основе этого датчика ипмульсного строятся все альтернативные спидометр-одометры. Как эти импульсы передать в контроллер чтоб тот понял что это скорость и пробег?

В программировании, электронике и arduino не понимаю ничего. Можете есть тестовая программа где можно смоделировать? Сначала написать программу, проверить ее как-то, а потом закупить детали. Спасибо!

vaz Дата записи: 21.07.2015 в 04:17

Сказали надо считать импульсы. А как их считать ничего не покупая? вдруг, не получится (беженствуемс).

-=MindHunteR=- Дата записи: 21.07.2015 в 07:38

@ vaz:

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

Знания эти можно вполне бесплатно найти в интернете — это функция вашего времени.

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

Моя программа для GPS спидометра почти никак вам не поможет. Скорее поможет этот маретиал, ввиду схожести сигнала.

vaz Дата записи: 21.07.2015 в 17:00

в общем нашел сообщества но все посылают. для чайника четкого рецепта, конструктора-КИТ по сборке нет. хотя написаны все пограммы и куча схем.

vaz Дата записи: 21.07.2015 в 17:00

www.drive2.ru/c/1724348/ Виртуальная Arduino в браузере

-=MindHunteR=- Дата записи: 21.07.2015 в 20:23

Боюсь вы не правы. Я знаю немало народу, усиленно шерстившего интернет и вскоре постигшего довольно продвинутых вещей на ардуине, и перешедших на более крутые платформы.

Инструкций для новичков навалом, для любых уровней, для массы платформ.

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

В любом случае, у меня, персонально, заняло много времени на накопление имеющихся знаний. Наверное годы... Это не моя профессиональная деятельность, потому учился, читал и пытался от случая к случаю. А народ на форумах новичков не жалует и правильно — в 99.99% случаев ответы на вопросы находятся в первых 3 строчках поиска в гугле.

tipitip433 Дата записи: 16.10.2016 в 18:47

здравствуйте. я чайник, но мне очень нужен этот девайс, у меня есть все комплектующие, но мой lcd экран имеет модуль упращённого подключения i2c, попытался сам переписать данную прошивку, но получилась фигня какая-та на экране в первой строке высветилась только буква w, а во второй строке буква n. gps молуль у меня отличаеться немного от того который используется в этом примере, у меня neo-6m,

помогите пожалусто

m.v.karmanov Дата записи: 17.10.2016 в 18:40

Вопрос а он запоминает пройденное расстояние после выключения?

И продолжает считать расстояние после включения?

-=MindHunteR=- Дата записи: 17.10.2016 в 20:10

@ m.v.karmanov:

текущая версия нет, но добавить такой функционал — 3 строки кода.

-=MindHunteR=- Дата записи: 17.10.2016 в 20:11

@ tipitip433:

как именно я могу помочь?

m.v.karmanov Дата записи: 17.10.2016 в 20:23

Думаю собрать такой и зипитать от сети автомобиля.

Так вот если подскажите что и куда дописать буду благодарен.

Еще рассматриваю вот такой вариант karman.cc/blog/archives/746

-=MindHunteR=- Дата записи: 17.10.2016 в 22:10

@ m.v.karmanov:

вам сюда www.arduino.cc/en/Reference/EEPROM

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

tipitip433 Дата записи: 19.10.2016 в 23:12

-=MindHunteR=- написал:

@ tipitip433:

как именно я могу помочь?

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

-=MindHunteR=- Дата записи: 20.10.2016 в 20:19

@ tipitip433:

вы бы попробовали для начала написать скетч, который просто пишет на экране PREVED MEDVED, чтобы научиться работать с I2C экранами.

Потом убедитеть что правильно работаете с GPS пользуясь терминалом для дебага.

А потом соберите все воедино.

Москва не сразу строилась, помните?

tipitip433 Дата записи: 20.10.2016 в 23:02

-=MindHunteR=- написал:

@ tipitip433:

вы бы попробовали для начала написать скетч, который просто пишет на экране PREVED MEDVED, чтобы научиться работать с I2C экранами.

Потом убедитеть что правильно работаете с GPS пользуясь терминалом для дебага.

А потом соберите все воедино.

Москва не сразу строилась, помните?

с экраном я работал и с таким как у вас в проэкте и с олед128*64 выводил и надписи и переменные, время, температуру и обороты мотора был уверен что всё получиться затем купил gps модуль и сподкнулся на нём никак не могу вывести на экран то что хочу, и спросить неукого, думаю проблемма элементарная но где она это вопрос хороший

-=MindHunteR=- Дата записи: 20.10.2016 в 23:26

@ tipitip433:

я так и не понял из вашего сообщения в чем проблема — в экране или в модуле навигации...

tipitip433 Дата записи: 23.10.2016 в 14:04

-=MindHunteR=- написал:

@ tipitip433:

я так и не понял из вашего сообщения в чем проблема — в экране или в модуле навигации...

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

-=MindHunteR=- Дата записи: 23.10.2016 в 19:59

@ tipitip433:

я не уверен что смогу помочь дистанционно. Делите проблему на составляющие и решайте поэтапно. Заодно и знаниями обрастете.

Комментарии:

Пожалуйста, авторизируйтесь для комментирования.

Облако меток:

  • самопал обзор поржать модернизация доработка компьютер Almera измерения гараж ремонт паяльники и пайка водянка двигатель N15 прошивка кулер Nissan Софт технологии блок питания интрумент микропроцессоры Windows чистка смартфон тюнинг помпа история бред интрукция браузер GA16DE GPS автоматика unlock рабочее место мышка программирование процессор электрогитара

  • Подняться вверх