Как я уже писал, после установки в машину бортового компьютера 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.
Теперь активно пользую девайс при путешествиях на джипах по бездорожью – удобно измерять пройденные расстояния, чтобы не сбиться с маршрута.
Ну вот пожалуй и все. Буду рад ответить на вопросы.
попробую повторить в своих условиях, на немножко другом железе…автор, если возникнут вопросы, можно просить помощи?
Помогу, чем смогу =)
“Забегая вперед скажу, что я стал часто использовать борды Arduino в своих проектах, но программы стал писать в своем любимом компиляторе CodeVisionAVR, и заливаю ее в Arduino с помощью разработанной мной утилиты, встраиваемой в интерфейс компилятора. Я напишу отдельную статью касательно этого вопроса в ближайшем будущем.”
Добрый день. Тоже встал вопрос прошивки arduino (2560), прошивкой скомпилированной с помощью CodeVisionAVR. Ранее пробовал с помощью avrdude. Шьется, но не проходит верификацию и убивается загрузчик. Хотелось бы узнать, каким образом Вы производили сеё хитрое дело? =)
@ skill771:
привет.
я начал было писать статью про свою утилиту, но обнаружил, что в 3ю версию CodeVisionAVR разработчики встроили утилиту для прошивки ардуино. Так что прежде всего рекоммендую обновить CodeVisionAVR (у них есть даже триальная версия с ограничением по размеру кода).
во вторых – я все еще могу выложить свою утилиту. через день другой – дел невпроворот.
@ -=MindHunteR=-:
Спасибо за быстрый ответ. Да, я скачал CodeVisionAVR v3.08. Там при прошивке ругается на адрес при верификации. При сравнении, в адресах с 0x1F071 по 0x1F5FF находятся разные значения. Ну и снова убивается загрузчик, прошивка при этом не работает. В настройках проекта не производили изменения начального адреса? Бутлоадер зашит родной – ардуиновский из папки ардуино с рабочим ватчдогом. В ардуино IDE шьется нормально.
P.s. В настройках своего проекта ставлю частоту 16 МГц(кварц на плате) Boot size = 4K.(как во фьюзах 2560 для загрузчика) Проект простой – моргание светодиодом раз в секунду.
Подозрения на неверные настройки CodeVisionAVR.
Нашел косяк. В настройках проекта не надо указывать бутсайз. Неправильно для себя интерпретировал =). Насколько я понимаю, это используется для написания загрузчика. Ждем статью с программой.
здравствуйте, делаю такое устройство,
меня интересует подключение дисплея,
могли бы вы подробнее рассказать
я в том деле новичок
я уже розобрался
maxlada011 написал:
Рад за вас. *DANCE*
Здравствуйте. Скажите пожалуйста, есть датчик спидометра 12В (ваз 2110) который передает импульсы от КПП на спидометр и тот показывает скорость и пробег. На основе этого датчика ипмульсного строятся все альтернативные спидометр-одометры. Как эти импульсы передать в контроллер чтоб тот понял что это скорость и пробег?
В программировании, электронике и arduino не понимаю ничего. Можете есть тестовая программа где можно смоделировать? Сначала написать программу, проверить ее как-то, а потом закупить детали. Спасибо!
Сказали надо считать импульсы. А как их считать ничего не покупая? вдруг, не получится (беженствуемс).
@ vaz:
Знаю природу сигнала можно и его, и будущую электронику смоделировать и просимулировать, например, в пакете программ Proteus. Но определенный багаж знаний вам непременно потребуется, как в электронике, так и в программировании.
Знания эти можно вполне бесплатно найти в интернете – это функция вашего времени.
Важно так-же обратить внимание, что симуляция и реальность отличаются, особенно в автомобиле, в котором и питающее и сигнальное напряжение всегда полны помех, и если не принять меры, то электроника будет непременно глючить или вообще сгорит через какое-то время. Я писал об этом здесь.
Моя программа для GPS спидометра почти никак вам не поможет. Скорее поможет этот маретиал, ввиду схожести сигнала.
в общем нашел сообщества но все посылают. для чайника четкого рецепта, конструктора-КИТ по сборке нет. хотя написаны все пограммы и куча схем.
http://www.drive2.ru/c/1724348/ Виртуальная Arduino в браузере
Боюсь вы не правы. Я знаю немало народу, усиленно шерстившего интернет и вскоре постигшего довольно продвинутых вещей на ардуине, и перешедших на более крутые платформы.
Инструкций для новичков навалом, для любых уровней, для массы платформ.
Разумеется, на английском в разы больше информации. Ну так и должно быть – вот придумают русский борд, который завоюет мировую популярность, тогда может и будет перевес в сторону русского.
В любом случае, у меня, персонально, заняло много времени на накопление имеющихся знаний. Наверное годы… Это не моя профессиональная деятельность, потому учился, читал и пытался от случая к случаю. А народ на форумах новичков не жалует и правильно – в 99.99% случаев ответы на вопросы находятся в первых 3 строчках поиска в гугле.
здравствуйте. я чайник, но мне очень нужен этот девайс, у меня есть все комплектующие, но мой lcd экран имеет модуль упращённого подключения i2c, попытался сам переписать данную прошивку, но получилась фигня какая-та на экране в первой строке высветилась только буква w, а во второй строке буква n. gps молуль у меня отличаеться немного от того который используется в этом примере, у меня neo-6m,
помогите пожалусто
Вопрос а он запоминает пройденное расстояние после выключения?
И продолжает считать расстояние после включения?
@ m.v.karmanov:
текущая версия нет, но добавить такой функционал – 3 строки кода.
@ tipitip433:
как именно я могу помочь?
Думаю собрать такой и зипитать от сети автомобиля.
Так вот если подскажите что и куда дописать буду благодарен.
Еще рассматриваю вот такой вариант http://karman.cc/blog/archives/746
@ m.v.karmanov:
вам сюда https://www.arduino.cc/en/Reference/EEPROM
+ помните, что циклы перезаписи EEPROM не бесконечны, потому нужно реализовать сохрание только перед выключением девайса, для чего может понадобиться небольшая доработка железа.
-=MindHunteR=- написал:
я уверен что скейч переделанный мной неверен, куда я могу скинуть своего «калеку» для проверки
@ tipitip433:
вы бы попробовали для начала написать скетч, который просто пишет на экране PREVED MEDVED, чтобы научиться работать с I2C экранами.
Потом убедитеть что правильно работаете с GPS пользуясь терминалом для дебага.
А потом соберите все воедино.
Москва не сразу строилась, помните?
-=MindHunteR=- написал:
с экраном я работал и с таким как у вас в проэкте и с олед128*64 выводил и надписи и переменные, время, температуру и обороты мотора был уверен что всё получиться затем купил gps модуль и сподкнулся на нём никак не могу вывести на экран то что хочу, и спросить неукого, думаю проблемма элементарная но где она это вопрос хороший
@ tipitip433:
я так и не понял из вашего сообщения в чем проблема – в экране или в модуле навигации….
-=MindHunteR=- написал:
проблемма в недостатке знаний, у меня почему то не получается вывести данные на ледэкран, мне бы ваш девайс но экран должен подключится через и2с, а это почему то не получаеться
@ tipitip433:
я не уверен что смогу помочь дистанционно. Делите проблему на составляющие и решайте поэтапно. Заодно и знаниями обрастете.
Привет. Давно искал что-то подобное для своего одометра, который хочу собрать. Но у меня олед дисплей на 128х64. Вроде бы все переделал. Но сколь я не пытаюсь, после запуска дисплей остается на вступительном лого (showSplash) и дальше не идет, как не пытался.. модуль neo6mv2 так же работает на тайнигпс , но 9600 бод.
Если есть возможность, можете проверить что не так? Скидываю скетч через обменник
https://drive.google.com/open?id=1RF22xZbpGqmyZVPmHtYWePbNDrW_DiUN
@ Dread24
привет!
Спасибо за коммент! Давай начнем с того, что попробуем запустить на данном дисплее простой демонстрационный скетч, который идет в комплекте с библиотекой, и посмотрим все ли корректно работает.
Ох! Я думал никто уже и не ответит!:)
В общем я уже что только не пробовал. На других проектах все работает. И еще пару скетчей для одометра пробовал, но дело было в другом.
Ваш скетч прям то что надо для моего одометра на вел, но вот то, что он ступорится на вступлении я вообще не понимаю. Из описания он должен сразу спрыгивать на сообщение no fix.
@ Dread24:
Чем отличаются другие проекты от этого?
А если понавставлять Serial.print’ов повсюду, и посмотреть где все дохнет?
Я просто новичок в этой сфере. Отличия были в библиотеках и модулях. Все это менять у меня просто не хватило бы мозгов, да и нужно, чтобы были задействованы кнопки. Но это не суть.
Вот оно тупо на заставке остановилось и все, где у Вас “MindHunter’s gps”. Дальше не идет. Что то считать не сможет, хотя в библиотеке все это есть, и все по логике вещей должно работать.
@ -=MindHunteR=-:
Попробую сериал сделать вместо nss
Dread24 написал:
Нет, nss это для softwareserial, чтобы изменить пины для модуля гпс на 3, 4.
Я уже месяца два пытаюсь сделать уже единое целое!:) ничего не получается.
Я не хочу сидеть дебажить твой код.
Начни с простого, просто выводить тект на дисплей, и пойми как и что работает, для чего каждая комманда нужна и какие аргументы для нее требуются.
Я не прошу дебажить,а помощь. Ок, последний вопрос:
if (millis() > (time + time_over))
{
time = millis();
draw_screen_cont++;
if (draw_screen_cont >= draw_screen)
{
draw_screen_cont = 0;
send_data_to_lcd();
}
}
В чем логика этой функции?
Нашел косяк. Надо было добавить display.display
Dread24 написал:
Это довольно дебильный способ обновлять данные на экране каждые 5 * 100мс = 500мс = 0.5с
Dread24 написал:
Ну вот и славно.