В статье описано несложное устройство, позволяющее оценить скорость движения велосипеда и пройденное им расстояние. Спидометр выполнен на основе платы 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 или что-нибудь ещё. Ресурсов микроконтроллера вполне достаточно, например, для определения средней и максимальной скорости движения, времени в пути и других параметров.
Надо признать, что описанный велоспидометр пока не лишён недостатков. Он требует частой замены элементов питания, показания светодиодного индикатора плохо различимы при ярком солнце, всё-таки нужен какой-либо орган управления для выбора режимов работы. Проблемы вполне решаемы — требуются лишь время, энтузиазм и фантазия…
ЛИТЕРАТУРА
- 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
Возможно, вам это будет интересно:
Источник: http://meandr.org/archives/29243
Этот проект позволяет следить за скоростью езды на велосипеде при помощи 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 и батареи в корпусе и закрепить при на липучках или клее.
Оберните провода от геркона вокруг рамы, избегая движущихся частей велосипеда. Я использовал кабельные стяжки для крепления спидометра к рулю.
- Теперь вы можете выезжать с этим спидометром, однако при движении не отвлекайтесь от дороги!
- Скачать файлы к проекту
- Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта 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) — время в пути, ч.мм (двоеточие мигает)
Источник: 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 и батареи в корпусе и закрепить при на липучках или клее.
Оберните провода от геркона вокруг рамы, избегая движущихся частей велосипеда. Я использовал кабельные стяжки для крепления спидометра к рулю.
- Теперь вы можете выезжать с этим спидометром, однако при движении не отвлекайтесь от дороги!
- Оригинал статьи
- Прикрепленные файлы:
Источник: 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
Напильником тоже пришлось поработать… После того, как я проверил работоспособность всех модулей, я решил зафиксировать их эпоксидным клеем для большей устойчивости к тряскам. В таком виде компьютер я не оставлю. Предстоит шлифовка и покраска Моя торопливость сыграла злую шутку: я недостаточно хорошо зафиксировал провода под экраном и один из них стал пускать помехи (на самом деле это влияние на параметр «контрастность»). Лечится простым постукиванием, как в старых телевизорах Ещё пара исправлений в коде, и интерфейс был приведён к финальному (на текущий момент) виду. Устройство в сборе
- Скорость (Км/Ч)
- Одометр (Дистанция в метрах)
- Время поездки (В минутах)
- Текущее время (По Москве)
Неприятность преподнесли часы: один из контактов отошёл, и время стало скакать (как если бы я перепутал 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.
- «Start» в правом нижнем углу — это когда Arduino только начал работу и успешно загрузился.
- Скорость в км/ч. Этот режим отображается только тогда, когда велосипед находится в движении, и автоматически отключается после его остановки.
- Последний, с метрами в качестве единиц, очевидно, — расстояние, которое прошел вел. Как только вел останавливается, 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/