РадиоКот :: Графический велоспидометр
Например TDA7294

РадиоКот >Конкурсы >пкпч2014 >

Теги статьи: Добавить тег

Графический велоспидометр

Автор: С_а_н_ы_ч
Опубликовано 04.09.2014
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2014"

Здравствуйте уважаемый Радиокот, постоянные Радиокоты, гости Радиокота и все Радиолюбители! Хочу присоединиться к поздравлениям, пожелать Коту здоровья и процветания, и поделиться своим опытом разработки велоспидометра, в какой то степени даже «мини велокомпьютера». Проект делался для велосипеда сына, который в цифрах скорость оценивать еще не умеет, а вот за отклоняющейся "стрелкой" при разгоне ему наблюдать куда интереснее. Хочу сразу предупредить, паяльщик и программист из меня начинающий, учился только по статьям в интернете, поэтому если где-то что-то криво припаяно или написано прошу помидорами не забрасывать, а вот конструктивная критика и советы приветствуются! Все разрабатывалось мною с нуля, ничего ниоткуда не копировалось (за исключением шрифтов, которые были откуда то взяты, переделаны и модернизированы под этот проект), поэтому код может и не идеальный, но вроде оптимизировал как мог. Итак, погнали:

     Графический велоспидометр с часами и одометром на микро контроллере Atmega 16а с дисплеем Nokia5110.

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

Во вторых для работы с этим дисплеем неплохо иметь CodeVisionAVR версии как минимум 2.05.3. Именно с этой версии есть библиотека для дисплея 5110 с контроллером PCD8544. К сожалению я этого не знал и потратил очень много времени на подбор сторонних библиотек и попыток работать с ним вообще без библиотек. В этой библиотеке есть отличные примеры с помощью которых не составит труда с ним разобраться.

Теперь о велосипеде. Диаметр колеса велосипеда под который я делал этот «прибор» составляет 420мм. Длина пройденного пути за один оборот колеса = πD=3,14*0,42=1,32м. Один оборот колеса в секунду будет соответствовать скорости 1,32 м/с = 1,32*0,001*3600=4,75км/ч. Т.е. примерно 5 км/ч. Погрешность 0,25км/ч с каждых 5 км/ч думаю не страшна, ведь даже автомобильные спидометры слегка завышают показания скорости. Взяв 5 неодимовых магнитов (заказаны с Китая) лепим их на обод колеса через равное расстояние, предварительно обезжирив и смазав суперклеем для пущей надежности (см. фото ниже). На «вилку» напротив магнитов необходимо закрепить датчик Холла, подобрав расстояние между датчиком и магнитом достаточное для срабатывания (ну подобрать это можно позже при отладке готового устройства). Я использовал датчик A3144LU, но думаю можно любой другой не аналоговый, крепил с помощью кронштейна из алюминиевого листа и изоленты (см фото ниже). Данный датчик надежно срабатывает с расстояния 5-7 мм от магнита диаметром 10мм, толщиной 1мм.

     Принцип работы самого устройства.

Схема устройства показана на рисунке.

Мозгом, как упоминалось выше, является микроконтроллер ATMega16a в TQFP корпусе, работающий на частоте 8 Мгц от внутреннего генератора. Для его прошивки на плате предусмотрены контакты, достаточно только извлечь дисплей (см. фото).

 

    Итак, разберемся со схемой по порядку, здесь на ногу PD2 (на которой активно прерывание INT0) поступает сигнал от датчика Холла. При вышеупомянутых характеристиках колеса и расположения магнитов нам достаточно в подпрограмме прерывания подсчитывать количество переключений датчика Холла за секунду это и будет являться скоростью в км/ч. Разумеется при другом диаметре колеса, необходимо внести коррекцию в программу прошивки микроконтроллера, либо пересчитать количество магнитов. Так как в устройстве запланированы еще и часы на микросхеме DS1307, то секунды отмеряем с выхода SOUT микросхемы предварительно настроив его в CVAVR на 1Гц. При прохождении магнита мимо датчика Холла срабатывает прерывание INT0, настроенное на перепад с высокого на низкий уровень. В подпрограмме прерывания подсчитываем количество срабатываний (скорость) и к километражу прибавляем 26см (расстояние пройденное между срабатываниями датчика). Раз в секунду по положительному импульсу с DS1307 на ногу МК РС2 обновляем значения скорости, пробега, времени и перерисовываем графику на экране. Ноги МК PD4, PD7 через транзистор (p-n-p) управляют передней и задней фарой соответственно, для отображения текущего состояния фар на экране предусмотрены специальные пиктограммы. Нога PD0 через транзистор (n-p-n) (хотя можно и без него обойтись, благо ток там не большой) управляет подсветкой экрана. Все управление осуществляется 5ю кнопками. S5 и S2 включают/отключают фары, S4 подсветка дисплея, S3 вход в режим настройки часов, S1 сброс значений на одометре. При отсутствующей батарейке Bat1 часы настроены на работу с 00:00 при запуске, дабы считать время поездки/прогулки (в данном режиме кнопка S3 по сути теряет смысл). Но отсек для CR2032 предусмотрен и если необходимо отображение реального времени не сбрасываемого при отключении питания, достаточно вставить батарейку. На работе часов подробно останавливаться не буду, дабы часов на сайте и так хватает, скажу только, что все подключено по даташиту, и согласовано с МК стандартной библиотекой CVAVR. Теперь вернемся к схеме. Для резисторов R3-R8 в плате место не предусмотрено, их необходимо установить в фаре, по количеству имеющихся светодиодов (или использовать имеющиеся, если есть, тогда просто подключаем вывод коллектора транзистора к плюсу питания фары, а землю к минусу). В самой фаре батарейки не ставим. В моем случае (хотя может они все такие, не знаю) фары были китайские, с кнопочкой, по нажатию на которую менялся режим свечения: мигание, бегущие огни и т.д. Поэтому я просто выкорчевал из нее всю ненужную электронику и запитал напрямую, припаяв резисторы к светодиодам (см. фото ниже), от коллектора транзисторов VT1, VT2, чтобы фара либо горела, либо не горела. Хотелось бы обратить внимание, при распайке этих транзисторов столкнулся с различным назначением ног в зависимости от производителя, я с первого раза промахнулся, т.к. производитель китайский и неизвестно какого даташита он придерживался при изготовлении.

 Теперь посмотрим на плату.

 

 

Резистор и светодиод обведенные красным прямоугольником внизу я использовал для отладки датчика Холла и настойки программы (мигал им при срабатывании датчика), впоследствии случайно отломил его и код из программы соответственно убрал за ненужностью. Верхним красным прямоугольником обведен элемент DS18B20, которым я планировал измерять температуру, и вроде даже пользоваться им научился, но в последствии, то времени ему надо много на преобразование, то место на экране не хватало для температуры, и решено было отказаться от него, пока… до следующей модернизации. :) Прошивка МК занимает 75% памяти, так что место для модернизации имеет место быть так сказать. Внимание! Нижнюю ногу CLK экрана подключать НЕ НАДО, т.к. под ней проходит дорожка к земле.

О питании. Питается данное устройство от трех минипальчиковых батареек типа ААА. Причем МК питается 3.3 вольтами обеспечиваемыми микросхемой LM1117, с конденсаторами на выходе для защиты от помех. DS1307 питается напрямую от батареек, т.к. показала практика 3.3 вольта недостаточно, что бы DS1307 перешла с питания от батарейки на внешнее питание. При этом согласования уровней между DS1307 и МК не требуется, они и так стабильно друг друга понимают.

Коротко о фьюзах. Относительно заводских установок меняем фьюз JTAGEN для полноценной работы порта С, и фьюзы CKSEL3:0 меняем с 0001 на 0100 для выставления микроконтроллера на частоту 8Мгц от внутреннего генератора.

Ну и в заключение немного фото.

Отсек для батареек крепится на задней крышке корпуса. В принципе, когда разобрал фару пришла мысль что батарейки можно было оставить в фаре и питание протянуть от нее, следовательно габариты корпуса значительно уменьшить, но корпус был уже изготовлен, поэтому решено оставить все как есть. Корпус изготовлен из 1 миллиметрового алюминия, кронштейн крепления из 2х миллиметрового, лицевая панель вырезана из коробки от DVD диска, так и смотрится «благородней» и на ощупь приятней. Крепеж М3, к сожалению с полукруглой головкой винты в дефиците, а зенковать под потай в миллиметровой толщине особо нечего. Поэтому как то так.

 

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

 

 

Слева вверху доработанная передняя фара изнутри, лишние дорожки счищаем напильником, распаиваем резисторы.

 

 

 Общий вид крупным планом получившейся конструкции:

 

 Видео работы можно глянуть тут:

https://youtu.be/8W307Ecse_4

 

Исходники программы, схему в протеусе, плату в Sprint Layout прикладываю. С наилучшими пожеланиями, до новых встреч!

 


Файлы:
Исходники, схема в протеусе, печатная плата


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

74 10 3
1 0 0