Спидометр своими руками на ардуино

Добавил пользователь Владимир З.
Обновлено: 19.09.2024

Добрый вечер!
Собственно по замыканию геркона мы считаем сколько прошло с предыдущего замыкания и делим длину окружности колеса на эту величину. Осталось описать условия прерывания.

Ниже предлагаю решение:

  • Вопрос задан более трёх лет назад
  • 12404 просмотра

Оценить 1 комментарий

1. Выкидываем геркон — он у вас быстро выйдет из строя. Используем датчик Холла.
2. Выкидываем Arduino.
3. В чем проблема составить простую программу, если у Вас даже есть примеры?

Сначала выкидываете arduino IDE, затем отказываетесь от библиотек, предоставляемых arduino и читаете мануалы к AVR. И тут окажется, что есть такая штука, как input capture. При замыкании геркона процессор аппаратно помещает в специальный регистр время, когда это произошло, а потом вызывает прерывание.
Только висит IC не на том таймере, который используется для подсчета времени в arduino.

Без использования IC у вас нормально спидометр работать не будет.

А почему выкидывать? Просто я тут хочу практически с нуля ввязаться в программирование плис для себя… вобще ничерта в этом не понимая (и не надо меня тут отговаривать). Но пока только читаю про всё это — и вот почему это так плохо?

Следующий шаг — библиотеки Arduino. Да, они просты в использовании и там есть немало защит от дурака. Начать писать с ним, пожалуй, проще. Но велик шанс, что вы во что-то упретесь и придется переписывать большие куски программы. В данном конкретном случае человеку нужны IC, которая не поддерживается библиотеками arduino. Причем, по крайней мерер на мой плате (arduino mega), IC доступно на таймерах TIMER4 и TIMER5, а arduino для отсчета времени использует TIMER1. Т.е. нужно еще переписать функции получения времени.

P.S. А еще в arduino есть баги и всем на них пофиг. Наличие патча и подробного объяснения, что происходит не достаточно для исправдения проблем.

Все же первопричина не в IDE. И не в библиотеках.
Arduino — это ограничения и абстракция там, где она вредна. Это игрушка или способ быстро эмулировать некий модуль.
Если Вы пытаетесь сделать что-либо серьезное, не надо использовать игрушки.

Если у Вас действительно есть желание разобраться в радиоэлектронике, не используйте игрушки.
Метафорично для примера сравню Basic и С.

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

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

Картинка для привлечения внимания

Немного физики

Для измерения частоты вращения нам понадобится датчик положения колеса/вала/круга/итп. Датчик ставится как правило один. Возможно, что он будет срабатывать не один раз на каждый оборот. Например, у вас датчик Холла и 4 магнита на колесе. Таким образом, для правильного вычисления частоты нужно знать:

  • количество срабатываний датчика на один оборот К;
  • минимальная ожидаемая частота Мин.
  • максимальная ожидаемая частота Макс.

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

С количеством срабатываний понятно, но зачем ещё эти мины и максы? Давайте рассмотрим сначала варианты расчёта частоты.

Со скоростью всё проще, достаточно знать число π, диаметр колеса, а частоту вращения мы уже знаем.

Болванка для кода

Так как мы имеем дело с такими нежными величинами как время и пространство, то лучше сразу освоить прерывания.

Обратите внимание на модификатор volatile у переменной counter. Все переменные, которые будут изменяться в обработчике прерывания (ISR) должны быть volatile. Это слово говорит компилятору, что переменная может изменяться неожиданно и доступ к ней нельзя оптимизировать.

Функция ISR() вызывается каждый раз, когда появляется единица на ноге fqPin. Мы эту функцию не вызываем, это делает сам контроллер. Он это делает, даже когда основная программа стоит в ступоре на функции delay(). Считайте, что ISR() обслуживает событие, от вас не зависящее и данное вам свыше как setup() и loop(). Контроллер прерывает выполнение вашей программы, выполняет ISR() и возвращается обратно в ту же точку, где прерывал.

Тело функции ISR() должно быть максимально коротким, точнее, сама функция должна выполняться максимально быстро. Это важно, так как прерывается выполнение вашего кода, который может оказаться чувствительным к непредвиденным задержкам. Некоторые библиотеки отключают прерывания для выполнения чувствительных с задержкам операций, например для управления светодиодной лентой WS2812.

Считаем обороты за единицу времени.

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

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

Для повышени точности на малой скорости можно увеличить число К, как это сделано, скажем, в автомобильной технике для датчика ABS. Можно увеличить время подсчёта. Делая и то и другое мы подходим ко второй проблеме — переполнению счётчика. Да, переполнение легко лечится увеличением количества бит, но арифметика процессора Arduino не умеет считать 64-битные числа столь быстро, как хотелось бы и как она это делает с 16-разрядными.

Увеличение времени расчёта тоже не очень хорошо тк нам надо знать частоту прямо сейчас, вот при нажатии на газ, а не через пару секунд. Да и через пару секунд мы получим скорее некое среднее значение. За это время можно несколько раз сделать врумм-врумм.

Есть другой метод. Он лишён вышеописанных недостатков, но, как водится, имеет свои.

Считаем интервал между отсчётами

Мы можем засечь время одного отсчёта и другого, вычислить разницу. Величина, обратная вычисленному интервалу и есть частота. Круто! Но есть минусы.

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

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

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

Методом проб и ошибок я подобрал интервал отображения данных на дисплее в 250мс как оптимальный. Если чаще, то цифры размазываются, если реже — бесит тормознутость.

Комбинированный метод

Можно попробовать объединить достоинства обоих методов.

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

Обратите внимание, что за интервал считается не время опроса, как в первом примере, а время от последнего отсчёта до предыдущего последнего отсчёта в прошлом опросе. Это заметно поднимает точность вычисления.

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

Если использовать кооперативную многозадачнось, то можно сделать подсчёт, скажем раз 100мс, а вывод на дисплей раз в 250мс. Очень короткий интервал опроса снизит чувствительность к низким частотам.

Как говорят в рекламе, "но это ещё не всё".

Ошибки дребезга

Для устрашения вас предположу, что измеряем частоту вращения двигателя от индуктивного датчика зажигания. То есть, грубо говоря, на высоковольтный провод намотан кусок кабеля и мы измеряем индукцию в нём. Это довольно распространённый метод, не правда ли? Что же здесь сложного может быть? Самая главная проблема — современные системы зажигания, они дают не один импульс, а сразу пачку.




Но даже обычная система зажигания даёт переходные процессы:




Старинные же кулачковые контактные вообще показывают замечательные картинки.

Как с этим бороться? Частота вращения не может вырасти мгновенно, не даст инерция. Кроме того, в начале статьи я предложил ограничить частоту сверху разумными рамками. Отсчёты, что происходят слишком часто можно просто игнорировать.

Другой вид помех — это пропадание отсчётов. Из-за той же инерции у вас не может измениться частота в два раза за одну миллисекунду. Понятно, что это зависит от того, что вы собственно измеряете. Частота биения крыльев комара может, вероятно и за миллисекунду упасть до нуля.

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

Особенности измерения скорости движения и скорости вращения.

При измерении скорости вращения бензинового двигателя надо обязательно учесть величину К, которая совсем не очевидна. Например, вы намотали провод на кабель свечи и ожидаете, что там будет одна искра на один оборот. Это совсем не так. Во-первых, у 4-тактного двигателя вспышка происходит один раз на два оборота, у 2-тактного один раз на оборот коленвала. Во-вторых, для упрощения системы зажигания коммутатор подаёт искру на неработающие в данный момент цилиндры, типа на выпуске. Для получения правильного К надо почитать документацию на двигатель или подсмотреть показания эталонного тахометра.

При измерении скорости движения частота обновления дисплея не имеет большого значения, особенно, если вы рисуете цифры, а не двигаете стрелку. Даже обновление информации раз в секунду не вызовет отторжения. С оборотами двигателя всё наоборот, индикатор должен откликаться гораздо быстрее на изменение оборотов.

Вывод информации

Типичная обида начинающего разработчика автомобильной и мотоциклетной электроники "стрелки дёргаются, цифры нечитабельны" лечится простым способом — надо обманывать клиента. Вы что думаете, автомобильный тахометр всегда показывает вам правду? Конечно же нет! Хотя вам этот обман нравится и вы хотите, чтобы ваш прибор дурил голову так же.

Стрелки

Если включить зажигание на новом модном автомобиле или мотоцикле, стрелки приборов сделают красивый вжух до максимума и медленнее опадут до нуля. Вот! Вот это нам и надо сделать. Надо, чтобы при показе максимальной величины стрелка не метнулась к ней мгновенно и не упала как акции лохотрона в ноль.

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

Вот пример с нелинейным выводом показаний:

Вы можете поиграть с коэффициентами. Этот же принцип используется при выводе громкости сигнала, например, у любого аналогового индикатора: стрелки, полоски, яркость, цвет, размер итп. Приведённый пример самый простой, но и не самый красивый. Предлагайте ваши варианты в комментариях.

Цифры

С цифрами всё намного сложнее. Быстрые изменения показаний приводят к тому, что несколько порядков сливаются в мутное пятно. Для скорости, как и писал выше, можно задать интервал раз в секунду и глаз успеет прочитать три цифры.

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

Я предлагаю менять частоту вывода информации на дисплей в зависимости от степени изменения величины. Если обороты меняются, скажем, на 5% от последнего подсчёта, а не показа — можно затупить и показывать раз в 300-500мс. Если на 20%, то показывать раз в 100мс.

Можно огрубить шкалу и показывать только две значащие цифры

С учётом мототематики, можно довольно точно показывать обороты холостого хода как описано чуть выше и огрублять вывод на оборотах от двух холостых. На высоких оборотах для гонщиков важнее делать блинкеры типа "передачу вниз", "передачу вверх" и "ты спалишь движок". То есть держать двигатель около максимального крутящего момента и не дать ему крутиться выше максимальных разрешённых оборотов. Блинкеры замечательно делаются с помощью SmartDelay когда можно унаследовать от этого класса свой с заданной ногой контроллера и частотой мигания, там есть методы для переопределения и они вызываются раз в заданное время.



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

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

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

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

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

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







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



Убедившись в работоспособности конструкции, я решил провести первый тест. Питание я планировал от нескольких АА батареек или аккумулятора, но в тот момент под рукой их не оказалось… Поверьте, кататься на велосипеде с ноутбуком под мышкой то ещё удовольствие.




Угадайте, почему не велосипед не едет назад?

Тестирование принесло свои плоды. Я обнаружил ошибку в логике: сигнал от геркона всегда приравнивался к обороту колеса (если прошло минимальное время на оборот). Вроде, всё правильно, но если остановиться, зафиксировав магнит напротив геркона, то программа считала, что вы едете очень быстро.

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

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











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



Пришлось изменить расположение компонентов: в корпус всё влезло, но итоговый размер стал больше. В процессе перепайки пришлось заменить 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, способного измерять скорость движения велосипеда или любого другого транспортного средства и передавать значение этой скорости с помощью технологии Bluetooth на Android приложение на смартфоне. Приложение на Android мы разработали с использованием программной среды Processing. Устройство питается от литиевой батарейки (аккумулятора) 18650, поэтому легко устанавливается и транспортируется на любом движущемся средстве. Также в качестве бонуса в данное мобильное приложение мы добавили функцию зарядки мобильного телефона. Поэтому данное устройство также можно использовать как внешний аккумулятор (power bank) для вашего мобильного телефона во время движения транспортного средства поскольку 18650 имеет высокую плотность заряда и его можно легко заряжать и разряжать.

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

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

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Pro Mini (5V 16MHz) (купить на AliExpress).
  2. FTDI плата (также для программирования Arduino Pro Mini можно использовать плату Arduino UNO).
  3. Повышающий конвертер с 3V до 5V (DC-DC) с выходом для USB зарядки.
  4. Модуль заряда литиевой батареи (аккумулятора) TP4056 (купить на AliExpress).
  5. Bluetooth модуль (HC-05/HC-06) (купить на AliExpress).
  6. Датчик Холла (Hall effect sensor) US1881/04E (купить на AliExpress).
  7. Литиевая батарея (аккумулятор) 18650 (купить на AliExpress).
  8. Небольшой кусок магнита.
  9. Перфорированная плата (Perf Board).
  10. Соединительные колодки (папа и мама).
  11. Набор для пайки.
  12. Небольшая закрытая коробка чтобы разместить в ней наше устройство

Программное обеспечение

Arduino IDE
Processing IDE с android ADK (только если вы самостоятельно хотите разрабатывать мобильное приложение для этого проекта)
Windows/Mac PC
Мобильный телефон (смартфон) на Android

Принцип измерения скорости с использованием датчика Холла и платы Arduino

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

Для работы нашего устройства необходимо прикрепить небольшой кусок магнита на колесо нашего транспортного средства. При этом всегда когда магнит будет пересекать (находиться рядом) датчик Холла, датчик будет обнаруживать это и передавать соответствующую информацию на плату Arduino.

Каждый раз, когда рядом с датчиком Холла будет обнаруживаться магнит будет генерироваться прерывание в плате Arduino. В нашем проекте мы будем использовать непрерывный таймер на основе функции millis() и вычислять время необходимое для совершения колесом двух полных оборотов (для минимизации ошибки) с помощью следующей формулы:

Timetaken = millis() – pevtime;

Поскольку мы теперь знаем это время мы можем рассчитать число оборотов в минуту (rpm, rotations/revolutions per minute) по следующей формуле:

rpm = (1000/timetaken) * 60;

где 1000/timetaken – это число оборотов в секунду (rps, Revolutions per second), мы его умножаем на 60 чтобы конвертировать число оборотов в секунду в число оборотов в минуту (rpm).

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

v= radius_of_wheel * rpm * 0.37699;

После расчета скорости Arduino передает ее значение к нам на смартфон при помощи Bluetooth модуля.

Работа схемы

Схема устройства представлена на следующем рисунке.

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

Последовательность сборки главной платы спидометра на основе Arduino

Вид основной платы спидометра с подключенными соединительными проводами

Когда все соединения на ней сделаны ее можно протестировать с использованием литиевой батареи (аккумулятора) 18650. По своей сущности литиевые батареи в некоторой степени взрывоопасны, поэтому их следует устанавливать, соблюдая меры предосторожности. По этой причине мы и используем в нашем проекте модуль заряда литиевых аккумуляторов TP4056, который обеспечивает защиту при заряде и разряде аккумулятора, а также защиту от смены полярности. Поэтому теперь наш аккумулятор можно будет без проблем заряжать с использованием обычной micro USB зарядки и безопасно разряжать. Некоторые важные характеристики модуля TP4056 приведены в следующей таблице.

Параметр Значение (на одну ячейку)
Under Voltage cut-off 2.4V
Over voltage Cut-off 4.2V
Ток заряда 1A
Защита от превышения напряжения и смены полярности
Микросхемы TP4056 (charger IC) и DW01 Protection IC
Светодиодные индикаторы красный - идет заряд, зеленый - зарядка окончена

Теперь займемся платой с датчиком Холла, которая будет содержать всего два компонента – сам датчик Холла и резистор на 10 кОм. Соединения на ней показаны на схеме устройства, приведенной выше. После подключения к ней соединительных проводов мы должны получить примерный вид устройства, показанный на следующем рисунке:

Внешний вид платы с датчиком Холла для спидометра

Следующий ключевой шаг в сборке нашего проекта – это соединение аккумулятора 18650 к контактам B+ и B- модуля TP4056 с использованием провода. Поскольку литиевые аккумуляторы взрывоопасны, то крайне не рекомендуется использовать здесь паяное соединение. Хотя ряд радиолюбителей все же делают это, помните о том, что в этом случае вы подвергаете ваше устройство риску повреждения. Простой способ преодолеть это – использовать магниты как показано на следующем рисунке.

Правильное подключение соединительных проводов к литиевому аккумулятору

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

Программирование Arduino

Программа для этого проекта крайне проста. Нам всего лишь будет нужно рассчитывать скорость вращения колеса и передавать ее на смартфон с помощью технологии Bluetooth. Полный текст программы с необходимыми комментариями приведен в конце статьи.

Каждый раз когда датчик Холла обнаруживает вблизи себя магнит, он генерирует прерывание. Функция magnet_detect() будет вызываться для обработки этого прерывания. В этой функции производится расчет числа оборотов колеса в минуту.

Когда число оборотов колеса в минуту известно в функции loop () можно вычислить скорость движения транспортного средства.

Мобильное приложение на Android для работы спидометра

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

  1. Скачайте APK file приложения по следующей ссылке - Android Application for Speedometer. Работает для версии Android 4.4.2 и выше. Извлеките APK файл из zip файла.
  2. Передайте этот .Apk файл с компьютера на ваш смартфон.
  3. Разрешите установку приложения из неизвестного источника в настройках вашего смартфона.
  4. Установите приложение.

Если установка приложения прошла успешно, то вы на экране своего смартфона увидите установленное приложение под именем “Processing_code” как показано на следующем рисунке:

Разработка своего собственного Android приложения для работы спидометра

Данная программа для Android устанавливает соединение с Bluetooth модулем, подключенном к плате Arduino и затем принимает передаваемые платой Arduino значения скорости транспортного средства. Программа рисует небольшой график скорости. Но если вам не нравится наш интерфейс приложения, то вы можете кастомизировать его под собственные нужды используя его скачанный по выше приведенной ссылке исходный код.

Также можете посмотреть другие проекты на нашем сайте, использующие программы, написанные в программной среде Processing:
- игра в Ping Pong с помощью Arduino;
- радар на Arduino, управляемый с помощью мобильного приложения.

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

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


Установка платы с датчиком Холла на колесе

Мы использовали 3D принтер для изготовления всех необходимых коробочек и креплений, поэтому мы не были ограничены в дизайне этих вещей. Если у вас нет доступа к 3D принтеру пропустите эту часть статьи и используйте свою собственную фантазию для закрепления спидометра на вашем транспортном средстве.

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

Необходимые размеры перфорированной платы

Полный комплект файлов дизайна и STL файлов для 3D печати можно скачать по следующей ссылке. Если размеры вашей платы совпадают с нашими то вы можете использовать скачанные STL файлы для печати корпусов устройства. Если же размеры не совпадают, то вы можете самостоятельно их подкорректировать, используя скачанные файлы.

Сначала напечатайте на 3D принтере корпус для нашей вспомогательной платы, содержащей датчик Холла и резистор, и разместите их на вашем транспортном средстве как показано на следующих рисунках.

Корпус для платы с датчиком Холла
Установка платы с датчиком Холла на колесе

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

Внешний вид основной платы спидометра в сборе

3D модель основной платы спидометра

Теперь можно приступать к дизайну корпуса для нашей основной платы. Мы разбили дизайн этого корпуса на два файла, на одной части будет смонтирована вся электроника, а вторая будет неподвижно закреплена на велосипеде с помощью гаек и болтов. Эти две части в любой момент можно будет легко соединять и разъединять. После размещения в корпусе электроники мы получим следующий вид нашего устройства:


Размещенная основная плата спидометра в корпусе

Как вы можете видеть, в передней части корпуса имеются два отверстия. Одно будет использоваться для вывода USB, через который мы будем заряжать наш мобильный телефон. А второе будет использоваться для micro USB, через которое мы сможем заряжать наш литиевый аккумулятор.

После этого печатаем вторую часть корпуса для главной платы и проверяем насколько хорошо они стыкуются друг с другом.



Если вы удовлетворены качеством стыковки этих двух частей, то вы можете установить неподвижную часть корпуса на велосипед.

Приспособления для крепления основной платы
Крепление неподвижной части корпуса основной платы спидометра

Теперь подсоединяем аккумулятор к нашему устройству. Желательно замотать его в герметичную ленту чтобы обеспечить целостность соединений.

Обматываем аккумулятор герметичной лентой

Располагаем аккумулятор внутри корпуса

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

Внешний вид установленного спидометра на велосипеде
Соединение основной платы с дополнительной

Исходный код программы

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

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

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

Читайте также: