Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Uvod
Nekaj znanega ameriškega fitnes podjetja (Wahoo) je pred kratkim predstavilo odlično pomoč pri vadbi v zaprtih prostorih, ki dviguje in spušča sprednji del kolesa na turbo trenerju glede na simulirano stopnjo hriba, ki ga uporabnik vozi (Kickr Climb).
Izgleda neverjetno, a žal to ni na voljo vsem nam, saj boste potrebovali 1) vrhunskega trenerja Wahoo in 2) 500 GBP gotovine, da bo to vaše.
Zlomil sem ključnico (cestnega kolesarja nikoli nisem postavil na gorsko kolo), zato sem imel na vadbi več kilometrov in več časa, da sem se rešil, in mislil sem, da bi to lahko bil zabaven projekt.
Komercialna enota simulira -5% do +20%, zato sem se želel približati temu, vendar pri 10% proračuna!
To je zasnovano okoli mojega Tacx Neo, vendar bi lahko deloval vsak trener, ki oddaja svoje podatke o moči in hitrosti prek ANT+ ali BLE (mislim!).
Ker medosna razdalja na mojem cestnem kolesu meri natančno 1000 mm, bi moral vilice dvigniti za 200 mm, da simuliram 20% (glej sliko), tako da bi bil primeren linearni pogon 200 mm. Teža kolesa in kolesarja verjetno ne bo presegla 100 kg, in ker je ta porazdeljena med osi, večina pa je zadaj, 750N dvigne 75 kg in bi moralo biti v redu. Hitrejši aktuatorji so na voljo za več denarja, vendar me je ta stal okoli 20 funtov in upravlja 10 mm/s. Pogoni s potenciometri, ki jih lahko uporabljamo kot enostavne servomotorje, so tudi 2 do 3 -krat dražji.
Zaloge
3D tisk (PLA ali ABSetc) dela adapterja skozi os:
100 mm zaloga aluminijastih cevi s premerom 10 swg (za okvir skozi os)
80 mm zaloga iz nerjavečega jekla 6 mm
3D tisk (PLA ali ABSetc) čevlja za del linearnega pogona:
3D natis ohišja za H-most
3D natis kovčka za Arduino (različica 1 s tipkovnico) https://www.thingiverse.com/thing:3984911 (različica 2, kot je prikazano (https://www.thingiverse.com/thing:3995976)
Lasersko izrezan kos 3 mm prozornega akrila 32 x 38 mm, da se ne znojite po elektroniki (to ni idealno).
Nekaj odzračevalnih blokov (prilagojenih tako, da vstavite blazinice), da preprečite, da bi v svojem navdušenju nenamerno potisnili bate čeljusti iz zavor Shimano
Linearni aktuator 750N 200 mm, npr. Mini linijski aktuatorji Al03 s
L298N H most (kot:
Arduino Nano IoT 33 www.rapidonline.com naročilo 73-4863
Membranska tipkovnica z dvema tipkama, npr.
IIC I2C Logic Level Converter Dvosmerni modul 5V do 3.3V Za Arduino npr.
12V 3A DC napajalnik - tisti za LED osvetlitev delujejo odlično!
NPE CABLE Ant+ do BLE most
Posnetek 3D za tiskanje za most CABLE
1,3 -palčni zaslon OLED LCD z vmesnikom IIC I2C 128x32 3,3 V.
Korak: Nekaj matematike
Izračunati moramo naklon, ki ga simuliramo. Upal sem, da bo trener te podatke objavil skupaj s hitrostjo, močjo, kadenco itd., Vendar pa trener preprosto nastavi upor za vzdrževanje izhodne moči v skladu s programsko opremo na tabličnem računalniku, računalniku itd., Ki se uporablja za nadzor. Nisem mogel zlahka ujeti "simulirane ocene" iz programske opreme, zato sem moral delati nazaj …
Sile, ki delujejo na kolo in jahača, so kombinacija uporovnih izgub in moči, potrebne za vzpon na hrib. Trener poroča o hitrosti in moči. Če lahko pri določeni hitrosti ugotovimo uporovne izgube, se preostala moč porabi za vzpon na hrib. Moč plezanja je odvisna od teže kolesa in kolesarja ter hitrosti vzpona, zato se lahko vrnemo nazaj v klanec.
Najprej sem uporabil neverjeten https://bikecalculator.com, da sem našel nekaj podatkovnih točk za izgubo upora pri tipičnih hitrostih. Nato sem spremenil domeno hitrosti, da bi ustvaril linearno razmerje in našel najprimernejšo linijo. Če vzamemo enačbo črte, lahko izračunamo moč (W) iz upora = (0,0102*(Speedkmh^2,8))+9,428.
Izmerite moč iz upora in vzemite moč "plezanja".
Poznamo hitrost vzpona v km/h in to pretvorimo v enote SI m/s (deljeno s 3,6).
Naklon je ugotovljen iz: Naklon (%) = ((PowerClimbing/(WeightKg*g))/Speed)*100
kjer je pospešek prostega padca g = 9,8m/s/s ali 9,8 N/kg
2. korak: Pridobite nekaj podatkov
Izračun nagiba zahteva hitrost in moč. Uporabil sem Arduino Nano 33 IoT za povezavo z trenerjem prek BLE, da sem to prejel. Sprva sem se zelo zataknil, saj trenutna različica izvorne knjižnice ArduinoBLE za ta modul v.1.1.2 ne obravnava preverjanja pristnosti v kakršni koli obliki, kar pomeni, da se večina (?) Komercialnih senzorjev BLE ne bo združila z njim.
Rešitev je bila uporaba mostu NPE Cable ANT+ to BLE (https://npe-inc.com/cableinfo/), ki omogoča, da je vgrajen BLE trenerja prost za komunikacijo med aplikacijo za usposabljanje in ne zahteva overjanja na BLE stran.
Značilnost moči BLE je precej enostavna, saj je moč v vatih vsebovana v drugem in tretjem bajtu poslanih podatkov kot 16 -bitno celo število (malo endiansko, najprej najmanj pomemben oktet). Uporabil sem filter drsečega povprečja, da sem dal povprečno moč 3 sekund - tako kot kaže moj kolesarski računalnik - saj je to manj neredno.
if (powerCharacteristic.valueUpdated ()) {{100} {101}
// Določimo matriko za vrednost uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Vrednost preberemo v niz powerCharacteristic.readValue (holdpowervalues, 6); // Napajanje se vrne v vatih na lokacijah 2 in 3 (loc 0 in 1 sta 8 -bitni zastavici) byte rawpowerValue2 = holdpowervalues [2]; // moč najmanjšega bajta znakov v bajtu HEX rawpowerValue3 = holdpowervalues [3]; // moč največ znakovnega bajta v HEX dolgi rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Uporabite filter drsečega povprečja, da nastavite powerTrainer "3s power" = movingAverageFilter_power.process (rawpowerTotal);
Značilnost hitrosti BLE (kolesarska hitrost in kadenca) je ena od tistih stvari, zaradi katerih se sprašujete, kaj je SIG kadil, ko so napisali specifikacijo.
Značilnost vrne 16 -bajno polje, ki ne vsebuje niti hitrosti niti kadence. Namesto tega dobite število vrtljajev koles in vrtljajev ročice (skupaj) ter čas od zadnjih podatkov o dogodku v 1024 -ih sekundah. Torej več matematike. Oh, bajti pa niso vedno prisotni, zato je na začetku bajt zastavice. Oh, in bajti so mali endian HEX, zato morate prebrati nazaj pomnožiti drugi bajt s 256, tretji s 65536 itd., Nato jih dodati skupaj. Če želite določiti hitrost, morate za poznavanje razdalje vzeti standardni obseg kolesa koles.
if (speedCharacteristic.valueUpdated ()) {{100} {101}
// Ta vrednost potrebuje 16 -bajno polje uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Toda prebral bom le prvih 7 speedCharacteristic.readValue (holdvalues, 7); bajt rawValue0 = holdvalues [0]; // binarne zastavice 8 -bitni int -bajt rawValue1 = holdvalues [1]; // vrtljaji najmanj pomembnega bajta v bajtu HEX rawValue2 = holdvalues [2]; // vrtljaji naslednjega najpomembnejšega bajta v bajtu HEX rawValue3 = holdvalues [3]; // vrtljaji naslednjega najpomembnejšega bajta v bajtu HEX rawValue4 = holdvalues [4]; // vrtljaji najpomembnejšega bajta v HEX bajtu rawValue5 = holdvalues [5]; // čas od dogodka zadnjega kolesa najmanj bajt znakov bajt rawValue6 = holdvalues [6]; // čas od dogodka zadnjega kolesa do največ znakovnega bajta if (firstData) {// Pridobite kumulativne vrtljaje koles kot majhno šestnajstiko v loku 2, 3 in 4 (najprej najmanj pomemben oktet) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Pridobite čas od zadnjega dogodka kolesa v 1024 -ih sekundah Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = false; } else {// Pridobite drugi niz podatkov long WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); dolga TimeTemp = (rawValue5 + (rawValue6 * 256)); if (WheelRevsTemp> WheelRevs1) {// poskrbite, da se kolo premika WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = res;}
// Poišči razliko razdalje v cm in pretvori v km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
float kmTravelled = distanceTravelled / 1000000;
// Poiščite čas v 1024 -ih sekundah in pretvorite v ure
float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Poišči hitrost kmh
hitrostKMH = (kmTravelled / timeHrs);
Skica Arduino gostuje na GitHubu (https://github.com/mockendon/opengradesim).
3. korak: Strojna oprema 1 Linearni aktuator
Prečna os na mojem kolutnem kolutnem kolesu določa os 19,2 mm za čiščenje 12 mm skozi os s 100 mm med vilicami.
Zaloga 3/4 palčne aluminijaste cevi 10swg se odlično prilega in lep fant z imenom Dave na ebayu (https://www.ebay.co.uk/str/aluminiumonline) mi jo je dobavil in jo za nekaj kilogramov skrajšal na dolžino.
Pogon ima 20 -milimetrsko palico s 6 -milimetrsko luknjo, zato 3D natisnjeni del poveže aluminijasto cev s 6 -milimetrsko jekleno palico, in ker so sile 90% stiskanja, je nekaj PLA / ABS kos izzivu.
Če zaženete standardno nastavitev za hitro izdajo, bi se kaj takega (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) izognilo preoblikovanju te komponente.
Prtljažnik je zasnovan tako, da se prilega bloku dvigala, ki je priložen mojemu trenerju Tacx, verjetno pa bi se prilegal številnim podobnim dvigalkam, ali pa datoteko TinkerCad preprosto uredite tako, da ustreza vašim zahtevam.
4. korak: Strojna oprema 2 - H -most
Te mostične plošče L298N H, ki so zelo pogoste na spletu, imajo vgrajen regulator 5 V, ki je odličen za napajanje Arduina iz 12 -voltnega napajanja, ki je potrebno za linearni pogon. Na žalost plošča Arduino Nano IoT signalizira 3.3V, zato je potreben pretvornik logične ravni (ali optoizolator, ker so signali samo enosmerni).
Ohišje je zasnovano tako, da sprejme napajalne konektorje, ki se običajno uporabljajo v LED razsvetljavi. Izklesal sem podaljšek USB, da sem omogočil enostaven priklop / odklop glavne enote Arduino, medtem ko sem bil prepričan, da bom za napajanje uporabil napajalne vode in podatkovne linije za signalizacijo 3,3 V, bi to iskreno svetoval, saj bi sovražiš nekoga, da si požreš vrata USB ali zunanje naprave, če jih pomotoma priključiš!
5. korak: Strojna oprema 3 Krmilna elektronika (Arduino)
Ohišje za Arduino OLED in pretvornik logične ravni ima na hrbtni strani standardni nosilec Garmin v 1/2 obratu, ki omogoča varno pritrditev na kolo. Nosilec "spredaj" bo enoto nagnil navzgor ali navzdol na "nič", položaj merilnika pospeška ali vrstico kode samo za samodejno nastavitev nič na začetku bi bilo enostavno dodati.
Ohišje ima mesto za membransko tipkovnico - to se uporablja za nastavitev skupne teže kolesarja in kolesa. To lahko nastavite samo programsko, še posebej, če trenerja ne delite z nikomer.
Morda bi bilo lepo uvesti "ročni" način. Morda bi pritisk na oba gumba sprožil ročni način, nato pa bi lahko gumbi povečali / zmanjšali naklon. To bom dodal na seznam opravkov!
Datoteka STL za zadevo je spet na voljo na Thingiverse (za povezavo glejte razdelek zaloge).
Skica Arduino gostuje na GitHubu (https://github.com/mockendon/opengradesim).
Od tu lahko natisnete lep posnetek za svoj CABLE most
6. korak: "Zadnji izpadi"
Mnogi ljudje so med premikanjem kolesa postavili vprašanje drgnjenja zadnjice. Nekateri trenerji imajo os, ki se premika (na primer Kickr), mnogi pa ne.
Trenutno je moja najboljša rešitev zamestitev nekaterih standardnih ležajev z globokim utorom 61800-2RS (približno 2 GBP vsak) na adapterje za hitro odpenjanje in nato pritrditev izstopnih osi na njih (glej slike) z nabodalom QR večje velikosti
Ležaji potrebujejo tanko podložko, na primer M12 16 mm 0,3 mm med adapterjem in ležajem.
Popolnoma se prilegajo in se vrtijo s kolesom in nabodalo neodvisno od trenerja.
Trenutno to odmik na strani pogona spremeni za nekaj mm, zato ga boste morali znova indeksirati
Oblikujem dele po meri (glej načrt pdf) za strojno obdelavo (na stružnici mojega bodočega zeta, ko ima eno uro za pomoč!). Te še niso preizkušene !!! Toda brušenje 1 mm z notranje površine QR adapterja na strani pogona je hitra rešitev brez posebnih orodij;)