Съдържание:

Отворен (велосипеден) клас симулатор - OpenGradeSIM: 6 стъпки
Отворен (велосипеден) клас симулатор - OpenGradeSIM: 6 стъпки

Видео: Отворен (велосипеден) клас симулатор - OpenGradeSIM: 6 стъпки

Видео: Отворен (велосипеден) клас симулатор - OpenGradeSIM: 6 стъпки
Видео: Салман Хан: Изменим подход к образованию с помощью видео уроков 2024, Ноември
Anonim
Image
Image
Отворен (велосипеден) клас симулатор - OpenGradeSIM
Отворен (велосипеден) клас симулатор - OpenGradeSIM
Отворен (велосипеден) клас симулатор - OpenGradeSIM
Отворен (велосипеден) клас симулатор - OpenGradeSIM

Въведение

Известна добре известна американска фитнес компания (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 алуминиев тръбен запас (за рамка на ос)

80 мм от 6 мм щанга от неръждаема стомана

3D печат (PLA или ABSetc) на обувката за частта на линейния задвижващ механизъм:

3D отпечатване на калъфа за H-моста

3D отпечатване на кутията за Arduino (Версия 1 с клавиатура) https://www.thingiverse.com/thing:3984911 (Версия 2, както е показано (https://www.thingiverse.com/thing:3995976)

Лазерно изрязано парче от 3 мм прозрачен акрил 32 x 38 мм, за да ви предпази от изпотяване по цялата електроника (направи това, не е идеално).

Някои обезвъздушаващи блокове (пригодени да оставят тампоните), за да предотвратят случайно изтласкване на буталата на шублера от дисковите ви спирачки в ентусиазъм

Линеен задвижващ механизъм 750N 200 мм ход, например Al03 Мини линейни задвижвания от

L298N H мост (като:

Arduino Nano IoT 33 www.rapidonline.com поръчка 73-4863

Мембранна клавиатура с 2 клавиша, например

IIC I2C Логичен преобразувател на ниво двупосочен модул 5V до 3.3V за Arduino, например

12V 3A DC захранване - тези за LED осветление работят чудесно!

NPE CABLE Ant+ към BLE мост

3D отпечатващ се клип за CABLE моста

1.3 OLED LCD дисплей модул с IIC I2C интерфейс 128x32 3.3V

Стъпка 1: Математика

Малко математика
Малко математика

Трябва да изчислим наклона, който се симулира. Надявах се, че обучителят ще рекламира тези данни заедно със скоростта, мощността, ритъма и т.н., но обучаващият просто задава съпротива за поддържане на изходната мощност според софтуера на таблета, компютъра и т.н., който се използва за управление. Нямах начин лесно да уловя „симулираната оценка“от софтуера, така че ще трябва да работя назад…

Силите, действащи върху мотора и ездача, са комбинация от резистивни загуби и мощност, необходима за изкачване на хълма. Треньорът отчита скорост и мощност. Ако можем да намерим резистивните загуби при дадена скорост, тогава останалата мощност се използва за изкачване на хълма. Силата на изкачване зависи от теглото на мотора и ездача и скоростта на изкачване и така можем да се върнем към наклона.

Първо използвах невероятния https://bikecalculator.com, за да намеря някои точки от данни за резистивна загуба на мощност при типични скорости. След това трансформирах домейна на скоростта, за да създам линейна връзка и намерих най -подходящата линия. Вземайки уравнението на линията, сега можем да изчислим мощността (W) от съпротивлението = (0.0102*(Speedkmh^2.8))+9.428.

Вземете силата от съпротивлението от измерената мощност, за да дадете сила на „катерене“.

Ние знаем скоростта на изкачване в км/час и я преобразуваме в единици SI на m/s (разделете на 3,6).

Наклонът се намира от: Наклон (%) = ((PowerClimbing/(WeightKg*g))/Скорост)*100

където ускорението на свободно падане g = 9,8m/s/s или 9,8 N/kg

Стъпка 2: Вземете малко данни

Вземете някои данни
Вземете някои данни

Изчислението на наклона изисква скорост и мощност. Използвах Arduino Nano 33 IoT, за да се свържа с обучителя чрез BLE, за да получа това. Първоначално се забих, тъй като текущата версия v.1.1.2 на родната библиотека ArduinoBLE за този модул не обработва удостоверяване под каквато и да е форма, което означава, че повечето (?) Търговски BLE сензори няма да се сдвоят с него.

Решението беше да се използва NPE кабелен ANT+ към BLE мост (https://npe-inc.com/cableinfo/), който поддържа вградения BLE на обучителя безплатен, за да може приложението за обучение да комуникира и не изисква удостоверяване на BLE страна.

Характеристиката на мощността на BLE е доста ясна, тъй като мощността във ватове се съдържа във втория и третия байт на предадените данни като 16 -битово цяло число (малък ендиан, т.е. най -малко значителен октет първо). Приложих филтър с плъзгаща средна стойност, за да дам 3s средна мощност - точно както показва моят компютър за велосипеди - тъй като това е по -малко неравномерно.

if (powerCharacteristic.valueUpdated ()) {

// Определяме масив за стойността uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Четене на стойност в масива powerCharacteristic.readValue (holdpowervalues, 6); // Захранването се връща като ватове на място 2 и 3 (loc 0 и 1 са 8 -битови флагове) байт rawpowerValue2 = holdpowervalues [2]; // мощност на най -малкия байт в HEX байт rawpowerValue3 = holdpowervalues [3]; // захранване на най -много байтове в шестнадесетичен дълъг rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Използвайте филтър с плъзгаща средна стойност, за да дадете powerTrainer на "3s power" = movingAverageFilter_power.process (rawpowerTotal);

Характеристиката на скоростта BLE (Cycling Speed и Cadence) е едно от онези неща, които ви карат да се чудите какво, по дяволите, пушеше SIG, когато пишеха спецификацията.

Характеристиката връща 16 -байтов масив, който не съдържа нито скорост, нито ритъм. Вместо това получавате оборотите на колелата и оборотите на манивелата (общо) и времето от последните данни за 1024 -и от секундата. Така че повече математика тогава. О, и байтовете не винаги присъстват, така че в началото има байт с флаг. О, и байтовете са малко endian 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); байт rawValue0 = holdvalues [0]; // двоични флагове 8 битов int байт rawValue1 = holdvalues [1]; // обороти най -малкия байт в HEX байт rawValue2 = holdvalues [2]; // завърта следващия най -значителен байт в HEX байт rawValue3 = holdvalues [3]; // завърта следващия най -значим байт в HEX байт rawValue4 = holdvalues [4]; // оборотите на най -значимия байт в HEX байт rawValue5 = holdvalues [5]; // време от последното събитие на колелото най -малко байт байт байт rawValue6 = holdvalues [6]; // време от последното събитие на колелото най -значителен байт 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;}

// Намерете разлика в разстоянието в см и конвертирайте в km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);

float kmTravelled = distanceTravelled / 1000000;

// Намерете време в 1024 част от секундата и преобразувайте в часове

float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;

// Намерете скорост kmh

скоростKMH = (kmTravelled / timeHrs);

Скицата на Arduino се хоства в GitHub (https://github.com/mockendon/opengradesim).

Стъпка 3: Хардуер 1 Линейният задвижващ механизъм

Хардуер 1 Линейният задвижващ механизъм
Хардуер 1 Линейният задвижващ механизъм
Хардуер 1 Линейният задвижващ механизъм
Хардуер 1 Линейният задвижващ механизъм
Хардуер 1 Линейният задвижващ механизъм
Хардуер 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 -Bridge

Хардуер 2 - H -Bridge
Хардуер 2 - H -Bridge
Хардуер 2 - H -Bridge
Хардуер 2 - H -Bridge
Хардуер 2 - H -Bridge
Хардуер 2 - H -Bridge

Тези мостови платки L298N H, които са много често срещани онлайн, имат вграден 5V регулатор, който е чудесен за захранване на Arduino от 12V захранване, необходимо за линейния задвижващ механизъм. За съжаление Arduino Nano IoT платката е 3.3V сигнализираща, оттук и необходимостта от преобразувател на логическо ниво (или оптоизолатор, тъй като сигналите са само еднопосочни).

Калъфът е проектиран да приема захранващите конектори, които обикновено се използват в приложенията за LED осветление. Изкарах USB удължителен кабел, за да направя възможно лесното свързване / изключване на главното устройство Arduino и докато бях сигурен, че ще използвам захранващите линии за захранване и линиите за данни за 3.3V сигнализация, бих честно посъветвал ПРОТИВ това мразя някой да си изпържи USB портовете или периферните устройства, като ги включи по погрешка!

Стъпка 5: Хардуер 3 Електроника за управление (Arduino)

Хардуер 3 Електроника за управление (Arduino)
Хардуер 3 Електроника за управление (Arduino)
Хардуер 3 Електроника за управление (Arduino)
Хардуер 3 Електроника за управление (Arduino)
Хардуер 3 Електроника за управление (Arduino)
Хардуер 3 Електроника за управление (Arduino)

Калъфът за OLED на Arduino и преобразувател на логическо ниво има стандартно монтиране в стил Garmin на 1/2 завой на гърба, за да може да се монтира сигурно към мотора. Монтажът „отпред“ще позволи на устройството да бъде наклонено нагоре или надолу до „нула“.

Калъфът има място за мембранна клавиатура - това се използва за задаване на комбинираното тегло на ездача и велосипеда. Можете просто да зададете това програмно, особено ако не споделяте треньор с никого.

Може да е хубаво да внедрите „ръчен“режим. Може би натискането на двата бутона може да инициира ръчен режим и след това бутоните могат да увеличат / намалят наклона. Ще добавя това към списъка със задачи!

STL файлът по делото отново е достъпен в Thingiverse (вижте раздела за консумативи за връзка).

Скицата на Arduino се хоства в GitHub (https://github.com/mockendon/opengradesim).

Можете да отпечатате чист малък клип за вашия CABLE мост от тук

Стъпка 6: „Задните отпадания“

„Задните изпускания“
„Задните изпускания“
„Задните изпускания“
„Задните изпускания“
„Задните изпускания“
„Задните изпускания“

Много хора повдигнаха въпроса за отпадането на задните части, докато се движи мотора. Някои треньори имат ос, която се движи (като Kickr), но много не.

Понастоящем най-доброто ми решение за мен е да монтирам някои стандартни лагери с дълбок канал 61800-2RS (около 2 паунда всеки) върху адаптерите за бързо освобождаване и след това да монтирам проходните оси на тях (вижте снимките) с QR шиш с голям размер

Лагерите се нуждаят от тънка подложка за шайби, например M12 16 мм 0,3 мм между адаптера и лагера.

Те пасват идеално и се въртят с мотора и шишчето независимо от обучителя.

В момента това променя отклонението от страната на задвижването с няколко мм, така че ще трябва да преиндексирате

Проектирам персонализирани части (вижте pdf план) за обработка (на струга на бъдещия ми зет, когато има час да помогне!). Те все още не са тествани !!! Но смилането на 1 мм от вътрешната повърхност на QR адаптера от страната на задвижването е бързо решение без специални инструменти;)

Препоръчано: