ВелоМетр — Велосипедный спидометр/одометр

Решил я как-то раз украсить своего железного коня спидометром. Но вместо того чтобы сделать так, как делают все нормальные люди (взять некоторое количество кровно заработанных и пойти на ближайший рынок, где обменять их на нечто китайского производства с надписью «BEJIOCNIIEDHbIN CIINDOMETP» на лицевой панели), я решил поступить как true-радиолюбитель — собрать его собственноручно из того, что есть под рукой. Первым делом я, разумеется, полез искать готовый проект в Интернете. Но, как выяснилось, в Сети попросту нет подходящих конструкций велосипедных спидометров — есть либо слишком сложные (на базе дорогостоящих микроконтроллеров, не менее дорогостоящих дисплеев, и содержащие кучу бесполезных функций), либо слишком примитивные (с прошивками, написанными на бЭйсике, и кучей схемотехнических ошибок). И тогда я решил придумать желаемый девайс самостоятельно.

Описание

Устройство предназначено для измерения скорости и пробега велосипеда, а также для управления фарой — регулирования яркости, автоматического включения и отключения.

Основные характеристики:

Напряжение питания, V 1,8-5
Минимальная регистрируемая скорость, км/ч Велосипеды Тиса, Десна, и.т.д; покрышка 40—406 (внешний диаметр 492 мм) 1.1
Горные велосипеды; покрышка 26″x1.95″ (внешний диаметр 665 мм) 1.5
Советские дорожные велосипеды; покрышка 40—622 (внешний диаметр 708 мм) 1.6
Ток потребления, mA (при U пит. 2,4 V) Рабочий режим, подсветка дисплея отключена 5
Рабочий режим, подсветка включена 80
Спящий режим не более 0.002
Максимальная регистрируемая скорость, км/ч 99.9
Максимальный текущий пробег, км 655.35
Максимальный общий пробег, км 65535
Максимальный ток фары, mA 250*
* Теоретически, используемая схема преобразователя может работать с током нагрузки 1 A и более, однако для этого потребуется модификация схемы — увеличение емкостей конденсаторов на входе преобразователя, а также уменьшение сопротивления и увеличение мощности резистора R25.

Управление

Кнопка 1 — вызов настроек
Кнопка 2 — включение/отключение устройства
Кнопка 3 — включение/отключение фары
Кнопка 2 в режиме настроек -уменьшение или отключение параметра
Кнопка 3 в режиме настроек — увеличение или включение параметра

Удерживание кнопки 1 при включении — разблокировка дополнительных настроек
Удерживание кнопок 1 и 3 при подаче питания — сброс настроек и данных о пробеге (только для варианта прошивки, хранящего данные в оперативной памяти)

Настройки

Настройка отображения скорости
норм — нормальное отображение скорости
рекорд — отображение максимальной зарегистрированной скорости. Показания сбрасываются через 5 секунд после остановки

Настройка отображения пробега
текущий — отображение текущего пробега с точностью до десятков метров
общий — отображение общего пробега с точностью до километров

Автоматическое включение фары при возобновлении движения

Автоматическое отключение фары при остановке
Максимальная задержка отключения — 4 минуты

Яркость фары
Минимальное значение — 0
Максимальное значение — 7

Контрастность дисплея
Минимальное значение — 0
Максимальное значение — 15
Автоматическое включение устройства при начале движения
Автоматическое отключение устройства при остановке
Максимальная задержка отключения — 4 минуты
Включение подсветки дисплея
Сброс текущего пробега
Сброс общего пробега
Для разблокировки данной опции необходимо удерживать кнопку 1 при включении устройства
Установка длины окружности колеса
Максимальное значение — 255 см
Для разблокировки данной опции необходимо удерживать кнопку 1 при включении устройства
`

Как это работает

Измерение скорости и учет пробега осуществляются при помощи датчика вращения, закрепленного на передней вилке велосипеда. Для определения скорости движения, устройство измеряет время между срабатываниями датчика. Поскольку для измерения скорости необходимы как минимум 2 срабатывания, при первом срабатывании расчет скорости не производится, а при последующих скорость вычисляется по формуле S = C*(F*0.036)/T где S — скорость движения велосипеда; C — длина окружности колеса, взятая из настроек устройства; F — тактовая частота счетчика; T — значение счетчика. При отсутствии срабатывания датчика на протяжении пяти секунд, показания скорости сбрасываются, и начинается отсчет времени отключения. По достижении времени отключения, указанного в настройках, либо при нажатии на кнопку 2 устройство переходит в спящий режим с током потребления не более 2 uA.

Принципиальная схема

Схема построена на микроконтроллере ATTiny2313A. Для отображения информации используется дисплей RC0802A. Поскольку МК питается напрямую от батареек, а дисплей — от повышающего преобразователя 5V (т.е напряжения питания МК и контроллера дисплея могут отличаться более чем в 2 раза), соединять шину данных дисплея с МК без согласования уровней нельзя. Для согласования уровней используются резисторы R13-R24. Транзистор VT2 используется для ШИМ-регулирования контрастности дисплея. Пределы регулировки контрастности устанавливаются подбором резисторов R10-R12. Транзистор VT4 управляет подсветкой дисплея.
Транзистор VT3 отвечает за сброс дисплея. Данный «некрасивый» способ сброса является единственно возможным, поскольку у дисплея вывод сброса отсутствует.
Транзистор VT1 управляет питанием преобразователя напряжения. Преобразователь напряжения, питающий дисплей и фару, построен на микросхеме NCP1450ASN50T1 и половине транзисторной сборки VT5. Вторая половина VT5 используется для ШИМ-регулирования яркости фары.Если к устройству не планируется подключать фару, либо ток фары составляет не более 50mA, то можно использовать альтернативную схему преобразователя:

В качестве датчика вращения используется геркон в паре с постоянным магнитом, установленным на колесе. Геркон полключен к выводу 6 МК через конденсатор C2. Это необходимо для снижения потребляемой мощности устройства в том случае, когда магнит остановился напротив геркона. Конденсатор C1 необходим для устранения дребезга контактов геркона.

Детали

Основная плата устройства собрана по технологии поверхностного монтажа (SMD). Резисторы и конденсаторы могут иметь типоразмер 1206, либо 0805. При использовании деталей меньшего размера, потребуется модификация печатной платы.
Конденсаторы C3 и С6 могут быть заменены на электролитические. В этом случае рекомендуется установить параллельно C3 керамический конденсатор емкостью 0.1 uF.
В качестве L1 использован дроссель ДПМ 0.6-10. При отсутствии данного дросселя, его можно заменить на любой дроссель аналогичного или большего типоразмера с индуктивностью 10 uH. Настоятельно не рекомендуется использовать дроссели меньшей индуктивности, поскольку это приведет к кратковременному возрастанию напряжения на выходе преобразователя при резком уменьшении тока нагрузки. По этой же причине при самостоятельном изготовлении дросселя из подручных материалов и отсутствии под рукой измерителя индуктивности, рекомендуется проверить работу преобразователя до того, как к схеме будет подключен дисплей. Не следует наматывать дроссель на кольцевом магнитопроводе. Если у Вас нет никакого магнитопровода кроме кольцевого, то нужно переломать его на две части, либо прорезать в нем зазор.
Вместо ATTiny2313A можно использовать ATTiny2313V, либо, при питании схемы от трех батареек — ATTiny2313. Однако, при такой замене станет невозможным включение фары при отключенном устройстве. Вместо транзистора TPC8103 можно использовать любой другой P-канальный полевой транзистор подходящей мощности с пороговым напряжением открытия (Gate Threshold Voltage) не более 1.5V (например IRF7404). Вместо транзисторной сборки IRF7530 можно использовать любю другую сборку, содержащую пару N-канальных полевых транзисторов подходящей мощности с пороговым напряжением открытия не более 1.5V (например IRF7501 — без изменения печатной платы, либо IRF7301, IRF7311, IRF7331 — с изменением печатной платы). Вместо транзисторной сборки также можно использовать два отдельных транзистора. При этом пороговое напряжение открытия транзистора в цепи ШИМ-регулирования яркости фары может быть больше чем 1.5V.
В качестве кнопок SB1-SB3 рекомендуется использовать угловые микрокнопки, поскольку в этом случае отверстия для толкателей будут находиться на боковой стенке устройства, а не сверху, что снизит вероятность попадания влаги внутрь корпуса. Либо использовать силиконовые кнопки, извлеченные из какого-нибудь устройства (калькулятора, пульта, джойстика, и.т.д). В этом случае плату для кнопок рекомендуется вырезать из платы того же устройства — при изготовлении платы в домашних условиях Вы навряд-ли сможете нанести на нее покрытие из металла, стойкого к коррозии.
Для стабилизации тактовой частоты МК можно использовать кварцевый резонатор 4 MHz, либо керамический с частотой 500 kHz. Если у Вас под рукой нет ни того, ни другого, Вы можете использовать для тактирования МК внутренний RC-генератор, однако в этом случае погрешность измерения скорости будет составлять ±10% — такова точность заводской калибровки генератора. При помощи калибровки можно добиться повышения точности генератора до ±2%. Для этого Вам потребуется частотомер и калибровочная прошивка (см. архив с прошивками). Калибровка производится следующим образом: прошейте МК калибровочной прошивкой — при включении на дисплее отобразится текущее значение, хранящееся в калибровочном регистре:

осле этого подключите частотомер к выводу 9 МК, затем при помощи кнопок 2 и 3 добейтесь частоты, наиболее близкой к 50 kHz. После этого Вам потребуется пересобрать основную прошивку устройства, раскомментировав в файле velometer.c макрос USER_OSCCAL, и вписав в него значение полученное при калибровке.

Упрощенная схема

Данный вариант схемы проще для повторения, однако он обладает целым букетом недостатков, главный из которых — значительное изменение контрастности дисплея (вплоть до невозможности прочитать инфокмацию) по мере разрядки батареек. Повторять упрощенную схему рекомендуется лишь в том случае, если вы испытываете затруднения с покупкой деталей, или просто хотите «пощупать» данное устройство перед тем, как собрать полноценную схему.

Часто задаваемые вопросы

Вопрос: Зачем было использовать такие мощные полевики в схеме питания? К примеру, одного TPC8103 хватит для управления питанием десятка наких устройств. С жиру бесимся, да?
Ответ: Девайс собирался из того, что было под рукой. И под ней не оказалось транзисторов слабее чем те, что установлены в схеме. Вам никто не запрещает ставить полевики послабее при повторении схемы.

Вопрос: Зачем было устанавливать в устройство, собранное по SMD-технологии микроконтроллер в корпусе DIP?
Ответ: См ответ на предыдущий вопрос.

Вопрос: Какой смысл в цепочке R6 VT3 R7? Зачем делать короткое замыкание в цепи дисплея?
Ответ: Во-первых, замыкание там не короткое, а через резистор 10 ом. Во-вторых, оно происходит всего на 50 милисекунд перед включением дисплея. А нужно оно вот зачем: при инициализации дисплея в режиме четырехпроводной шины данных, перваяя инструкция имеет длину 4 бита (или, проще говоря, полбайта). Все остальные инструкции дисплея имеют длину 1 байт, и отправка полубайтовой инструкции в дисплей, уже прошедший инициализацию, будет иметь весьма нехорошие последствия — дисплей будет считать эту инструкцию первыми четырьмя битами нормальной, восьмибитной инструкции, первые 4 бита следующей инструкции — последними четырьмя битами предыдущей инструкции, и.т.д. В результате этого на дисплее вместо циферок с буковками будет отображаться билиберда. Казалось бы, зачем отправлять в инициализированный дисплей еще одну инструкцию инициализации, и тем самым сводить его с ума? А все дело в том, что при переходе устройства в спящий режим, питание дисплея отключается, но, несмотря на это, он некоторое время остается инициализированным благодаря заряду конденсатора C7. Соответственно, включение устройства до того, как конденсатор C7 разрядится, и приведет к отправке второй полубайтовой инструкции в инициализированный дисплей. Так вот, цепочка R6 VT3 R7 нужна именно для того, чтобы разрядить конденсатор C7, и тем самым выполнить сброс дисплея. Если после всего вышесказанного Вы все еще сомневаетесь в необходимости данной цепи, то можете не собирать ее при повторении устройства, и понаблюдать как красиво оно будет работать.

Вопрос: Могу ли я использовать в данном устройстве дисплей на базе контроллера HD44780?
Ответ: Теоретически да, однако Вам придется модифицировать библиотеку, отвечающую за работу с дисплеем, поскольку у данного контроллера несколько отличается процедура инициализации.

Вопрос: У меня нет ни кварца на 4 MHz, ни керамического резонатора на 500 kHz, ни частотомера. А хочется собрать нормальный, точный спидометр. Можно ли использовать резонатор с другой частотой?
Ответ: В схему можно поставить практически любой кварц (кроме слишком высокочастотных — встроенный в МК генератор просто не сможет с ними работать). Например 4.43 MHz или 3.58 MHz (такие стоят во всех телевизорах и видеомагнитофонах). Однако, при изменении тактовой частоты МК необходим пересчет множителя, используемого для расчета скорости (макрос SPEED_MULTIPLIER) и максимального значения таймера, отсчитывающего 5-секундные интервалы (макрос MAIN_TIMER) в файле velometer.c. После чего потребуется пересобрать прошивку. И не забудьте установить новую тактовую частоту в настройках проекта CodeVisionAVR — в противном случае компилятор неправильно рассчитает задержки, необходимые для работы дисплея.

Вопрос: Я собрал данную схему без резисторов R13-R24 — соединил МК с дисплеем напрямую. И она прекрасно работает от двух пальчиковых батареек. Зачем тогда нужны эти резисторы?
Ответ: Подождите пока батарейки подсядут, и тогда Вам станет ясно, зачем нужны эти резисторы :).

Вопрос: Собрал данное устройство, использовав версию прошивки, хранящую все данные в оперативной памяти. При отключении питания общий пробег и настройки должны сбрасываться, а они не сбрасываются. Мало того, не сбрасывается даже текущий пробег, а он вроде как хранится в оперативной памяти во всех версиях прошивки. Почему так? Вы что-то напутали в коде?
Ответ: Ничего я не напутал. Тут используется свойство МК от Atmel сохранять содержимое регистров и оперативной памяти в течение некоторого времени (около 15 минут) после отключения питания.

Вопрос: Почему в файлах нету эмуляции схемы в Proteus»е? Вы забыли ее приложить?
Ответ: Нет, я просто не эмулировал ее в протеусе, ибо эмуляция микроконтроллеров в нем работает как говно.

Вопрос: Почему на плате нет разъема SPI? Это, типа, нужно выпаивать МК при каждой перепрошивке?
Ответ:Я посчитал нецелесообразным увеличивать размеры платы ради разъема, который не будет использоваться при эксплуатации. А выпаивать МК вовсе не обязательно — достаточно установить его в панель, или припаять 5 проводков к задней стороне платы (дисплей, подключенный к тому же порту, совершенно не мешает программатору).

Вопрос: Почему все отверстия на плате (даже крепежные) имеют диаметр 0.5 мм? Не маловато ли?
Ответ: Отверстия, отпечатанные в процессе лазерно-утюжного изготовления платы, использутся в качестве кернов при сверловке. А керн диаметром 2.5 мм и глубиной 35 мкм выполняет свои функции довольно таки хреново.

Вопрос: Почему прошивка писалась в CodeVisionAVR? Это же говно. Компилятор для ламеров.
Ответ: А кто Вам сказал что я не ламер? И кстати, оно в большинстве случаев прекрасно справляестя со своими обязанностями. Не хуже чем IAR или WinAVR.

Интересные факты, выяснившиеся при создании устройства

• Оценить скорость движения «на глазок» довольно таки трудно. К примеру, скорость в режиме «просто кручу педали» — это аж 20 км/ч, а не «от силы 15″ как мне казалось раньше. А в режиме «разогнался шописец» — всего лишь 40, а не «за 50″, как я считал до установки спидометра.

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

Фото

Внутренности устройства:

На фото отчетливо видна некрасивая конструкция из двух конденсаторов 220uF

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

Корпус устройства изготовлен из листового полистирола (корпус от телевизора «Электрон»). В качестве клея использовался растворитель 646:

Первая версия корпуса была жестоко угроблена во время горячей сушки краски (оказывается, рука, засунутая в духовку, весьма хреново выполняет функции термодатчика). После подобного epic fail»а обычно хочется бросить всё к чёртовой матери, но я нашел в себе силы начать все сначала, в результате чего и появился корпус v2:



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


Выводы геркона тщательно изолированы при помощи термоклея. В катафоте профрезеровано углубление, после чего в него вклеен редкоземельный магнит, извлеченный из привода БМГ жесткого диска. На самом деле, можно было обойтись и без фрезеровки, но мне показалось, что так будет надежнее. Кстати, мои кривые руки умудрились напортачить и здесь — если хорошо присмотреться, то можно заметить, что магнит переломан ближе к концу. Это результат того, что я пытался подогнуть магнит по форме углубления (оно получилось слегка выпуклым). Ну не знал я что неодимовые магниты изготовляются методом порошковой металлургии.

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

Datasheetы

RC0802A
ATTiny2313A
TPC8103
NCP1450
SS14
IRF7530
BC848

P.S. Надеюсь, мое поздравление Коту понравилось, и он поделится со мной валерьянкой и сухим кормом :)
Файлы:
Прошивки
Принципиальная схема и печатная плата
Исходный код и скрипты

Комментариев пока нет ... Будьте первым, кто оставить свой ответ!