Спидометр для велосипеда своими руками на 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 — указатель на процедуру обслуживания этого прерывания.

  1. В основном цикле Loop(), в зависи­мости от значения переменной var i, устанавливается один из следующих режимов индикации:
  2. 1 — вывод в течение 1 с пройден­ного велосипедом с момента включе­ния питания велоспидометра расстоя­ния в километрах, признаком чего слу­жит включённая десятичная запятая в младшем разряде индикатора;
  3. 2 или 4 — в течение 0,6 с индикатор выключен;
  4. 3 — вывод в течение 1 с текущей ско­рости движения велосипеда в километ­рах в час, которую программа вычис­ляет как длину окружности колеса, де­лённую на интервал времени между двумя последовательными замыкания­ми геркона;
  5. 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

Возможно, вам это будет интересно:

Источник: http://meandr.org/archives/29243

Этот проект позволяет следить за скоростью езды на велосипеде при помощи Arduino. Для измерения скорости вращения одного колеса используется магнитный выключатель (также называемый геркон).

Контроллер Arduino рассчитывает скорость и выводит эту информацию на ЖК-дисплей, закрепленный на руле.

Устройство совместимо с любым велосипедом/колесом, необходимо только ввести радиус колеса в прошивку для калибровки.

  • Список деталей:
  • (1x) Arduino Uno REV 3.
  • (1x) Геркон.

(1x) 10КОм 0.25Вт резистор.

  1. (1x) Батарея 9В.
  2. (1x) Разъемы для 9В батареи.
  3. (1x) Макетная плата.
  4. (1x) ЖК-дисплей с подсветкой Parallax 27977-RT.
  5. (x2) Тумблер.
  6. (2x) BLS штырьки.
  7. (1x) BLS разъемы.
  8. Дополнительные материалы:
  9. Провод №22.
  10. Припой.
  11. Наждак.
  12. Фанера.
  13. Столярный клей.
  14. Термоклей.
  15. Винты.
  16. Кабельные стяжки.

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

  • На схеме есть три тумблера:
  • – первый на линии питания 9В.
  • – второй для включения и выключения подсветки ЖК-дисплея.
  • – и один магнитный выключатель (так называемый геркон), который замыкается каждый раз, когда колесо совершает один полный оборот.
  • Parallex LCD подключается к Arduino при помощи только трех контактов: 5В, GND  и последовательного цифрового выхода (TX) – 1 контакт Arduino.
  • Резисторы 10 кОм подключены к геркону и выключателю подсветки во избежание избыточного тока между 5В и GND Arduino.
  • Припаяйте на макетную плату три линии  BLS штырьков как показано на фотографии для подключения Arduino.

Геркон

Магнитный выключатель состоит из двух частей: геркона и магнита. У геркона есть контакты, которые механически замыкаются внутри него при приближении магнита.

Припаяйте токоограничительный  10кОм резистор между A0 и GND на макетной плате. Припаяйте длинные провода к А0 и 5В – они будут проведены по велосипеду и подключены к геркону.

Установка геркона на колесо

Установите магнит и геркон на ваш велосипед при помощи изоленты (подходит любое колесо). Как видно на фотографии, магнит установлен на одну из спиц колеса, геркон на раму велосипеда.

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

Геркон неполярный, поэтому как его подключать – не имеет значения.

Используйте код приведенный ниже для проверки. Когда магнит на колесе будет проходит мимо геркона, Arduino будет выдавать значение ~1023, в противном случае значение будет ~0. Откройте Serial Monitor (монитор последовательного порта) (Tools >> Serial Monitor) в Arduino IDE, чтобы проверить это. Если магнит не влияет на геркон, попробуйте переставить его или использовать более мощный.

#define reed A0//Номер пина к которому подключен геркон int reedVal; void setup(){ Serial.begin(9600); } void loop(){ reedVal = analogRead(reed);// считываем знаение A0 Serial.println(reedVal);// выводим в Serial Monitor delay(10);// пауза 10 мс }

Прошейте Arduino. Включите Serial Monitor (монитор последовательного порта). Он должен показывать 0.00. Начните крутить колесо, и вы увидите скорость миль/ч, изменяющуюся каждую секунду.

ЖК-дисплей

Я использовал ЖК-дисплей с последовательным интерфейсом.

Припаяйте линию BLS разъемов на обратную сторону (с контактами) макетной платы. Три разъема будут использоваться для подключения ЖК-дисплея. ЖК-дисплей хорошо в станет в эти разъемы.

Подключите 5В, GND, и TX (1 цифровой вывод Arduino) от Arduino к разъему дисплея. Смотрите на подпись выводов ЖК-дисплея, чтобы сделать всё правильно.

В нижней части ЖК-дисплея Parallax есть два переключателя и потенциометр. Потенциометром контролируется контрастность дисплея. Для правильной работы переключатели должны быть установлены как на фотографии.

Для тестирования ЖК-дисплея используйте следующий код. Почему-то на моем ЖК-дисплее начинают появляться случайные символы во время прошивки, но они исчезают после того, как я пере подключаю USB-кабель. Я думаю, что это является помехой при связи Arduino с компьютером через 1 цифровой контактный (TX) во время прошивки.

При включении на ЖК-дисплее должна отображаться надпись «Hello World».

void setup() { Serial.begin(9600); pinMode(1,OUTPUT);// TX-линия Serial.write(12);// Очищаем Serial.write(“Hello World”);// Вывод надписи } void loop() { }

Подключите тумблер как показано на фотографии. Припаяйте резистор 10 кОм и зеленый провод к одному контакту, а красный провод к другому.

Подключите красный провод к 5В Arduino и к GND через резистор, а зеленый провод к D2.

Программа

Прошейте Arduino скетчем, который вы можете скачать внизу статьи. Убедитесь, что подсветка включается и выключается, а скорость отображается правильно. (Возможно, вам придется переподключить Arduino для корректной работы).

Измерьте радиус колес (в дюймах) и вставить его в строку: float radius = «»’;

Я использовал прерывания по таймеру.  Для отображения скорости в км/ч необходимо внести корректировку в программу.

Батарея

Соедините разъем для батареи и тумблер последовательно, как показано на фотографии.  Подключите красный провод от выключателя к Vin Arduino, а черный провод от разъема для батареи к GND Arduino.

Корпус

Я вырезал корпус для своего проекта при помощи  1/4″ лазерного резака 120 Вт. Размеры корпуса 3,5″x4″x2″.

Я смоделировал корпус в AutoCAD и сделал файлы для лазерной резки (с шиповым соединением) в Autodesk 123D Make. Затем я добавил два отверстия для тумблеров и прямоугольное отверстие для ЖК-дисплея.

Также  добавил несколько отверстий в нижней части корпуса для облегчения крепления к велосипеду.

Далее, склеил корпус древесным клеем, и отшлифовал края. Закончив корпус, я покрыл его лаком.

Установка компонентов в корпус

Закрепите тумблеры на корпусе при помощи гаек. Приклейте или привинтите ЖК-дисплей с внутренней стороны передней панели. Установите макетную плату, Arduino и батареи в корпусе и закрепить при на липучках или клее.

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

  1. Теперь вы можете выезжать с этим спидометром, однако при движении не отвлекайтесь от дороги!
  2. Скачать файлы к проекту
  3. Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта cxem.net)

Источник: http://shemopedia.ru/velosipednyiy-spidometr-na-arduino.html

Мой самодельный велокомпьютер на Arduino Nano с OLED-дисплеем

В моих велотрипах мне часто требуется определять расстояние между точками маршрута, знать скорость движения, время в пути… В этом мне помогает мой самодельный велокомпьютер на основе популярного Arduino Nano 3.0.

Функции моего самодельного велокомпьютера:

  • измерение и отображение пройденного пути;
  • измерение и отображение текущей скорости;
  • измерение и отображение средней скорости;
  • измерение и отображение пиковой скорости;
  • измерение и отображение времени в пути;
  • автоматическое отключение индикации при остановке и автоматическое включение индикации при начале движения;
  • режим охраны;
  • подача звукового сигнала.


Hex-файл
прошивки для Arduino Nano 3.0 (версия от 18 июля 2018 года) — bike.ino.eightanaloginputs.hex.
Как прошить hex-файл в плату Arduino, я описал здесь.

Мой велокомпьютер на основе Arduino Nano содержит три основных части:

  • датчик оборотов;
  • модуль обработки и индикации;
  • модуль питания.

Датчик оборотов

Датчик оборотов предназначен для регистрации оборотов колеса велосипеда. Я применил контактный датчик — геркон, контакты которого замыкаютя под воздействием магнитного поля постоянного магнита.

Модуль обработки и индикации

Модуль обработки и индикации предназначен для приема информации от датчика оборотов, ее обработки и вывода результатов обработки на индикатор:

Модуль принимает информацию от датчика оборотов (контакт геркона подключен к выводу A1 Arduino) и обрабатывает ее с учетом диаметра колеса (у моего велосипеда D = 2,06 м (50-559)).

Для улучшения видимости показаний и повышения информативности я применил OLED-дисплей на контроллере SSD1306 (я приобрел его на eBay):
Дисплей имеет интерфей I2C с четырьмя контактами:

контакт дисплея VCC SDA SCL GND
контакт Arduino +5V A4 A5 GND

(1) — текущая скорость движения (англ. current speed), км/ч
(2) — пройденный путь (англ. trip distance), км
(3) — средняя скорость движения (англ. average speed), км/ч
(4) — пиковая скорость движения (англ. maximum speed), км/ч
(5) — время в пути, ч.мм (двоеточие мигает)

Читайте также:  4 в одном инструменте - молоток, пила, мачете и гвоздодер своими руками

Источник: https://acdc.foxylab.com/velo

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

Представляю проект велоспидометра, который позволяет следить за скоростью езды на велосипеде при помощи Arduino.

Для измерения скорости вращения одного колеса используется магнитный выключатель (также называемый геркон). Контроллер Arduino рассчитывает скорость и выводит эту информацию на ЖК-дисплей, закрепленный на руле.

Устройство совместимо с любым велосипедом/колесом, необходимо только ввести радиус колеса в прошивку для калибровки.

Список деталей:
(1x) Arduino Uno REV 3.
(1x) Геркон.
(1x) 10КОм 0.25Вт резистор.
(1x) Батарея 9В.
(1x) Разъемы для 9В батареи.
(1x) Макетная плата.
(1x) ЖК-дисплей с подсветкой Parallax 27977-RT.
(x2) Тумблер.
(2x) BLS штырьки.

(1x) BLS разъемы.

Дополнительные материалы:
Провод №22.
Припой.
Наждак.
Фанера.
Столярный клей.
Термоклей.
Винты.

Кабельные стяжки.

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

На схеме есть три тумблера:
— первый на линии питания 9В.
— второй для включения и выключения подсветки ЖК-дисплея.

  • — и один магнитный выключатель (так называемый геркон), который замыкается каждый раз, когда колесо совершает один полный оборот.
  • Parallex LCD подключается к Arduino при помощи только трех контактов: 5В, GND и последовательного цифрового выхода (TX) – 1 контакт Arduino.
  • Резисторы 10 кОм подключены к геркону и выключателю подсветки во избежание избыточного тока между 5В и GND Arduino.
  • Припаяйте на макетную плату три линии BLS штырьков как показано на фотографии для подключения Arduino.

Геркон

Магнитный выключатель состоит из двух частей: геркона и магнита. У геркона есть контакты, которые механически замыкаются внутри него при приближении магнита.

Припаяйте токоограничительный  10кОм резистор между A0 и GND на макетной плате. Припаяйте длинные провода к А0 и 5В – они будут проведены по велосипеду и подключены к геркону.

Установка геркона на колесо

Установите магнит и геркон на ваш велосипед при помощи изоленты (подходит любое колесо). Как видно на фотографии, магнит установлен на одну из спиц колеса, геркон на раму велосипеда.

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

Геркон неполярный, поэтому как его подключать — не имеет значения.

Используйте код приведенный ниже для проверки. Когда магнит на колесе будет проходит мимо геркона, Arduino будет выдавать значение ~1023, в противном случае значение будет ~0. Откройте Serial Monitor (монитор последовательного порта) (Tools >> Serial Monitor) в Arduino IDE, чтобы проверить это. Если магнит не влияет на геркон, попробуйте переставить его или использовать более мощный.

#define reed A0 //Номер пина к которому подключен геркон

int reedVal;

void setup(){
Serial.begin(9600);
}

void loop(){
reedVal = analogRead(reed); // считываем знаение A0
Serial.println(reedVal); // выводим в Serial Monitor
delay(10); // пауза 10 мс
}

Прошейте Arduino. Включите Serial Monitor (монитор последовательного порта). Он должен показывать 0.00. Начните крутить колесо, и вы увидите скорость миль/ч, изменяющуюся каждую секунду.

ЖК-дисплей

Я использовал ЖК-дисплей с последовательным интерфейсом.
Припаяйте линию BLS разъемов на обратную сторону (с контактами) макетной платы. Три разъема будут использоваться для подключения ЖК-дисплея. ЖК-дисплей хорошо в станет в эти разъемы.

Подключите 5В, GND, и TX (1 цифровой вывод Arduino) от Arduino к разъему дисплея. Смотрите на подпись выводов ЖК-дисплея, чтобы сделать всё правильно.

В нижней части ЖК-дисплея Parallax есть два переключателя и потенциометр. Потенциометром контролируется контрастность дисплея. Для правильной работы переключатели должны быть установлены как на фотографии.

Для тестирования ЖК-дисплея используйте следующий код. Почему-то на моем ЖК-дисплее начинают появляться случайные символы во время прошивки, но они исчезают после того, как я пере подключаю USB-кабель. Я думаю, что это является помехой при связи Arduino с компьютером через 1 цифровой контактный (TX) во время прошивки.

При включении на ЖК-дисплее должна отображаться надпись «Hello World».

void setup() {
Serial.begin(9600);
pinMode(1,OUTPUT); // TX-линия

Serial.write(12); // Очищаем
Serial.write(«Hello World»); // Вывод надписи
}

void loop() {
}

Подключите тумблер как показано на фотографии. Припаяйте резистор 10 кОм и зеленый провод к одному контакту, а красный провод к другому.

Подключите красный провод к 5В Arduino и к GND через резистор, а зеленый провод к D2.

Программа

Прошейте Arduino скетчем, который вы можете скачать внизу статьи. Убедитесь, что подсветка включается и выключается, а скорость отображается правильно. (Возможно, вам придется переподключить Arduino для корректной работы).

Измерьте радиус колес (в дюймах) и вставить его в строку: float radius = «»';

Я использовал прерывания по таймеру.  Для отображения скорости в км/ч необходимо внести корректировку в программу.

Батарея

Соедините разъем для батареи и тумблер последовательно, как показано на фотографии. Подключите красный провод от выключателя к Vin Arduino, а черный провод от разъема для батареи к GND Arduino.

Корпус

Я вырезал корпус для своего проекта при помощи  1/4″ лазерного резака 120 Вт. Размеры корпуса 3,5″x4″x2″.

Я смоделировал корпус в AutoCAD и сделал файлы для лазерной резки (с шиповым соединением) в Autodesk 123D Make. Затем я добавил два отверстия для тумблеров и прямоугольное отверстие для ЖК-дисплея.

Также  добавил несколько отверстий в нижней части корпуса для облегчения крепления к велосипеду.

Далее, склеил корпус древесным клеем, и отшлифовал края. Закончив корпус, я покрыл его лаком.

Установка компонентов в корпус

Закрепите тумблеры на корпусе при помощи гаек. Приклейте или привинтите ЖК-дисплей с внутренней стороны передней панели. Установите макетную плату, Arduino и батареи в корпусе и закрепить при на липучках или клее.

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

  1. Теперь вы можете выезжать с этим спидометром, однако при движении не отвлекайтесь от дороги!
  2. Оригинал статьи
  3. Прикрепленные файлы:

Источник: https://cxem.net/arduino/arduino60.php

Самодельный велокомпьютер, или как Arduino на улицу попал

Здравствуй, Хабр! Мне хотелось бы поделиться историей о создании велокопомпьютера своими руками. После покупки велосипеда я решил как-то фиксировать свой прогресс, но мобильные трекеры оказались не самым удобным решением, а из Китая ко мне уже летел заранее заказанный там BOGEER 823, что делало покупку на месте бессмысленной. Поэтому я решил попытаться сделать велокомп своими руками, заодно заложив в него основу для расширения: управление обвесом велосипеда (передний и задний свет, звонок).

Немного подготовки

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

Как я уже писал, всё завязано на геркон: магнит зафиксирован на спице, а сам геркон на «вилке».

Когда магнит на вилке замыкает геркон — это значит, что колесо сделало полный оборот и велосипед проехал расстояние равное:

2*Pi*Rшины

Первая версия

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

  • Текущая скорость
  • Дистанция текущей поездки
  • Дистанция всех поездок
  • Время в поездке
  • Текущее время
  • Подсветка
  • Возможность обмена данным с компьютером через карту памяти

К счастью, все нужные модули были под рукой:

  • Arduino nano
  • Nokia 5110 LCD (синяя подсветка, через GND)
  • Распаянные часы DS1302
  • Модуль SD карт

Я быстро собрал бутерброд: сверху экран, вторым слоем SD модуль и сама ардуинка, а часы под всем этим. Получилось довольно компактно. Конечно, если бы я использовал не готовые модули, а «рассыпуху» и травил платы, можно было бы выиграть много места. Фото результата Подключив геркон, я начал тестировать первую версию скетча, который базировался на раздобытых из сети скетча для работы с дисплеем и англоязычном спидометре. А сколько вы можете выжать из своего кресла? Убедившись в работоспособности конструкции, я решил провести первый тест. Питание я планировал от нескольких АА батареек или аккумулятора, но в тот момент под рукой их не оказалось… Поверьте, кататься на велосипеде с ноутбуком под мышкой то ещё удовольствие.Фото с первого теста Угадайте, почему не велосипед не едет назад? Тестирование принесло свои плоды. Я обнаружил ошибку в логике: сигнал от геркона всегда приравнивался к обороту колеса (если прошло минимальное время на оборот). Вроде, всё правильно, но если остановиться, зафиксировав магнит напротив геркона, то программа считала, что вы едете очень быстро.

Вторая версия

Немного доработав программу, я собрал «блок питания»: набор из пяти АА батареек. До этого я попытался использовать крону, но её для Ардуинки с обвесом оказалось мало. Так как мой 5110-й был на красной подложке, а значит, подсветка в нём управлялась логическим нулём, а не единицей, от программного управления через аналоговый порт пришлось отказаться и добавить простую кнопку.

Кроме того, аналоговый порт без данных выдавал случайные значения, но это решилось простым резистором. А вот другой сюрприз от аналогового порта заставил меня поломать голову: значение замыкания геркона при питании от батареек были не такими, как при использовании USB порта. Фото со второго теста Второй тест показал уже полную работоспособность системы. Единственной проблемой стала ошибка в расчётах: радиус «26 дюймового колеса» оказался «13.5» дюймов. В результате одометр немного врал (спасибо Яндекс.Картам за удобный инструмент для расчёта расстояний).

Читайте также:  Изготавливаем колебалку своими руками

Третья версия

Устройство работало, но конечно хотелось придать законченность внешнему виду. Так уж получилось, что всё что мне удалось найти — только один корпус, и он оказался «узким».

Пара миллиметров Пришлось изменить расположение компонентов: в корпус всё влезло, но итоговый размер стал больше.

В процессе перепайки пришлось заменить Arduino Nano и SD модуль: паяльником я владею так себе и часть выводов просто привёл в негодность.

Размеры: 72x50x28mm

Напильником тоже пришлось поработать… После того, как я проверил работоспособность всех модулей, я решил зафиксировать их эпоксидным клеем для большей устойчивости к тряскам. В таком виде компьютер я не оставлю. Предстоит шлифовка и покраска Моя торопливость сыграла злую шутку: я недостаточно хорошо зафиксировал провода под экраном и один из них стал пускать помехи (на самом деле это влияние на параметр «контрастность»). Лечится простым постукиванием, как в старых телевизорах Ещё пара исправлений в коде, и интерфейс был приведён к финальному (на текущий момент) виду. Устройство в сборе

  1. Скорость (Км/Ч)
  2. Одометр (Дистанция в метрах)
  3. Время поездки (В минутах)
  4. Текущее время (По Москве)

Неприятность преподнесли часы: один из контактов отошёл, и время стало скакать (как если бы я перепутал RST и CLK). Но что самое интересное — после поездки часы пришли в норму. Пожалуй, претензию можно предъявить к углу крепления: во время поездки смотреть неудобно. Почти вертикальный крепёж

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

Итоговый вариант

Стоимость

  • Корпус BOX-G020 — 115р
  • Эпоксилин — 95р
  • Батарейки — 60р
  • Arduino Nano — 120р
  • Nokia LCD 5110 — 102р
  • Чёрная изолента — 40р
  • SD module — 187р
  • DS1302 — 70р
  • Кейсы для батареек — 120р
  • Провода и резисторы — 80р
  • Геркон + магнит — 82р

Итого: ~1100р

Ссылки по теме

Итоги

Я получил ещё немного опыта работы с Arduino и сборки небольших работающих устройств. Весело провёл несколько часов, но что самое главное — теперь у меня есть работающий велокомпьютер. В планах написать нормальное сохранение/загрузку «глобальных» данных на карту памяти и добавить кнопку для отображения «глобальной» статистики. Для управления внешними устройствами у меня осталось шесть аналоговых портов (три кнопки & три тиристора) и где-то затерялся один цифровой, например, для дальномера (парктроник) или градусника. Очень хотелось бы решить проблему с питанием, ибо пять АА батареек на раме велосипеда не очень смотрятся. Котейка, которая помогала тестировать велокомп Код скетча

Источник: https://habr.com/post/231113/

Спидометр для велосипеда на основе Ардуино

В этом уроке мы создадим своими руками простой спидометр для велосипеда на основе микроконтроллера Ардуино. Идея состоит в том, чтобы измерить угловую скорость колеса велосипеда. Таким образом, зная диаметр и математическую легенду Пи (3.

14) можно рассчитать скорость. Также, зная количество раз, которое провернулось колесо, можно легко узнать пройденное расстояние.

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

Шаг 1. Держатель

Для этого проекта очень важно иметь сильный и стабильный держатель нашего Ардуино спидометра. Смысл в том, что велосипед может пострадать от сильного импульса, когда он попадает в дыру или когда вы решаете повеселиться и взять вел в тяжелые условия езды. Кроме того, наши входные данные фиксируется, когда магнит на колесе пересекает датчик эффекта Холла на опоре.

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

Поэтому, чтобы соблюсти все нюансы безопасности, мы решил использовать алюминиевые ленты, так как их можно легко разрезать и просверлить, они устойчивы к коррозии и довольно дешевы, что всегда хорошо для поделок своими руками. Мы также использовали некоторые гайки (с шайбами) и болты, чтобы закрепить держатель на раме, так как всё должно быть надежно закреплено на раме.

Еще одной важной частью является то, что электроника нашего спидометра Ардуино должна быть должным образом изолирована от опор, если они сделаны из какого-либо металла. Горячий клей, который мы использовали, работал отлично, он также поглощал и смягчал удары, что было хорошо для довольно хрупкого дисплея.

Шаг 2. Датчик и магнит

Измерение и входные данные проекта основаны на этой части. Идея состоит в том, чтобы поместить магнит на велосипедное колесо и добавить датчик эффекта Холла на раму так, чтобы каждый раз, когда магнит пересекал датчик, Arduino знал, что оборот завершен и он может рассчитать скорость и расстояние.

Используемый здесь датчик — классический датчик с эффектом Холла А3144. Этот датчик понижает свою выходную мощность, когда конкретный полюс направлен в правильной ориентации. Ориентация очень важна, так как внешний полюс не повлияет на выход.

Выше несколько фото, показывающих правильную ориентацию. Также для датчика эффекта Холла требуется нагрузочный резистор 10 кОм, но в этом проекте заменен на нагрузочные резисторы 20 кОм в Arduino.

Тщательное размещение магнита очень важно. Если поместить его немного дальше, это может привести к непоследовательному чтению или отсутствию оборотов, а если расположить его очень близко, магнит может дотронуться до датчика, что не очень желательно.

Шаг 3. Дисплей

Этот дисплей теоретически необязателен, но вам нужно что-то, чтобы отображать скорость и расстояние в реальном времени. Думать об использовании ноутбука совершенно абсурдно. Мы использовали 0,96-дюймовый OLED-дисплей с I2C в качестве протокола связи между ведомым и ведущим устройствами.

Изображения выше показывают три режима, между которыми автоматически переключается Arduino.

  1. «Start» в правом нижнем углу — это когда Arduino только начал работу и успешно загрузился.
  2. Скорость в км/ч. Этот режим отображается только тогда, когда велосипед находится в движении, и автоматически отключается после его остановки.
  3. Последний, с метрами в качестве единиц, очевидно, — расстояние, которое прошел вел. Как только вел останавливается, Arudino переключается на отображение расстояния в течение 3 секунд.

Эта система не идеальна. Он на мгновение отображает пройденное расстояние, даже когда байк находится в движении. Может это не идеально, но это достаточно мило.

Шаг 4. Источник питания

Проект, будучи немного громоздким, не всегда может иметь под рукой розетку для зарядки. Поэтому из-за лени было решено просто использовать блок питания в качестве источника питания и использовать мини-USB-кабель для подключения питания USB от блока питания к Arduino Nano.

Но вы должны тщательно выбрать powerbank. Важно иметь правильную геометрию, чтобы ее можно было легко установить. Также источник питания должен быть немного тупым. Дело в том, что для экономии энергии powerbank предназначен для отключения выхода, если потребление тока не превышает определенного порогового значения.

Скорее всего это пороговое значение составляет не менее 200-300 мА. Наша схема будет иметь максимальное потребление тока не более 20 мА. Таким образом, обычный банк питания отключит выход. Это может привести вас к мысли, что в вашей цепи есть какая-то неисправность. Этот конкретный банк питания на фото выше работает с таким небольшим током.

Шаг 5. Стоп-сигнал (опционально)

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

Если мы тормозим, велосипед замедляется. Это означает, что если мы рассчитываем ускорение и если оно оказывается отрицательным, можно включить стоп-сигналы. Это, однако, означает, что свет включится, даже если мы просто перестанем крутить педали.

Также мы не добавили транзистор в световую цепь, что абсолютно рекомендуется. Если кто-то сделает этот проект и правильно интегрирует эту часть, мы бы были более чем рады увидеть её и добавили бы картинки сюда. Ток мы получаем напрямую от цифрового контакта 2 Arduino Nano.

Шаг 6. Код проекта

Скачать или скопировать код для спидометра Ардуино вы можете ниже:

Скачать arduino-spidometr.ino
#include
#include
//#include
//#include

#define pi 3.14
#define brakelight 8
#define diameter .66
#define numberofreadings 6
#define cutoff 3
#define velocitycutoff 1.2 // in m/s
#define displaychangeafter 5000

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

const int chipSelect= 9;

int n=0;
int count=0;
double instant=0;
double previnstant=0;
double prevprevinstant=0;
int wheelcount=0;
float velocity=0;
float accleration=0;
float distance=0;
int temp;
bool unit1=0;
bool unit2=1;
bool unit3=0;
int unitmillis1=0;
int unitmillis2=0;
int unitmillis3=0;

void setup()
{
pinMode(2,INPUT_PULLUP);
pinMode(brakelight,OUTPUT);
attachInterrupt(digitalPinToInterrupt(2),cross,FALLING);

display.begin(SSD1306_SWITCHCAPVCC , 0x3C);
display.setTextColor(WHITE);
display.setTextSize(3);

/*

if (!SD.begin(chipSelect)) {

display.setTextSize(1);
display.setCursor(0,23);
display.print(«No SD Card»);
}
display.display();
display.setTextSize(3);

File dataFile = SD.open(«datalog.txt»,FILE_WRITE);

if(dataFile)
{
dataFile.println(«RESTART,RESTART,RESTART,RESTART»);
dataFile.println(«TIME,Accleration,Speed,Distance»);
dataFile.close();
}
*/
}

void loop()
{

if(0>accleration)
{
digitalWrite(brakelight,HIGH);
}

if(02)
{
distance=diameter*wheelcount*pi;
velocity=diameter/(instant-previnstant)*pi;
accleration=2*diameter*pi*(1/(instant-previnstant)-1/(previnstant-prevprevinstant))/(instant-prevprevinstant);
velocity=velocity*1000;
accleration=accleration*100000000;

unit3=0;
unit2=0;
unit1=0;

}

}

Как всегда мы пишем программу на Arduino IDE. Я изначально стремился записать параметры на SD-карту. Но, к сожалению, в этом случае мне пришлось бы использовать три библиотеки: SD.h, Wire.h и SPI.h. В сочетании с ядром они занимали бы 84% доступной памяти, и IDE предупредила о проблемах со стабильностью.

Источник: https://ArduinoPlus.ru/arduino-spidometr-dlya-velosipeda/

Ссылка на основную публикацию
Adblock
detector