Site icon Меандр — занимательная электроника

Велоспидометр на Arduino

В статье описано несложное устройство, позволяющее оце­нить скорость движения велосипеда и пройденное им расстоя­ние. Спидометр выполнен на основе платы Arduino Pro mini с микроконтроллером ATmega168, к которой подключён двухраз­рядный семиэлементный светодиодный индикатор, датчиком вращения колеса служит магнитоконтактный охранный извещатель ИО 102-2.

Катаясь на велосипеде по лесам и полям, всегда хочется узнать, какое расстояние преодолено, удалось ли «сильно разогнаться». Ответы на эти вопросы может дать велокомпьютер, который без проблем можно приобрес­ти в спортивном магазине, однако цена этого прибора вполне ощутима, да и всегда хочется решить подобную проб­лему самому. В качестве «мозга» систе­мы удобно использовать простой, недо­рогой и широко распространённый мик­роконтроллер, а ещё лучше — готовую микроконтроллерную плату Arduino. Вы­водить измеренные параметры можно на светодиодный или жидкокристалли­ческий многоразрядный индикатор.

Информацию о вращении колеса ве­лосипеда проще всего снимать с помо­щью магнита и геркона. Что касается корпуса устройства, то, разбирая све­зённый в деревню городской домашний «мусор», я обнаружил целый пакет маг­нитофонных кассет — когда-то очень популярных носителей аудиоинформа­ции. Футляр для такой кассеты — весь­ма удобный корпус для радиоэлектрон­ных поделок.

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

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

Датчик вращения колеса может быть оптическим, индукционным, на эффекте Холла и пр. Наиболее простой и дешё­вый вариант — магнит на спице колеса, а на его вилке — геркон. Все продавае­мые велокомпьютеры оснащены датчи­ками именно такого типа. Однако до­пустимое число срабатываний геркона за срок его службы ограничено. Напри­мер, геркон из магнитоконтактного извещателя ИО 102-2, широко применяе­мого в охранных системах, выдерживает всего 1000000 замыканий-размыка­ний. До отказа такого датчика оснащён­ное им колесо диаметром 0,7 м сможет проехать около 2200 км. Не так уж и мно­го, но вполне достаточно для обычного велосипедиста.

Рис. 1

Схема велоспидометра показана на рис. 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.

Рис. 2

Геркон подключают к контакту 02 и находящемуся на плате Arduino Pro mini рядом с ним контакту GND. Питание по­дано через контакты VCC и GND, распо­ложенные вдоль узкого края платы. Ис точником питания служит батарея GB1 из трех гальванических элементов ти­поразмера ААА. Не слишком высокая экономичность велоспидометра (по­требляемый ток при погашенном инди­каторе — около 25 мА, при включён­ном — 50 мА) частично скомпенсирова­на программными средствами. Индика­тор гаснет на стоянке, а при движении работает в прерывистом режиме (1с — включён, 0,6 с — выключен).

Как было отмечено выше, в качестве корпуса конструкции удачно подошёл футляр с прозрачной крышкой от аудиокассеты. В его центральной части хорошо укладывается отсек с элемен­тами питания, а сверху от него — плата Arduino с подключённым к ней индика­тором (рис. 2). Провода, идущие к гер- кону датчика вращения колеса, пропу­щены в щель между футляром и его крышкой и далее прикреплены липкой лентой к рулю и вилке переднего колеса велосипеда с таким расчётом, чтобы при повороте руля они не натягивались.

Рис. 3

Из отрезка металлическо­го потолочного профиля ПП 60×27 согнута и укреплена хомутом на руле рамка для установки велоспидометра. Она изображена на рис. 3, а на рис. 4 в неё помещён велоспидометр.

Рис. 4

Как показа­но на рис. 5, магнит датчика удерживают на спице колеса два винта М3 с П-образно изогнутыми прижимными деталями. Корпус извещателя ИО 102-2 с герконом закреплён на вилке колеса липкой лентой.

Рис. 5

Чтобы добиться устойчи­вой работы датчика оборо­тов колеса, необходимо подобрать правильное вза­имное расположение магни­та и геркона. Программа 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 или что-нибудь ещё. Ресурсов микроконтроллера впол­не достаточно, например, для опреде­ления средней и максимальной скорос­ти движения, времени в пути и других параметров.

Надо признать, что описанный ве­лоспидометр пока не лишён недостат­ков. Он требует частой замены элемен­тов питания, показания светодиодного индикатора плохо различимы при яр­ком солнце, всё-таки нужен какой-либо орган управления для выбора режимов работы. Проблемы вполне решаемы — требуются лишь время, энтузиазм и фантазия…

ЛИТЕРАТУРА

  1. Arduino Pro Mini. — URL: http://arduino.ru/Hardware/ArduinoBoardProMini
  2. Arduino-Pro-Mini-V10. — URL: http:// arduino.ru/Schematic/Arduino-Pro-Mini- schematic.pdf.
  3. Download the Arduino Software. — URL: https://www.arduino.cc/en/Main/Software

Скачать архив к проекту

Автор: А. ПАХОМОВ, г. Владимир
Источник: журнал Радио №11, 2015

Exit mobile version