Велокомпьютер своими руками
Это статья о том, как можно самостоятельно сделать для любимого велосипеда компьютер. Покупать готовый это для меня не интересно, хотя быстро, без мороки и имеет более человеческий вид. Хотелось сделать полезную вещь применив свои знания. Так вот, посмотрев в интернете несколько вариантов таких самоделок, быстро была составлена схема устройства.
В качестве основы был взят распространенный контроллер ATtiny2313. Для которого и была написана программа. В качестве индикатора используется семисегментный четырехразрядный индикатор, красного свечения. Транзисторы обыкновенные маломощные NPN, в моем случае ставил КТ315.
Печатная плата изготавливалась лазерно-утюжным методом. Контроллер установил в панельку, чтобы можно было извлекать и перепрошивать, так как разъема для программирования я не предусмотрел. Однако сделал разъемы для подключения питания и датчика, чтобы можно было снимать велокомпьютер с руля.
В качестве корпуса выбор сразу пал на старую велофару, которая работала от больших батареек-боченков и светила достаточно тускло, так как там стояла лампочка накаливания.
Вместо лампочки была сразу выточена по размеру плата, куда припаяны 4 белых светодиода типа «пиранья».
В результате тестов дома, яркость показалась очень даже достаточной, но после первой же покатушки вечером, я понял что нужно все менять.
Поискав по закормам, нашел две светодиодные сборки с отражателями от нерабочих фонариков. Примеряв все это дело, решил закрепить стационарно.
Первые же ночные испытания показали, что работа ведется в правильном направлении, теперь можно было и вечером ездить. Но для большего комфорта докупил фонарик на 1 ваттном светодиоде с регулировкой пятна света, и закрепил отдельно на руле. Теперь все видно как днем (ну почти как днем), прохожие даже оборачиваются посмотреть что это на них едет )))
Самым сложным в изготовлении это устройства, было сделать магнит, который крепиться на спицу. Все мои попытки найти в продаже готовый, но без самого компьютера, оказались безуспешными. Было решено сделать самому, как говориться полный хендмейд. Нашел магнит когда-то выковырянный из старого электросчетчика. Повертев его пару минут, определился какая часть больше подойдет, и начал пилить его своим дремелем, в итоге 4 диска сточил в ноль + 2 разлетелось, магнит оказался очень прочным, его даже сверла не брали. В итоге после дня мучений магнит был готов к установке на колесо. Пластиковая стяжка для того чтобы вся эта конструкция не проворачивалась на спице. Осталось покрасить все это дело.
Следующим компонентом, который тоже нужно было сделать самому был датчик, основанный на герконе. Здесь все было просто, выточил из текстолита платку, разрезал медь где нужно, чтобы не травить, припаял геркон и провода. Потом залил все это лаком для ногтей, чтобы хоть как-то защитить от воды и грязи. И в конце при помощи пары подкладок и пластиковых стяжек закрепил на нужном расстоянии от магнита на вилке.
Еще один немало важный компонент это батарейный блок. Я решил использовать три пальчиковых аккумулятора по 1.2 В в итоге имею 3.6 В – необходимый минимум для работы контроллера достигнут. Аккумуляторы размещаются в специальном батарейном блоке, который я закрепил под сидением. В планах сшить для него сумочку на липучках, чтобы удобнее было менять аккумуляторы.
Потом осталось проложить провода по раме, и все окончательно закрепить.
Описывать программную часть не буду, так как там все достаточно понятно, и я по ходу написания оставлял комментарии.
This program was produced by the
CodeWizardAVR V1.25.8 Evaluation
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
Author : Freeware, for evaluation and non-commercial use only
Chip type : ATtiny2313
Clock frequency : 8,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
eeprom unsigned int Total,on; //переменная в eeprom
char Disp1, Disp2, Disp3,Disp4,k,j; // В этих переменных хранятся цифры, которые нужно отобразить
unsigned char Num1, Num2,Num3, Num4,startFlag, MODE=1;
unsigned long int timeC=0,time=0; // переменная хранящая значение таймера при срабатывании геркона
unsigned long int speed=0;
int distance=0,t ,TD,i=480;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
// Place your code here
timeC=time; // время между прерываниями
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
// Place your code here
// Declare your global variables here
void Display ( unsigned int Number) // Функция выделяет цифры из четырехзначного числа
while (Number >=1000)<
while (Number >= 100)
while (Number >= 10)
void Dig_init() //кодировка цифр для индикатора
Dig[0] =255-63; //(a+b+c+d+e+f); // Сейчас у нас схема с общим катодом
Dig[4] =255-102; // (f+g+b+c);
Dig[5] =255-109; // (a+f+g+c+d);
Dig[6] =255-125; // (a+f+g+c+d+e);
Dig[8] =255-127; // (a+b+c+d+e+f+g);
Dig[9] =255-111; // (a+b+c+d+f+g);
// Declare your local variables here
// Crystal Oscillator division factor: 1
// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=Out Func0=In
// State6=0 State5=0 State4=0 State3=0 State2=T State1=0 State0=T
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// External Interrupt(s) initialization
// INT0 Mode: Rising Edge
// Interrupt on any change on pins PCINT0-7: Off
// Timer(s)/Counter(s) Interrupt(s) initialization
// Universal Serial Interface initialization
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Global enable interrupts
TD=Total; // запись общего расстояния из EEPROM при подаче питания
startFlag=1; //((Гц/256)*длина колеса/1000м*3600сек*10)/timeC
Источник
Велокомпьютер своими руками на МК
После покупки нового велосипеда решил я его оснастить велокомпьютером, но китайские поделки покупать не стал по трём причинам:
1. Высокая цена
2. Отвратительное качество сборки
3. Ну, я же радиолюбитель!
И поэтому я поступил как настоящий радиолюбитель – собрал желаемый прибор самостоятельно.
В данной статье я расскажу вам, как самому собрать велокомпьютер на микроконтроллере. Данный велокомпьютер выполнен на микроконтроллере Attiny2313, в качестве дисплея использован однострочный ЖК индикатор на контроллере HD44780. Прибор умеет отображать текущую скорость, общее и промежуточное расстояния (отображаются в метрах). Общее расстояние, в отличии от промежуточного сохраняется в энергонезависимой памяти EEPROM. Схема велокомпьютера очень проста и не содержит дорогостоящих компонентов:
Дисплей подключён к микроконтроллеру по распространенному 4-х битному интерфейсу. Кнопки S1,S2,S3 (подтянуты десяти килоомными резисторами к плюсу питания) управляют прибором. Подстроечный резистор R6 регулирует контрастность дисплея. Светодиод HL1 индицирует подачу питания. В качестве динамика Ls1 можно использовать пьезоизлучатель. Транзистор VT1 – можно ставить любой биполярный n-p-n структуры, например КТ315 (я применил BC546B). Микроконтроллер Attiny2313 можно использовать с любыми буквенными индексами.
Зачем нужен внешний кварц микроконтроллеру, у которого есть свой тактовый генератор?
Наверное, у каждого из вас появился такой вопрос, и я на него постараюсь ответить. Без кварца работа устройства будет крайне не стабильна (неточность измерения, крякозяблики на дисплее и т.п.) потому, что встроенный тактовый генератор в микроконтроллере имеет большую “плавающую точку” и его частота постоянно колеблется. Если у вас нет такого кварца, не расстраивайтесь! Просто измените программу под тот кварц, который у вас есть. Впишите, в строчку $crystal= частоту своего кварца и всё будет ОК. Но на “худой конец”, если у вас нет никакого кварца, используйте встроенный тактовый генератор (пример установки фьюз-битов внизу), конечно работать будет не совсем точно и стабильно.
После того как я нарисовал схему и подумал каким будет велокомпьютер, сел на свой любимый велик и поехал по городу – покупать радио детали по следующему списку:
- Микроконтроллер Attiny2313 1шт.
- Кнопки тактовые (без фиксации) 3шт.
- Резисторы номиналом 10 кОм 5шт.
- Резисторы номиналом 1 кОм 2шт.
- Резистор номиналом 100 Ом 1шт.
- Панелька под микроконтроллер DIP-20 1шт.
- Транзистор биполярный BC546B 1шт.
- Пьезоизлучатель 1шт.
- Кварц 4 МГц 1шт.
- Светодиод (синего свечения) 1щт.
- Построечный резистор номиналом 10 кОм 1шт.
- ЖК индикатор (дисплей) на контроллере HD44780 1*16 1шт.
- Керамические конденсаторы 18 пФ 2шт.
- Керамический конденсатор 0.1 мкФ 1шт.
- Электролитический конденсатор 100 мкФ 1шт.
- Штекер 2.5 1шт.
- Гнездо для штекера 2.5 1шт.
- Гнездо MiniUSB 1шт.
- Пластмассовый корпус 85x60x35мм 1шт.
- Крепёж на руль велосипеда 1шт.
- Кнопка с фиксацией 1шт.
- Геркон 1шт.
Корпус, который я купил для велокомпьютера:
Макетная плата, термоусадка, АКБ и метр провода у меня были.
Приехавши домой сразу взялся за сборку велокомпьютера. Первым делом взялся за корпус. В корпусе надо сделать прямоугольную дыру размером 15×60мм.
Возможно, вы спросите, а как ты делал такую дыру? Да очень просто! Сначала размечаем карандашом, где будем делать дырку, потом сверлилкой сверлим по контуру отверстия когда весь контур высверлили выламываем кусок пластмассы и обрабатываем всё напильником. Вот что получилось у меня:
Кстати, все остальные отверстия я делал по ходу сборки. Изнутри корпуса на дыру приклеил кусочек органического стекла, чтобы пыль и влага не попадали на дисплей.
Далее спаял плату поставил кнопки, дисплей и всё остальное. Монтаж делал на макетной плате.
Вид сзади (без крышки):
Зарядка через MiniUSB:
У меня прибор питается от аккумулятора телефона Nokia на 3.7v. Зарядка осуществляется через MiniUSB порт, подключённый прямо к аккумулятору. Возможно, вы скажете, это же не правильно! И будете правы, для этого дела есть специальные микросхемы но я таковой микрухи не нашёл и пришлось довольствоваться тем что было. Но как-никак зарядка идёт, и за два часа заряда мой аккумулятор заряжается полностью. В рабочем режиме с включенной подсветкой дисплея велокомпьютер потребляет
Установка велокомпьютера на велосипед
Чтобы считать, расстояние и скорость велоспидометру нужен, так сказать “орган восприятия”. Геркон — это и есть этот “орган”, устанавливается он на раме велосипеда рядом с колесом, на спицах колеса устанавливается магнит. Чтобы когда колесо делало полный оборот, магнит “проходил” напротив геркона и “замыкал” его, тем самым формируя импульс который нужен велокомпьютеру для расчёта расстояния и скорости. На схеме указано, где подключать геркон к прибору. Я геркон припаял на небольшой кусочек макетной платы, припаял к нему провода и усадил на него термоусадку. И закрепил это всё на раме велосипеда с помощью пластмассовых стяжек.
Пример установки магнита на спицы колеса:
Велокомпьютер я закрепил посредине руля велосипеда:
Описание устройства
При включении устройства на дисплее появляется приветствие и информация о версии и авторе, потом в левой части дисплея отображается промежуточное расстояние, а в правой скорость (главный экран).
Загрузка велокомпьютера (приветствие):
Информация о версии:
Информация об авторе:
Кнопка S1 – при нажатии сохраняется общее расстояние в энергонезависимой памяти EEPROM, в течение секунды на дисплее отображается надпись “All:” а после её общее расстояние и надпись “Save”, звучит звуковой сигнал, после чего велокомпьютер возвращается к подсчёту расстояния и скорости (главный экран).
Да, да! Вы не ошиблись (смотря на фотографию выше), за несколько дней я проехал 191км! Потому что сегодня (21.08.2012), до школы осталось 11 и дабы проводить лето решил сделать “небольшую” покатушку за город.
Кнопка S2 — при нажатии обнуляется промежуточное расстояние, на дисплее отображается сообщение “Total clear!”, звучит звуковой сигнал, после чего велокомпьютер возвращается к подсчёту расстояния и скорости (главный экран).
Кнопка S3 — при нажатии в течение секунды на дисплее отображается надпись “All:” а после её общее расстояние и звучит звуковой сигнал, после чего велокомпьютер возвращается к подсчёту расстояния и скорости (главный экран).
Настройка велокомпьютера
Чтобы велокомпьютер отображал правильное расстояние, и скорость он должен знать, какое расстояние проезжает велосипед за один оборот колеса (иначе прибор будет просто неправильно считать расстояние и скорость), это расстояние хранится в константе Coleso (у меня по умолчанию 2.08 метра). Для настройки велокомпьютера, измерьте длину колеса своего велосипеда в сантиметрах полученное значение переведите в метры и впишите его в константу Coleso, перекомпилируйте программу с новыми значениями и прошейте ею велокомпьютер.
Если кто это сделать не в состоянии, присылайте мне на e-mail длину своего колеса, сделаю прошивку под ваш велосипед.
Прошивка МК велокомпьютера
Прошивка для велокомпьютера находится в файлах к статье и называется t2313veloC.HEX, прошивку писал в среде BASCOM-AVR (исходник прилагается).
Пример установки фьюз-битов на внешний кварц 4МГц:
Пример установки фьюз-битов на внутренний тактовый генератор 4 МГц:
В файлах к статье есть проект данного девайса в симуляторе Proteus. Но предупреждаю, что в симуляторе прибор работает очень медленно! В протеусе разве что светодиодами мигать можно (без глюков).
Видео работы велоспидометра:
Заключение
В заключении хотелось бы сказать, что велокомпьютер вышел отличный и не дорогой, затраты составили 113400 бел/руб. Для примера: самый дешёвый китайский велокомпьютер стоит не менее 200000 бел/руб, который я видел. Да и вообще своё – это сделанное для себя, качественно и с любовью, а не китайское г…но, которое на следующий день после покупки сломается. Сборка своего велокомпьютера мне доставила удовольствие, а его эксплуатация доставляет мне ещё большее удовольствие.
И смотрите больше на дорогу чем на велокомпьютер, всяко бывает… И удачи вам на дороге и в электронике!
Ниже вы можете скачать исходники, прошивку, проект в Proteus
Источник