Разработка и реализация велоспидометра своими руками
Ещё 5 лет назад у меня была идея разработать и сконструировать велоспидометр (велокомпьютер) на базе дисплея и корпуса от известного мобильного телефона NOKIA 3310.
Изучив документацию на дисплей, я осознал, что сложности в программировании не будет. Дисплей очень простой с точки зрения работы с ним на программном уровне.
К написанию программы я приступил два года назад. За основу устройства был выбран распространённый микроконтроллер ATMega8. На этапе написания программы я не прибегал к использованию библиотек для работы с дисплеем. Все функции довольно просты и реализуются самостоятельно. Меня принципиально интересовал именно не символьный, а графический дисплей, так как одной из моих функциональных задумок было отображение на дисплее графика (гистограммы) зависимости текущей скорости от расстояния. Данный функционал представляет немалый интерес и отсутствует в дешёвых велокомпьютерах.
В итоге, спустя месяцы, в сентябре 2015 года я изготовил то, что хотел.
Устройство считает обороты колеса, пересчитывая их на расстояние (как абсолютное, так и относительное), вычисляет с каждым оборотом скорость, отображает дату и время, максимальную и среднюю скорость, запоминает дату и время абсолютно-максимальной скорости, отображает график (как на фотографии выше). Кроме всего, устройство может работать с памятью ПЗУ для записи результатов измерения с дальнейшим просмотром их на компьютере. Также предусмотрена подстветка дисплея.
Принцип измерения скорости основывается на подсчёте периода оборота колеса, а расстояние вычисляется на основе измерения количества таких оборотов. Датчиком оборота служит геркон в совокупности с магнитом на спице колеса.
Для вывода символьной (численной) информации я применил два набора графических шрифтов. Первый набор, крупный 8X8, служит для вывода скорости, как основной информации. Второй набор, мелкий 3X5, – для остальной информации. Последний набор я нарисовал самостоятельно и преобразовал в числовые массивы по формулам с помощью Excel. Данные массивы подставляются в исходный код программы микроконтроллера.
Дизайн графики основного окна я продумывал, применяя также программу Excel для удобства фиксации координат и адресов пикселей. Учтено размещение графической информации по группам, состоящих из 8 строк, согласно большинству монохромных дисплеев, исходя из особенностей их управления. В дальнейшем для удобства убраны «незначащие нули» слева у длинных чисел.
В процессе эксплуатации устройства были выявлены небольшие недостатки, связанные с особенностями изготовления. Прежде всего – плохой контакт дисплея с контактными площадками печатной платы. В оригинальном мобильном телефоне контакты на плате позолоченные, и окисление отсутствует. В моём случае они просто лужёные.
Исходя из вышесказанного, было принято решение переделать устройство в другой корпус, а также переделать печатную плату, на которую дисплей будет припаиваться. Этим процессом я занялся совсем недавно. В результате получилась более устойчивая к работе конструкция.
Корпус для устройства я изготовил из куска оргстекла, толщиной 17 мм, на фрезерном станке ЧПУ. Для этого я предварительно набросал эскизы корпуса в той же программе SPlan, почти полностью не владея тематикой чертежей, САПР и т.д.
Данные наброски нужны для общего представления и получения координат опорных точек. На их основании пишется программа на станок ЧПУ, принимая во внимание общие принципы и последовательности фрезеровки. Программу ЧПУ я писал вручную в Excel, применяя функции автозаполнения на повторяющиеся операции.
Схема устройства представлена на рисунке ниже.
В центре схемы расположен микроконтроллер ATMega8. Схема питается от напряжения 5В через линейный регулятор VR1, на который я подаю 12В через пин 10 разъёма X1. К порту прерывания INT0 МК (пин 32) через пин 4 разъёма X1 подключается геркон (на схеме не отражён), являющийся датчиком оборота колеса. К произвольным портам (пины 28, 27, 23) подключены функциональные кнопки S1-S3. К SPI интерфейсу контроллера (пины 15-17) подключен дисплей IC2 и определённые пины разъёма X1 для перепрошивки. На этот же разъём зацеплен UART интерфейс (пины разъёма 2, 3) для пользовательского подключения к компьютеру, через который настраиваются дата и время на устройстве (пины МК 30-31, RX/TX). Дисплей к контроллеру подключен через делители на резисторах, служащие для снижения напряжения, ибо дисплей работает на напряжении 3.3 В. В дополнение, пины дисплея D/C (данные/команда), SCE (строб) и RES (сброс дисплея) подключены к произвольным портам МК PB2, PB1 и PB0 соответственно (пины 12-14). Питание дисплея осуществляется через диоды D1-D3 и резистор R5, которые служат для снижения напряжения с 5 до 3.3 В, избегая применения линейного регулятора. Кварц Cr1, тактирующий МК, номиналом 4.5 МГц выбран случайно, но обдуманно. Данный кварц можно часто встретить в автомагнитолах. В дальнейшем я нашёл и поставил кварц 4.433619 МГц, незначительно подкорректировав некоторые константы в исходном коде собственной программы. Все математические соображения имеют немалый объём, и поэтому здесь излагаться не будут. К порту МК PD3 (пин 1) подключен транзистор Q1, на который нагружены светодиоды подсветки дисплея. К порту МК PD4 (пин 2) подключен светодиод, который кратковременно мигает при прохождении магнита через геркон, индицируя вращение колеса. Шина I2C подключена к портам PC2-PC3 (пины 25-26) и для простоты реализована программно с применением соответствующей библиотеки. На шине подвешены ПЗУ (EEPROM) IC3 и часы реального времени (RTC) IC4. ПЗУ съёмное и цепляется на разъём X2, расположенный на дне устройства. Дополнительный порт контроллера PC1 (пин 24) служит для приёма импульсов с частотой 1 Гц с RTC, по которым обновляется время на дисплее. Батарейка Bat1 служит для энергосберегающей работы часов при отсутствии основного питания на устройстве.
Для копирования информации с ПЗУ в ПК применена известная схема, представленная на рисунке ниже. Программа для считывания и обработки информации написана мной самостоятельно с применением среды разработки Dev-Cpp и средств WinAPI для работы с последовательным портом.
Велоспидометр предусматривает подключение через последовательный интерфейс к компьютеру (к COM-порту через распространённую микросхему MAX232). Реализована программа для копирования текущей даты и времени с компьютера в устройство.
В качестве дополнительного функционала моего проекта я реализовал программу для работы с ПЗУ микроконтроллера, в которое хранятся данные шрифтов, сохраняются общий пробег, максимальная скорость и т.д. По своей сути, программа является той же программой для прошивки микроконтроллера. Я работаю с простейшим программатором «STK 200», подключенным к LPT порту компьютера, а точнее, с его аналогом, если его так можно назвать, ибо в простейшем случае программатор вовсе не содержит активных элементов. Фактически, МК по SPI интерфейсу подключается к определённым пинам LPT порта напрямую и работает, как ведомое устройство. Программа реализует протокол обмена данными с контроллером ATmega8, согласно его даташиту (стр. 237). Физический уровень SPI реализован путём управления регистрами LPT порта с применением известной динамической библиотеки «inpout32.dll». Программа предназначена для считывания, резервирования, записи, корректировки и восстановления из резервной копии хранящихся в ней данных. В дополнение к сказанному, программа может выводить полный дамп EEPROM контроллера в 512 Байт на экран.
Все вышеописанные программы консольные (без интерфейса) и работают через командную строку, что делает программирование значительно проще.
|