В статье описано несложное устройство, позволяющее оценить скорость движения велосипеда и пройденное им расстояние. Спидометр выполнен на основе платы Arduino Pro mini с микроконтроллером ATmega168, к которой подключён двухразрядный семиэлементный светодиодный индикатор, датчиком вращения колеса служит магнитоконтактный охранный извещатель ИО 102-2.
Катаясь на велосипеде по лесам и полям, всегда хочется узнать, какое расстояние преодолено, удалось ли «сильно разогнаться». Ответы на эти вопросы может дать велокомпьютер, который без проблем можно приобрести в спортивном магазине, однако цена этого прибора вполне ощутима, да и всегда хочется решить подобную проблему самому. В качестве «мозга» системы удобно использовать простой, недорогой и широко распространённый микроконтроллер, а ещё лучше — готовую микроконтроллерную плату Arduino. Выводить измеренные параметры можно на светодиодный или жидкокристаллический многоразрядный индикатор.
Информацию о вращении колеса велосипеда проще всего снимать с помощью магнита и геркона. Что касается корпуса устройства, то, разбирая свезённый в деревню городской домашний «мусор», я обнаружил целый пакет магнитофонных кассет — когда-то очень популярных носителей аудиоинформации. Футляр для такой кассеты — весьма удобный корпус для радиоэлектронных поделок.
Когда появилось время, желание и необходимые материалы, за пару вечеров родился самодельный велоспидометр. Возможности его, конечно, весьма скромны, но открытость конструкции позволяет при желании постоянно расширять его возможности.
Всю необходимую информацию о движении велосипеда можно получить, измеряя период вращения его колеса. Зная длину окружности колеса и число его оборотов за поездку, несложно вычислить пройденное расстояние. А поделив длину окружности на длительность одного оборота, получим скорость движения.
Датчик вращения колеса может быть оптическим, индукционным, на эффекте Холла и пр. Наиболее простой и дешёвый вариант — магнит на спице колеса, а на его вилке — геркон. Все продаваемые велокомпьютеры оснащены датчиками именно такого типа. Однако допустимое число срабатываний геркона за срок его службы ограничено. Например, геркон из магнитоконтактного извещателя ИО 102-2, широко применяемого в охранных системах, выдерживает всего 1000000 замыканий-размыканий. До отказа такого датчика оснащённое им колесо диаметром 0,7 м сможет проехать около 2200 км. Не так уж и много, но вполне достаточно для обычного велосипедиста.
Схема велоспидометра показана на рис. 1. В штрихпунктирной рамке на ней изображён фрагмент схемы платы Arduino Pro Mini [1] с микроконтроллером ATmega168PA-AU. Позиционные обозначения элементов в этом фрагменте соответствуют схеме [2]. Может быть применена и любая другая из плат многочисленного семейства Arduino не только с указанным выше микроконтроллером, но и с ATmega328, и даже ATmega88 или ATmega8.
Тактовую частоту микроконтроллера задаёт кварцевый резонатор Q1. Имеющийся на плате светодиод LED1 показывает наличие напряжения питания, а светодиод D3 не выполняет в рассматриваемом случае никаких функций. Находящийся на плате стабилизатор напряжения питания тоже не использован и на схеме не показан. Контакты платы, предназначенные для внешних подключений, имеют названия, принятые в Arduino.
Для управления светодиодным индикатором FYD-4021BS-21 (HG1) — двухразрядным семиэлементным с общими анодами разрядов — выбраны контакты платы Arduino Pro Mini, расположение которых удобно для подключения выводов индикатора при расположении его над платой. Порядок соединения выводов индикатора с контактами платы описан в следующем фрагменте программы:
#define DIG1 9
#define DIG2 A0
#define S_A 6
#define S_B 5
#define S_C 13
#define S_D 10
#define S_E 12
#define S_F 7
#define S_G 8
#define S_H 11
В его первых двух строках общим анодам старшего (DIG1) и младшего (DIG2) разрядов индикатора назначены соответственно контакты D9 и АО платы Arduino. Следующие строки назначают контакты для выводов катодов элементов А—Н индикатора. Если цоколёвка применённого индикатора не такая, как у FYD-4021BS-21, для его удобного подключения достаточно изменить номера контактов в приведённом выше фрагменте. Заметим, что контакты А0-А5, служащие по умолчанию аналоговыми входами Arduino, тоже можно использовать для управления индикатором.
Чтобы уменьшить число резисторов, ограничивающих ток через элементы индикатора, и уменьшить ток нагрузки выходов микроконтроллера, применена не обычная поразрядная, а поэлементная динамическая индикация. Это позволило обойтись всего двумя ограничивающими ток резисторами R1 и R2 без дополнительных усилителей. Максимальный ток, протекающий через выходы РС0 и РВ1 микроконтроллера, не превышает допустимых для них 40 мА, так как требуется включать одновременно только по одному элементу в каждом разряде.
Геркон SF1, кратковременно замыкающийся под действием магнита при каждом обороте колеса, подключён к выводу PD2 микроконтроллера, альтернативная функция которого — вход запроса внешнего прерывания INT0. В качестве нагрузки геркона использован включённый программой внутренний резистор микроконтроллера, соединяющий вывод PD2 с плюсом питания. Подавление неизбежного дребезга контактов геркона также выполняет программа.
Разрабатывать печатную плату для велоспидометра не потребовалось, поскольку индикатор HG1 удалось смонтировать прямо над платой Arduino. Внешний вид конструкции показан на рис. 2.
Геркон подключают к контакту 02 и находящемуся на плате Arduino Pro mini рядом с ним контакту GND. Питание подано через контакты VCC и GND, расположенные вдоль узкого края платы. Ис точником питания служит батарея GB1 из трех гальванических элементов типоразмера ААА. Не слишком высокая экономичность велоспидометра (потребляемый ток при погашенном индикаторе — около 25 мА, при включённом — 50 мА) частично скомпенсирована программными средствами. Индикатор гаснет на стоянке, а при движении работает в прерывистом режиме (1с — включён, 0,6 с — выключен).
Как было отмечено выше, в качестве корпуса конструкции удачно подошёл футляр с прозрачной крышкой от аудиокассеты. В его центральной части хорошо укладывается отсек с элементами питания, а сверху от него — плата Arduino с подключённым к ней индикатором (рис. 2). Провода, идущие к гер- кону датчика вращения колеса, пропущены в щель между футляром и его крышкой и далее прикреплены липкой лентой к рулю и вилке переднего колеса велосипеда с таким расчётом, чтобы при повороте руля они не натягивались.
Из отрезка металлического потолочного профиля ПП 60×27 согнута и укреплена хомутом на руле рамка для установки велоспидометра. Она изображена на рис. 3, а на рис. 4 в неё помещён велоспидометр.
Как показано на рис. 5, магнит датчика удерживают на спице колеса два винта М3 с П-образно изогнутыми прижимными деталями. Корпус извещателя ИО 102-2 с герконом закреплён на вилке колеса липкой лентой.
Чтобы добиться устойчивой работы датчика оборотов колеса, необходимо подобрать правильное взаимное расположение магнита и геркона. Программа lnt_2razr_segm_2.ino поможет это сделать. После загрузки в Arduino с помощью среды разработки Arduino IDE [3] она станет выводить на индикатор текущее число замыканий геркона, которое с каждым оборотом колеса должно увеличиваться на единицу.
Рабочую программу велоспидометра Int 2razr segm 4.ino также загружают с помощью Arduino IDE. После подачи питания процедура начальной установки Setup() присваивает всем переменным исходные значения и выключает индикатор. Переменной var_i, задающей вид выводимой на индикатор информации. она присваивает значение 5 (отображение номера версии программы), а вектору внешнего прерывания по входу INTO — указатель на процедуру обслуживания этого прерывания.
В основном цикле Loop(), в зависимости от значения переменной var i, устанавливается один из следующих режимов индикации:
1 — вывод в течение 1 с пройденного велосипедом с момента включения питания велоспидометра расстояния в километрах, признаком чего служит включённая десятичная запятая в младшем разряде индикатора;
2 или 4 — в течение 0,6 с индикатор выключен;
3 — вывод в течение 1 с текущей скорости движения велосипеда в километрах в час, которую программа вычисляет как длину окружности колеса, делённую на интервал времени между двумя последовательными замыканиями геркона;
5 — вывод в течение 1 с номера версии программы.
По изменению состояния счётчика оборотов колеса за последние 10 с определяется факт движения велосипеда. Если изменений нет, программа гасит индикатор.
Далее выполняется цикл развёртки изображения на индикатора: программа поочерёдно подаёт низкий логический уровень на одноимённые катоды обоих разрядов индикатора, а на анодах тех разрядов, в которых соответствующий элемент должен светиться, устанавливает высокие логические уровни. Переход от элемента к элементу происходит каждые 3 мс.
Процедура обработки запроса внешнего прерывания сначала устраняет влияние дребезга геркона, для чего че- раз 50 мс проверяет его состояние повторно. Если замыкание геркона подтверждено, то вычисляется время, прошедшее после предыдущего подтверждённого замыкания (длительность оборота колеса), и увеличивается на единицу содержимое счётчика оборотов.
В велоспидометра отсутствуют какие-либо органы управления, даже выключатель питания. Это сделано умышленно, чтобы во время движения не отвлекать внимание велосипедиста на управление прибором. Перед началом поездки нужно открыть крышку футляра спидометра и подключить к плате Arduino с помощью разъёмов провода от батарейного отсека и от геркона. После этого на плате должен включиться индикатор питания (светодиод LED1) и коротко вспыхнуть светодиод D3. По завершении работы программы-загрузчика светодиод D3 станет светить непрерывно, а на индикатор HG1 на секунду будет выведен номер версии программы.
Затем программа переходит в рабочий режим. На индикаторе попеременно (по 1 с с паузами по 0,6 с) отображаются пройденное расстояние и скорость движения. Сразу после включения значение скорости минимально — 0,1 км/ч. Если значение выводимого на индикатор параметра меньше 10, то оно отображается с одним десятичным знаком после запятой. В противном случае выводится только двухзначная целая часть значения. Таким образом, ездок не сможет подтвердить «инструментально”, что он разогнался до скорости более 99 км/ч или проехал более 99 км без остановок.
Индикатор включается при первом же замыкании геркона датчика вращения колеса. А после остановки он продолжает работать ещё 10 с, показывая пройденное расстояние и последний отсчёт скорости.
Следует иметь в виду, что пройденное расстояние прибор в своей энергонезависимой памяти при выключении питания не запоминает, поскольку это не имеет большого смысла — слишком мала разрядность индикатора. Куда интереснее знать расстояние, преодолённое в текущей поездке. Поэтому при каждом включении питания отсчёт расстояния начинается с нуля.
Велоспидометр получился чрезвычайно простым и недорогим. Им можно похвастаться перед знакомыми как сделанным своими руками, а не купленным в магазине. Устройство испытано на деревенском бездорожье и, как ни странно, показало вполне достойные результаты. Пройдено несколько десятков километров, достигнута скорость 32 км/ч (с горки по ухабам).
Это устройство даёт возможность энтузиастам совершенствовать его. В футляре достаточно места, чтобы разместить модуль часов реального времени, модуль Bluetooth или что-нибудь ещё. Ресурсов микроконтроллера вполне достаточно, например, для определения средней и максимальной скорости движения, времени в пути и других параметров.
Надо признать, что описанный велоспидометр пока не лишён недостатков. Он требует частой замены элементов питания, показания светодиодного индикатора плохо различимы при ярком солнце, всё-таки нужен какой-либо орган управления для выбора режимов работы. Проблемы вполне решаемы — требуются лишь время, энтузиазм и фантазия…
ЛИТЕРАТУРА
- Arduino Pro Mini. — URL: http://arduino.ru/Hardware/ArduinoBoardProMini
- Arduino-Pro-Mini-V10. — URL: http:// arduino.ru/Schematic/Arduino-Pro-Mini- schematic.pdf.
- Download the Arduino Software. — URL: https://www.arduino.cc/en/Main/Software
Автор: А. ПАХОМОВ, г. Владимир
Источник: журнал Радио №11, 2015