Оглавление:

Умный тренажер для домашних велосипедов своими руками: 5 шагов
Умный тренажер для домашних велосипедов своими руками: 5 шагов

Видео: Умный тренажер для домашних велосипедов своими руками: 5 шагов

Видео: Умный тренажер для домашних велосипедов своими руками: 5 шагов
Видео: Мини велотренажер какая польза и вред? Честный отзыв 2024, Ноябрь
Anonim
Умный тренажер для домашних велосипедов своими руками
Умный тренажер для домашних велосипедов своими руками
Умный тренажер для домашних велосипедов своими руками
Умный тренажер для домашних велосипедов своими руками
Умный тренажер для домашних велосипедов своими руками
Умный тренажер для домашних велосипедов своими руками

Вступление

Этот проект начался как простая модификация домашнего велосипеда Schwinn IC Elite, в котором для настройки сопротивления используются простой винт и войлочные прокладки. Проблема, которую я хотел решить, заключалась в том, что шаг винта был слишком большим, поэтому диапазон от невозможности крутить педали до полного свободного вращения колеса составлял всего пару градусов на ручке сопротивления. Сначала я поменял винт на M6, но потом мне пришлось бы сделать ручку, так почему бы просто не использовать левый шаговый двигатель NEMA 17, чтобы изменить сопротивление? Если уже есть какая-то электроника, почему бы не добавить к компьютеру измеритель мощности кривошипа и Bluetooth-соединение, чтобы сделать умный тренажер?

Это оказалось сложнее, чем ожидалось, потому что не было примеров того, как имитировать измеритель мощности с помощью Arduino и Bluetooth. В итоге я потратил около 20 часов на программирование и интерпретацию спецификаций BLE GATT. Я надеюсь, что предоставив пример, я смогу помочь кому-то не тратить так много времени на попытки понять, что именно означает «поле типа AD данных службы» …

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

Весь проект находится на GitHub:

github.com/kswiorek/ble-ftms

Я настоятельно рекомендую использовать Visual Studio с подключаемым модулем VisualGDB, если вы планируете сделать что-то более серьезное, чем просто скопировать мой код.

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

Кредиты

Спасибо stoppi71 за его руководство по изготовлению измерителя мощности. Шатуны я сделал по его проекту.

Запасы:

Материалы для этого проекта сильно зависят от того, какой байк вы модифицируете, но есть и универсальные детали.

Кривошип:

  1. Модуль ESP32
  2. HX711 Датчик веса ADC
  3. Тензодатчики
  4. MPU - гироскоп
  5. Небольшой Li-Po аккумулятор (около 750 мАч)
  6. Термоусадочный рукав
  7. A4988 Драйвер шагового двигателя
  8. Регулятор 5В
  9. Разъем Arduino для бочек
  10. Блок питания 12 В Arduino

Консоль:

  1. Шаговый двигатель NEMA 17 (должен быть достаточно мощным,> 0,4 Нм)
  2. Стержень M6
  3. 12864 жк
  4. WeMos LOLIN32
  5. Тактовые переключатели

Оборудование

Для этого вам, вероятно, удастся использовать только 3D-принтер, однако вы можете сэкономить много времени, вырезав корпус лазером, и вы также можете изготовить печатные платы. Файлы DXF и gerber находятся на GitHub, поэтому вы можете заказать их локально. Муфта между резьбовым стержнем и двигателем была повернута на токарном станке, и это может быть единственной проблемой, поскольку деталь должна быть достаточно прочной, чтобы тянуть за колодки, но в этом конкретном велосипеде не так много места.

С момента создания первого велосипеда я приобрел фрезерный станок, который позволяет мне делать пазы для датчиков в кривошипе. Это немного упрощает их приклеивание, а также защищает их, если что-то ударит по рукоятке. (У меня несколько раз падали эти датчики, поэтому я хотел быть в безопасности.)

Шаг 1: Кривошип:

Кривошип
Кривошип
Кривошип
Кривошип
Кривошип
Кривошип

Лучше всего просто следовать этому руководству:

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

Правильные соединения уже есть, поэтому вам просто нужно припаять пары проводов непосредственно к этим восьми контактным площадкам на плате.

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

Чтобы собрать печатную плату:

  1. Вставьте золотые булавки снизу (сторона со следами) во все отверстия, кроме вертикальных около дна.
  2. Поместите три платы (ESP32 вверху, затем MPU, HX711 внизу) так, чтобы золотые булавки проходили через оба отверстия.
  3. Припаиваем разъемы к платам сверху
  4. Отрежьте золотые булавки снизу. (Попробуйте сначала разрезать их перед сборкой, чтобы вы знали, что ваши «золотые булавки» внутри не из стали - из-за этого их почти невозможно разрезать, и вам нужно их подпилить или отшлифовать)
  5. припаяйте оставшиеся штифты к нижней части платы.
  6. Загрузите прошивку для шатуна

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

Этот метод изготовления доски не идеален, поскольку доски занимают много места, в которое вы могли бы уместить другие вещи. Лучше всего припаять все компоненты к плате напрямую, но мне не хватает навыков, чтобы самому паять эти небольшие SMD-модули. Мне нужно было бы заказать его в собранном виде, и я, вероятно, допустил бы некоторые ошибки и в конечном итоге заказал их три раза и ждал год, прежде чем они прибудут.

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

ВАЖНЫЙ

Датчик HX711 по умолчанию настроен на 10 Гц - это очень медленно для измерения мощности. Вам нужно поднять контакт 15 с платы и подключить его к контакту 16. Это поднимет контакт ВЫСОКОГО уровня и активирует режим 80 Гц. Эти 80 Гц, кстати, задают частоту всего цикла Arduino.

использование

ESP32 запрограммирован на переход в спящий режим через 30 секунд без подключенного устройства Bluetooth. Чтобы снова включить его, нужно нажать кнопку сброса. Датчики также получают питание от цифрового вывода, который в спящем режиме становится НИЗКИМ. Если вы хотите протестировать датчики с помощью примера кода из библиотек, вам нужно установить контакт ВЫСОКОГО уровня и немного подождать, прежде чем датчики включатся.

После сборки датчики необходимо откалибровать, считывая значение без усилия, а затем с приложением веса (я использовал гирю весом 12 или 16 кг, подвешенную на педали). Эти значения необходимо указать в коде powerCrank.

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

  1. Опустите рукоятку вниз, пока индикатор не начнет мигать.
  2. Через пару секунд свет загорится - не трогайте его.
  3. Когда свет выключается, он устанавливает текущую силу, определяемую как новый 0.

Если вы хотите просто использовать кривошип без консоли, код здесь, на github. Все остальное работает так же.

Шаг 2: Консоль

Консоль
Консоль
Консоль
Консоль
Консоль
Консоль

Корпус вырезан из акрила толщиной 3 мм, кнопки напечатаны на 3D-принтере, есть прокладки для ЖК-дисплея, вырезанные из акрила толщиной 5 мм. Он приклеен горячим клеем (он неплохо приклеивается к акрилу), а также имеется напечатанный на 3D-принтере «кронштейн» для крепления печатной платы к ЖК-дисплею. Контакты для ЖК-дисплея припаяны с нижней стороны, поэтому он не мешает работе ESP.

ESP припаян в перевернутом виде, поэтому порт USB умещается в корпусе.

Отдельная печатная плата кнопки приклеена горячим клеем, поэтому кнопки фиксируются в своих отверстиях, но при этом нажимают переключатели. Кнопки подключены к плате с помощью разъемов JST PH 2.0, и порядок контактов легко определить из схемы.

Очень важно установить шаговый драйвер в правильной ориентации (потенциометр рядом с ESP).

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

Консоль крепится с помощью лазерной резки «дужек» и застежек-молний. Маленькие зубчики впиваются в руль и удерживают консоль.

Шаг 3: Мотор

Мотор
Мотор
Мотор
Мотор
Мотор
Мотор

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

Часть стержня с резьбой M6 ввинчивается в муфту и натягивается на латунную гайку M6. Я обработал его на станке, но его так же легко сделать из куска латуни с помощью напильника. Вы даже можете приварить некоторые биты к обычной гайке, чтобы она не вращалась. Гайка, напечатанная на 3D-принтере, также может быть решением.

Резьба должна быть более тонкой, чем у стандартного винта. Его шаг составляет около 1,3 мм, а для M6 - 0,8 мм. Мотор не имеет достаточного крутящего момента, чтобы повернуть винт приклада.

Гайку нужно хорошо смазать, так как на высоких настройках мотор еле поворачивает винт.

Шаг 4: Конфигурация

Конфигурация
Конфигурация
Конфигурация
Конфигурация

Чтобы загрузить код в ESP32 из Arduino IDE, вам необходимо следовать этому руководству:

Плата называется WeMos LOLIN32, но работает и модуль Dev.

Я предлагаю использовать Visual Studio, но она часто может сломаться.

Перед первым использованием

Кривошип нужно настроить в соответствии с шагом «Кривошип».

Используя приложение «nRF Connect», вам необходимо проверить MAC-адрес кривошипа ESP32 и установить его в файле BLE.h.

В строке 19 IndoorBike.ino вам нужно указать, сколько оборотов винта необходимо, чтобы установить сопротивление от полностью ослабленного до максимального. («Максимум» является субъективным намерением, с помощью этого параметра вы регулируете сложность.)

В умном тренажере есть «виртуальные шестерни» для их правильной настройки, вам необходимо откалибровать их по строкам 28 и 29. Вам нужно крутить педали с постоянной частотой вращения педалей при заданном значении сопротивления, затем считать мощность и установить ее в файл. Повторите это еще раз с другой настройкой.

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

Строка 36. устанавливает виртуальные шестерни - количество и передаточные числа. Вы вычисляете их, разделив количество зубьев передней шестерни на количество зубьев задней шестерни.

В строке 12. вы указываете вес гонщика и велосипеда (в [ньютонах] масса, умноженная на ускорение свободного падения!)

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

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

COM-порт отладки отправляет прямые двоичные данные, полученные через Bluetooth, в кавычках ('') и данные моделирования.

Конфигуратор

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

На вкладке «Шестерни» вы можете установить передаточное число каждой шестерни, перемещая ползунки. Затем вам нужно скопировать бит кода, чтобы заменить определенные шестерни в коде.

На вкладке «Оценка» вам дается график линейной функции (да, оказывается, самый ненавистный предмет в математике действительно полезен), которая берет оценку (вертикальная ось) и выводит шаги абсолютного сопротивления (горизонтальная ось). Я займусь математикой немного позже, для тех, кому интересно.

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

Он был написан на Python 3 и должен работать с библиотеками по умолчанию. Для его использования необходимо раскомментировать строки сразу после «раскомментировать эти строки для использования конфигуратора». Как я уже сказал, он не был протестирован, поэтому могут быть некоторые ошибки, но если что-то произойдет, напишите комментарий или откройте проблему, чтобы я мог исправить это.

Математика (и физика)

Единственный способ, которым контроллер может создать ощущение, будто вы идете в гору, - это повернуть винт сопротивления. Нам нужно преобразовать уклон в количество оборотов. Чтобы упростить настройку, весь диапазон от полного ослабления до невозможности поворачивать рукоятку разделен на 40 шагов, таких же, как в режиме ERG, но на этот раз вместо целых чисел используются действительные числа. Это делается с помощью простой функции карты - вы можете найти ее в коде. Теперь мы на ступеньку выше - вместо оборотов винта мы имеем дело с воображаемыми ступенями.

Теперь, как это на самом деле работает, когда вы едете в гору на велосипеде (при условии постоянной скорости)? Очевидно, вам нужна сила, которая толкает вас вверх, иначе вы скатитесь вниз. Эта сила, как гласит первый закон движения, должна быть равной по величине, но противоположной по направлению силе, тянущей вас вниз, чтобы вы могли двигаться равномерно. Это происходит из-за трения между колесом и землей, и если вы нарисуете диаграмму этих сил, она должна быть равна весу велосипеда и велосипеда, умноженному на уклон:

F = Fg * G

Что заставляет колесо прикладывать эту силу? Поскольку мы имеем дело с шестернями и колесами, проще думать о крутящем моменте, который представляет собой просто силу, умноженную на радиус:

т = F * R

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

tp = tw * gr

и обратно из формулы крутящего момента мы получаем усилие, необходимое для поворота педали

Fp = tp / r

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

Мощность - это сила, умноженная на скорость (при одном и том же направлении векторов)

P = F * V

а линейная скорость педали связана с угловой скоростью:

V = ω * r

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

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

Технически это трехмерная функция, представляющая плоскость (я думаю), которая принимает в качестве аргументов уклон и передаточное число, и эти три коэффициента связаны с теми, которые необходимы для определения плоскости, но поскольку шестерни представляют собой дискретные числа, это было проще чтобы сделать его параметром, а не иметь дело с проекциями и тому подобным. 1-й и 3-й коэффициенты могут быть определены одной линией, а (-1) * 2-й коэффициент - это координата X точки, в которой линия "вращается" при переключении передач.

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

Шаг 5: Готово

Теперь вам нужно несколько приложений для езды на вашем новом тренере (что сэкономило вам около 900 долларов:)). Вот мое мнение о некоторых из них.

  • RGT Cycling - на мой взгляд лучший - у него есть совершенно бесплатная опция, но есть немного треков. Лучше всего справляется с подключением, потому что ваш телефон подключается через Bluetooth, а компьютер отображает трек. Использует реалистичное видео с велосипедистом AR
  • Rouvy - много треков, только платная подписка, почему-то приложение для ПК с этим не работает, нужно пользоваться телефоном. Могут возникнуть проблемы, когда ваш ноутбук использует одну и ту же карту для bluetooth и WiFi, он часто тормозит и не хочет загружаться
  • Zwift - анимированная игра, только платная, неплохо работает с трейнером, но интерфейс довольно примитивен - лаунчер использует Internet Explorer для отображения меню.

Если вам понравилась сборка (или нет), сообщите мне в комментариях, и если у вас есть какие-либо вопросы, вы можете задать здесь или отправить проблему на github. Я с радостью все объясню, это довольно сложно.

Рекомендуемые: