Оглавление:
- Запасы
- Шаг 1: немного математики
- Шаг 2. Получите данные
- Шаг 3: Аппаратное обеспечение 1 линейного привода
- Шаг 4: Оборудование 2 - H-мост
- Шаг 5: Аппаратное обеспечение 3 Управляющая электроника (Arduino)
- Шаг 6: "Задние выпадения"
Видео: Симулятор открытого (велосипедного) уклона - OpenGradeSIM: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Вступление
Одна хорошо известная американская фитнес-компания (Wahoo) недавно представила отличное средство для тренировок в помещении, которое поднимает и опускает переднюю часть велосипеда на турбо-тренажере в соответствии с моделируемым уклоном холма, на котором едет пользователь (Kickr Climb).
Выглядит потрясающе, но, к сожалению, это недоступно для всех нас, так как вам понадобится 1) лучший тренажер Wahoo и 2) 500 фунтов стерлингов наличными, чтобы сделать его своим.
Я сломал ключицу (никогда не сажал велосипедиста на горный велосипед), поэтому у меня было больше миль на тренажере и больше времени, чтобы повозиться, и я подумал, что это может быть забавный проект.
Коммерческая единица моделирует от -5% до + 20%, поэтому я хотел приблизиться к этому, но на 10% бюджета!
Это разработано для моего Tacx Neo, но любой тренажер, который передает данные о мощности и скорости через ANT + или BLE, может работать (я считаю!).
Поскольку колесная база моего шоссейного велосипеда имеет размер ровно 1000 мм, мне нужно было поднять вилки на 200 мм, чтобы имитировать 20% (см. Рис.), Поэтому подойдет линейный привод 200 мм. Маловероятно, что вес велосипеда + гонщика превысит 100 кг, и поскольку он распределяется между осями, и большая часть приходится на заднюю часть, 750N поднимает 75 кг и должно быть в порядке. Доступны более быстрые приводы за большие деньги, но этот обошелся мне примерно в 20 фунтов стерлингов и управляет скоростью 10 мм / сек. Приводы с потенциометрами, которые можно использовать как простые сервоприводы, также в 2–3 раза дороже.
Запасы
3D-печать (PLA или ABSetc) переходной части сквозной оси:
100 мм алюминиевой трубки 3/4 дюйма 10 swg (для рамы со сквозной осью)
Пруток из нержавеющей стали диаметром 6 мм, 80 мм
3D-печать (PLA или ABSetc) башмака для части линейного привода:
3D-печать Кейса для Н-моста
3D-печать корпуса для Arduino (версия 1 с клавиатурой) https://www.thingiverse.com/thing:3984911 (версия 2, как показано (https://www.thingiverse.com/thing:3995976)
Вырезанный лазером кусок прозрачного акрила размером 3 мм 32 x 38 мм, чтобы вы не вспотели всей электроникой (сделал это, не идеально).
Некоторые прокачные блоки (приспособленные для того, чтобы оставлять колодки внутри), чтобы вы случайно не вытолкнули поршни суппорта из дисковых тормозов Shimano с энтузиазмом
Линейный привод 750 Н, ход 200 мм, например, линейные приводы Mini Al03 с
L298N H мост (например:
Arduino Nano IoT 33 www.rapidonline.com заказ 73-4863
2-клавишная мембранная клавиатура, например
Двунаправленный модуль логического преобразователя уровня IIC I2C от 5 В до 3,3 В для Arduino, например
Блоки питания 12 В 3 А постоянного тока - отлично подходят для светодиодного освещения!
КАБЕЛЬ NPE Ant + к мосту BLE
Зажим для кабельного моста для 3D-печати
1,3-дюймовый ЖК-дисплей OLED с интерфейсом IIC I2C 128x32 3,3 В
Шаг 1: немного математики
Нам нужно рассчитать моделируемый уклон. Я надеялся, что тренер будет рекламировать эти данные вместе со скоростью, мощностью, частотой вращения педалей и т. Д., Однако тренер просто устанавливает сопротивление для поддержания выходной мощности в соответствии с программным обеспечением на планшете, компьютере и т. Д., Используемым для управления им. У меня не было возможности легко получить «смоделированную оценку» из программного обеспечения, поэтому мне пришлось работать в обратном направлении …
Силы, действующие на байк и гонщика, представляют собой комбинацию потерь в сопротивлении и мощности, необходимой для подъема на холм. Тренер сообщает скорость и мощность. Если мы можем найти резистивные потери при заданной скорости, то оставшаяся мощность используется для подъема на холм. Мощность для подъема зависит от веса велосипеда и гонщика, а также от скорости подъема, поэтому мы можем вернуться к уклону.
Сначала я использовал удивительный сайт https://bikecalculator.com, чтобы найти некоторые данные по потере резистивной мощности при типичных скоростях. Затем я преобразовал область скорости, чтобы получить линейную зависимость, и нашел наиболее подходящую линию. Используя уравнение линии, мы можем теперь рассчитать мощность (Вт) из сопротивления = (0,0102 * (Скорость км / ч ^ 2,8)) + 9,428.
Возьмите силу сопротивления из измеренной мощности, чтобы получить силу «лазания».
Мы знаем скорость подъема в км / час и переводим ее в единицы системы СИ - м / с (делим на 3,6).
Наклон определяется по формуле: Наклон (%) = ((PowerClimbing / (Вес кг * г)) / Скорость) * 100
где ускорение свободного падения g = 9,8 м / с / с или 9,8 Н / кг
Шаг 2. Получите данные
Расчет наклона требует скорости и мощности. Я использовал Arduino Nano 33 IoT для подключения к тренеру через BLE, чтобы получить это. Сначала я очень застрял, так как текущая версия v.1.1.2 встроенной библиотеки ArduinoBLE для этого модуля не поддерживает аутентификацию ни в какой форме, что означает, что большинство (?) Коммерческих датчиков BLE не будут с ней работать.
Решение заключалось в использовании моста NPE Cable ANT + to BLE (https://npe-inc.com/cableinfo/), который позволяет освободить встроенный BLE тренера для взаимодействия приложения для обучения и не требует аутентификации на BLE. боковая сторона.
Характеристика мощности BLE довольно проста, поскольку мощность в ваттах содержится во втором и третьем байтах передаваемых данных как 16-битное целое число (с прямым порядком байтов, т.е. сначала наименее значимый октет). Я применил фильтр скользящего среднего, чтобы получить среднюю мощность 3 секунды - как показывает мой велосипедный компьютер - так как это менее беспорядочно.
if (powerCharacteristic.valueUpdated ()) {
// Определяем массив для значения uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Считываем значение в массив powerCharacteristic.readValue (holdpowervalues, 6); // Мощность возвращается в ваттах в ячейках 2 и 3 (loc 0 и 1 - это 8-битные флаги) byte rawpowerValue2 = holdpowervalues [2]; // младший байт мощности в шестнадцатеричном байте rawpowerValue3 = holdpowervalues [3]; // самый большой байт мощности в шестнадцатеричном формате long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Используйте фильтр скользящего среднего, чтобы получить мощность «3 секунды» powerTrainer = movingAverageFilter_power.process (rawpowerTotal);
Характеристики скорости BLE (скорость и частота вращения педалей) - одна из тех вещей, которые заставляют задуматься, что же, черт возьми, курили SIG, когда писали спецификацию.
Характеристика возвращает 16-байтовый массив, который не содержит ни скорости, ни частоты вращения педалей. Вместо этого вы получаете обороты колес и обороты кривошипа (итоговые) и время с момента последнего события в 1024-х долях секунды. Итак, больше математики. Да, и байты присутствуют не всегда, поэтому в начале стоит байт флага. Да, и байты - это HEX с прямым порядком байтов, поэтому вам нужно читать в обратном направлении, умножая второй байт на 256, третий на 65536 и т. Д., А затем складывая их вместе. Чтобы определить скорость, вам нужно принять стандартную окружность колеса велосипеда, чтобы узнать расстояние….
if (speedCharacteristic.valueUpdated ()) {
// Это значение требует 16-байтового массива uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Но я собираюсь прочитать только первые 7 speedCharacteristic.readValue (holdvalues, 7); byte rawValue0 = holdvalues [0]; // двоичные флаги 8 бит int byte rawValue1 = holdvalues [1]; // изменяет младший значащий байт в шестнадцатеричном байте rawValue2 = holdvalues [2]; // меняет следующий старший значащий байт в шестнадцатеричном байте rawValue3 = holdvalues [3]; // меняет следующий старший значащий байт в шестнадцатеричном байте rawValue4 = holdvalues [4]; // меняет самый старший байт в шестнадцатеричном формате rawValue5 = holdvalues [5]; // время, прошедшее с момента последнего события колеса, наименьший байт сигнатуры rawValue6 = holdvalues [6]; // время с момента последнего события колеса наибольший байт sig if (firstData) {// Получение совокупных оборотов колеса как младший шестнадцатеричный порядок байтов в loc 2, 3 и 4 (сначала младший октет) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Получить время с момента последнего события колеса в 1024-х долях секунды Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = false; } else {// Получить второй набор данных long WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); long TimeTemp = (rawValue5 + (rawValue6 * 256)); if (WheelRevsTemp> WheelRevs1) {// убеждаемся, что велосипед движется WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = true;}
// Находим разницу расстояний в см и конвертируем в км float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
float kmTravelled = distanceTravelled / 1000000;
// Находим время в 1024-х долях секунды и конвертируем в часы
float timeDifference = (Время_2 - Время_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Находим скорость км / ч
speedKMH = (км пути / время, часы);
Скетч Arduino размещен на GitHub (https://github.com/mockendon/opengradesim).
Шаг 3: Аппаратное обеспечение 1 линейного привода
Сквозная ось на моем шоссейном велосипеде с дисковым тормозом имеет ось 19,2 мм, чтобы очистить сквозную ось 12 мм при 100 мм между вилками.
Стандартная алюминиевая трубка 3/4 дюйма 10swg идеально подходит, и приятный парень по имени Дэйв на ebay (https://www.ebay.co.uk/str/aluminiumonline) предоставил и отрезал ее до длины для меня за несколько фунтов.
Привод имеет 20-миллиметровый стержень с 6-миллиметровым отверстием, поэтому деталь, напечатанная на 3D-принтере, соединяет алюминиевую трубку со стальным 6-миллиметровым стержнем, и, поскольку силы составляют 90% сжатия, некоторые PLA / ABS могут справиться с этой задачей.
Если вы запустите стандартную установку быстрого выпуска, то что-то вроде этого (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) позволит избежать перепроектирования этого компонента.
Ботинок предназначен для установки в блок рейзера, поставляемый с моим трейнером Tacx, но, вероятно, подойдет ко многим аналогичным рейзерам, или вы можете просто отредактировать файл TinkerCad в соответствии с вашими требованиями.
Шаг 4: Оборудование 2 - H-мост
Эти платы моста L298N H, которые очень распространены в сети, имеют встроенный регулятор 5 В, который отлично подходит для питания Arduino от источника питания 12 В, необходимого для линейного привода. К сожалению, плата Arduino Nano IoT передает сигнал с напряжением 3,3 В, поэтому необходим преобразователь логического уровня (или оптоизолятор, поскольку сигналы только однонаправленные).
Корпус предназначен для подключения разъемов питания, обычно используемых в светодиодных осветительных приборах. Я вырезал удлинительный кабель USB, чтобы можно было легко подключать / отключать головное устройство Arduino, и хотя я был уверен, что буду использовать линии питания для питания и линии данных для передачи сигналов 3,3 В, я честно посоветовал бы ПРОТИВ этого, поскольку я ненавижу кого-то поджарить свои USB-порты или периферийные устройства, подключив их по ошибке!
Шаг 5: Аппаратное обеспечение 3 Управляющая электроника (Arduino)
Корпус для Arduino OLED и преобразователя логических уровней имеет стандартное крепление в стиле Garmin на 1/2 оборота сзади, чтобы его можно было надежно закрепить на велосипеде. «Внешнее» крепление позволит наклонять устройство вверх или вниз до «нуля», положение акселерометра или строку кода просто для автоматического обнуления в начале было бы легко добавить.
На корпусе есть место для мембранной клавиатуры - оно используется для установки комбинированного веса велосипедиста и велосипедиста. Вы можете просто установить это программно, особенно если вы ни с кем не делитесь тренером.
Было бы неплохо реализовать «ручной» режим. Возможно, нажатие обеих кнопок может перейти в ручной режим, а затем кнопки могут увеличивать / уменьшать наклон. Я добавлю это в список дел!
STL-файл кейса, опять же, доступен на Thingiverse (см. Ссылку в разделе «Принадлежности»).
Эскиз Arduino размещен на GitHub (https://github.com/mockendon/opengradesim).
Вы можете распечатать аккуратный маленький зажим для своего КАБЕЛЬНОГО моста здесь
Шаг 6: "Задние выпадения"
Многие люди поднимали вопрос о трении задней части кузова при движении. У некоторых кроссовок есть подвижная ось (как у Kickr), но у многих нет.
В настоящее время моим лучшим решением для меня является установка некоторых стандартных подшипников с глубокими канавками 61800-2RS (около 2 фунтов стерлингов каждый) на быстроразъемных адаптерах, а затем установка на них сквозных дропаутов оси (см. Рисунки) с помощью QR-шпажки большего размера.
Подшипники нуждаются в тонкой регулировочной шайбе, например M12 16 мм 0,3 мм между адаптером и подшипником.
Они идеально подходят и вращаются вместе с велосипедом и шпажкой независимо от тренажера.
На данный момент это изменяет смещение на стороне привода на пару мм, поэтому вам нужно повторно индексировать
Я конструирую нестандартные детали (см. План в формате pdf) для обработки (на токарном станке моего будущего зятя, когда у него будет час, чтобы помочь!). Они еще не проверены !!! Но шлифовка 1 мм внутренней поверхности QR-адаптера со стороны стандартного привода - это быстрое решение без специальных инструментов;)
Рекомендуемые:
Детектор открытого окна Arduino - для зимы: 6 шагов
Детектор открытых окон Arduino - для зимы: на улице становится холодно, но иногда мне нужно подышать свежим воздухом в моих комнатах. Итак, я открываю окно, выхожу из комнаты, закрываю дверь и хочу вернуться через 5-10 минут. И через несколько часов я вспоминаю, что окно открыто … Может, вы знаете
СИМУЛЯТОР ГОНКИ СДЕЛАЙ САМ -- СИМУЛЯТОР F1: 5 шагов
СИМУЛЯТОР ГОНКИ СДЕЛАЙ САМ || СИМУЛЯТОР F1: Привет всем, добро пожаловать на мой канал! Сегодня я покажу вам, как я создаю «Симулятор гоночной игры». с помощью Arduino UNO. это не блог о сборке, это просто обзор и тест симулятора. Скоро появится блог о полной сборке
Программирование открытого DSKY: 5 шагов (с изображениями)
Программирование Open DSKY: добро пожаловать в наши текущие инструкции по программированию вашего Open DSKY. Обязательно возвращайтесь, поскольку эта инструкция будет продолжать расти, поскольку мы постоянно производим и выпускаем новые материалы по программированию. Так что следите за ним, ставьте лайк и ставьте его в избранное. Эта серия видео
Как сделать цепь велосипедного рога с использованием транзистора BC547: 8 шагов
Как сделать цепь велосипедного рожка с использованием транзистора BC547: Привет друг, сегодня я собираюсь сделать схему велосипедного рожка с использованием транзистора BC547. Эта схема будет давать выходной сигнал велосипедного рожка, когда мы подключим к этой цепи батарею 9 В. Давайте начнем
Рождественский подарок открытого сезона: 5 шагов
Рождественский подарок Open Season: USB-накопитель с открытым программным обеспечением, музыкой и фильмами в последний момент станет подарком