Samou4ka » 🎟 Микроконтроллеры AVR » Велосипедный спидометр на микроконтроллере AVR

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

Недавно нашел у себя в архивах программу спидометра на микроконтроллере. Года два назад ваял ее. И вот решил без особого разбора подробностей выставить ее. Если кто захочет думаю разберется без труда (тем более есть комментарии, а меню описал раньше), а если нет — отвечу на вопросыsmile. Программа написана на CodeVisionAVR. Пересматривая ее недавно, обнаружил некоторые вещи, которые хочу изменить, поэтому буду ее переделывать и писать теперь уже в WinAVR. Да, еще, в железе данное устройство пока не испытывалось, поэтому в случае чего могут обнаружиться какие-то глюки (см. обновление внизу). Если кто, испробует это устройство в железе, просьба написать о результатах. Экран спидометра у меня выглядит вот так

При желании внешний вид можно немного изменять. Схема довольно простая

Обвязка по питанию не показана.

Для отладки модели в качестве датчика сигналов использовал генератор, с которого и подавал импульсы на входы МК INT1 и ICP1. С частотой генератора можно поэкспериментировать, у меня было примерно 1-10Гц. Частота МК от внутреннего RC — 2МГц.

Как же все это работает:

  • Датчиком может служить геркон или любое другое устройство, которое выдает импульс при наступлении нужного события. Например, магнит на колесе проходит рядом с датчиком.
  • Спидометр нужно откалибровать. Для этого заходим в меню и выбираем дистанцию на которой мы хотим провести калибровку — 1000 или 100м (сразу говорю — ручной не работает). В данном случае будет работать вход INT1. Подсчитав количество импульсов на 100м или 1000м мы определим длину колеса (калибровочный коэффициент), который и будем дальше использовать для подсчета скорости и расстояния. Этот коэффициент сохраняется в EEPROM, поэтому при следующем включении калибровать заново не придется.
  • Чтобы измерить скорость сигнал подается на вход микроконтроллера ICP1, с помощью которого мы измеряем время между двумя импульсами, т.е. время за которое мы проедим наш калибровочный коэффициентsmile. Теперь мы можем посчитать скорость и вывести ее на экран.
  • Настройки. В этом спидометре есть различные настройки по отображению информации:
  1. Скорость может отображаться в м/с или в км/ч. Точность в м/с — 0.1м/с. Точность в км/ч — 0.1км/ч. Минимальная скорость не знаю какая. Единственное, что могу сказать, если колесо делает один оборот больше двух секунд, тогда прибор покажет нулевую скорость.
  2. Дистанция есть общая, есть от точки. Отображается в км. Можем отображать на экране только одну из этих дистанций или и ту, и другую вместе. Точность — 10м.
  3. Общая дистанция сохраняется в EEPROM. Сбрасывается, если наездите 40000км.
  4. Сброс общей дистанции и от заданной точки. При сбросе общей дистанции прибор требует подтверждения, чтобы не удалить по ошибке.
  5. Секундомер. В приборе есть секундомер, который также мы можем отображать или нет. Запускается секундомер кнопкой Right, останавливается кнопкой Left, продолжение счета — Right, сброс — повторное нажатие Left.
  6. Все настройки сохраняются и после выключения.

Вот наверное и все, что нужно чтобы испытать устройство. В конце статьи приведена схема в Proteus’e, файл с программой и hex файл. Посмотрите, поклацайте менюшку, установите нужные настройки. В примере прибор откалиброван чисто условно.

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

Обновлено 18.03.2011 Заметка о велосипедном спидометре

Как вам статья? Ваша реакция:
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
Расскажите друзьям:
Оцените статью:

14 комментариев

  • Здравствуйте уважаемый Dmitry Вот на днях собрал этот спидометр, спаял схему, прошил МК. все сразу заработало. Пощелкал по менюшке, установил нужные настройки. И вот что заметил что секундомер работает не по секундам, а медленнее, как это можно исправить? А еще конечно хотелось бы чтобы были еще часы. Сам большого опыта с програмированием не имею. Буду ждать обновления прошивки. Еще хотелось бы знать как подключить датчик холла к нему и какой?

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

  • Берете количество оборотов, которые посчитал счетчик, например, за одну минуту и делите на 60 сек. В результате получите обороты в секунду))) В этой программе нужно сделать таймер на какое нибудь заданное время и в обработчике брать значение счетчика и этого времени и подсчитывать)

  • Как я понял там все дело в коэфициенте 16000.Если нет ,то поправьте.Было бы замечательно отдельную статью про измеритель оборотов.Что скажешь,автор???)))

  • я бы с удовольствием отдельную статью, но сейчас со временем большие проблемы((

  • Для калибровке нужно задать в меню переменную на диаметр колеса или один импульс, при 26 дюймах оборот колеса равен расстоянию ≈ 207.47 см. о тогда не важно на каком радиусе стоит магнит и датчик. Также поскольку очень много свободных портов то можно было бы сделать включение габаритов при наступлении сумерек, управление яркостью передней фары.

  • Подскажите пож. Если в Proteus ставить ваш HEX то моделирование идет нормально! А вот если компилировать заново из исходника в Codevision 2.04.4, получается лабуда (

  • Какой то здесь косяк — ножка (PD3/INT1) подсаживает входящие импульсы в «0». То ли её надо совсем отключить, то ли подключить через резистор 1-10к. Но как есть совсем не годится, только контролер от импульсов греется и питание поедается !!!

Оставить комментарий