Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Johdanto
Eräs tunnettu yhdysvaltalainen kuntosaliyritys (Wahoo) toi äskettäin esille suuren sisäilman harjoitteluapua, joka nostaa ja laskee pyörän etuosaa turbo -kouluttajalla käyttäjän ratsastaman mäen simuloidun asteen (Kickr Climb) mukaan.
Näyttää hämmästyttävältä, mutta valitettavasti tämä ei ole meidän kaikkien saatavilla, koska tarvitset 1) huippuluokan Wahoo -kouluttajan ja 2) 500 puntaa käteistä tämän tekemiseksi.
Murtin solisluun (en koskaan asettanut maantiepyöräilijää maastopyörälle), joten minulla oli enemmän kilometrejä kouluttajalla ja enemmän aikaa tinkiä ja ajattelin, että tämä voisi olla hauska projekti.
Kaupallinen yksikkö simuloi -5% - +20%, joten halusin päästä lähelle sitä, mutta 10% budjetista!
Tämä on suunniteltu Tacx Neon ympärille, mutta mikä tahansa valmentaja, joka lähettää teho- ja nopeustietonsa ANT+: n tai BLE: n kautta, voidaan saada toimimaan (luulen!).
Koska maantiepyöräni akseliväli on täsmälleen 1000 mm, minun on nostettava haarukoita 200 mm simuloidaksesi 20% (katso kuva), joten 200 mm: n lineaarinen toimilaite toimisi. Pyörä + ajajan paino ei todennäköisesti ylitä 100 kg ja koska tämä on jaettu akseleille ja suurin osa on takana 750N nostaa 75 kg ja sen pitäisi olla kunnossa. Nopeampia toimilaitteita on saatavana enemmän rahaa, mutta tämä maksoi minulle noin 20 puntaa ja hallitsee 10 mm/sek. Toimilaitteet, joissa on potentiometrit, joita voidaan käyttää yksinkertaisina servoina, ovat myös 2-3 kertaa kalliimpia.
Tarvikkeet
3D -tulostus (PLA tai ABSetc) läpivientiakselisovittimen osasta:
100 mm 3/4 tuuman 10 swg alumiiniputki (läpivientiakselin rungolle)
80 mm 6 mm ruostumatonta terästä
Lineaarisen toimilaiteosan kengän 3D -tulostus (PLA tai ABSetc):
3D-tulostus H-sillan kotelosta
3D -tulostus Arduino -kotelosta (versio 1 näppäimistöllä) https://www.thingiverse.com/thing:3984911 (versio 2 kuvassa (https://www.thingiverse.com/thing:3995976)
Laserleikattu pala 3 mm kirkasta akryyliä 32 x 38 mm estää sinua hikoilemasta kaikkialla elektroniikassa (ei, ei ihanteellinen).
Jotkut ilmauslohkot (sovitettu jättämään tyynyt sisään) estämään sinua työntämästä sukkamäntäjä vahingossa Shimano -levyjarruistasi innostuneina
Lineaarinen toimilaite 750N 200 mm, esim. Al03 Mini Lineaariset toimilaitteet osoitteesta
L298N H -silta (kuten:
Arduino Nano IoT 33 www.rapidonline.com tilaa 73-4863
2 -näppäiminen membraaninäppäimistö, esim.
IIC I2C Logic Level Converter kaksisuuntainen moduuli 5V-3.3V Arduinolle, esim.
12V 3A DC -virtalähde - LED -valaisimet toimivat loistavasti!
NPE CABLE Ant+-BLE-silta
3D -tulostettava leike CABLE -siltaa varten
1,3 OLED LCD -näyttömoduuli, jossa IIC I2C -liitäntä 128x32 3.3V
Vaihe 1: Jotkut matematiikka
Meidän on laskettava simuloitava kaltevuus. Olin toivonut, että kouluttaja mainostaisi näitä tietoja yhdessä nopeuden, tehon, poljinnopeuden jne. Kanssa. Kuitenkin kouluttaja yksinkertaisesti asettaa vastustuksen ylläpitämään teholähdettä tabletin, tietokoneen jne. Käytettävän ohjelmiston mukaan. Minulla ei ollut mitään keinoa kerätä helposti 'simuloitua arvosanaa' ohjelmistosta, joten minun piti työskennellä taaksepäin …
Pyörään ja ratsastajaan vaikuttavat voimat ovat yhdistelmä vastusvoimista ja mäessä kiipeämiseen tarvittavasta voimasta. Valmentaja ilmoittaa nopeuden ja tehon. Jos löydämme resistiiviset häviöt tietyllä nopeudella, jäljellä oleva teho käytetään kiipeämään mäkeä. Nousuvoima riippuu pyörän ja ajajan painosta ja nousunopeudesta, joten voimme palata takaisin kaltevuuteen.
Ensin löysin hämmästyttävän https://bikecalculator.com löytääkseni datapisteitä resistiiviselle tehon menetykselle tyypillisillä nopeuksilla. Sitten muutin nopeusalueen tuottamaan lineaarisen suhteen ja löysin parhaiten sopivan linjan. Kun otetaan huomioon suoran yhtälö, voimme nyt laskea tehon (W) vastuksesta = (0,0102*(nopeuskmh 2,8))+9,428.
Ota mittausvoiman vastusvoima ja anna "kiipeily".
Tiedämme nousunopeuden km/h ja muunnamme sen SI -yksiköiksi m/s (jaa 3,6).
Kaltevuus löytyy: Kaltevuus (%) = ((PowerClimbing/(PainoKg*g))/Nopeus)*100
jossa vapaan pudotuksen kiihtyvyys g = 9,8 m/s/s tai 9,8 N/kg
Vaihe 2: Hanki tietoja
Kaltevuuden laskeminen vaatii nopeutta ja tehoa. Käytin Arduino Nano 33 IoT: ta yhteyden muodostamiseen kouluttajaan BLE: n kautta saadakseni tämän. Jäin alun perin jumiin, koska tämän moduulin alkuperäisen ArduinoBLE -kirjaston nykyinen v.1.1.2 -versio ei käsittele todennusta missään muodossa, mikä tarkoittaa, että useimmat (?) Kaupalliset BLE -anturit eivät muodosta paria sen kanssa.
Ratkaisu oli käyttää NPE-kaapelia ANT+ BLE-siltaan (https://npe-inc.com/cableinfo/), joka pitää kouluttajan sisäänrakennetun BLE: n vapaana, jotta harjoitussovellus voi kommunikoida eikä vaadi BLE-todennusta puolella.
BLE -tehon ominaisuus on melko suoraviivainen, koska teho watteina on lähetetyn datan toisessa ja kolmannessa tavussa 16 -bittisenä kokonaislukuna (pieni endiaani eli vähiten merkitsevä oktetti ensin). Käytin liukuvan keskimääräisen suodattimen antamaan 3s: n keskimääräisen tehon - aivan kuten pyörätietokoneeni näyttää - koska tämä on vähemmän epäsäännöllistä.
if (powerCharacteristic.valueUpdated ()) {
// Määritä taulukko arvolle uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Lue arvo taulukosta powerCharacteristic.readValue (holdpowervalues, 6); // Teho palautetaan watteina sijainneissa 2 ja 3 (loc 0 ja 1 on 8 bitin liput) tavu rawpowerValue2 = holdpowervalues [2]; // teho pienin sig -tavu HEX -tavussa rawpowerValue3 = holdpowervalues [3]; // teho eniten sig -tavua HEX: ssä long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Käytä liukuvan keskiarvon suodatinta antaaksesi "3s power" powerTrainer = moveAverageFilter_power.process (rawpowerTotal);
BLE -nopeusominaisuus (pyöräilynopeus ja poljinnopeus) on yksi niistä asioista, jotka saavat sinut ihmettelemään, mitä ihmettä SIG poltti, kun he kirjoittivat eritelmän.
Ominaisuus palauttaa 16 tavun matriisin, joka ei sisällä nopeutta eikä poljinnopeutta. Sen sijaan saat pyörän kierrokset ja poljinkierrokset (kokonaismäärät) ja viimeisimmän tapahtumatiedon jälkeisen ajan 1024 sekunnin sekunnissa. Siis lisää matematiikkaa. Voi, ja tavut eivät ole aina läsnä, joten alussa on lipputavu. Voi, ja tavut ovat pieniä endiaanisia heksadesimaaleja, joten sinun täytyy lukea taaksepäin kertomalla toinen tavu 256: lla, kolmas 65536: lla jne. Ja lisäämällä sitten ne yhteen. Nopeuden löytämiseksi sinun on oletettava vakiopyörän pyörän ympärysmitta tietääksesi matkan …
if (speedCharacteristic.valueUpdated ()) {
// Tämä arvo tarvitsee 16 tavun taulukon uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Mutta aion lukea vain ensimmäiset 7 speedCharacteristic.readValue (pitoarvot, 7); tavu rawValue0 = pitoarvot [0]; // binääriliput 8 bittiä int tavua rawValue1 = pitoarvot [1]; // kierrosta vähiten merkitsevä tavu HEX -tavussa rawValue2 = pitoarvot [2]; // kierrosta seuraava merkittävin tavu HEX -tavussa rawValue3 = pitoarvot [3]; // kierrosta seuraava merkittävin tavu HEX -tavussa rawValue4 = pitoarvot [4]; // kierrosta merkittävin tavu HEX -tavussa rawValue5 = pitoarvot [5]; // aika viimeisestä pyörätapahtumasta vähiten sig tavua rawValue6 = pitoarvot [6]; // aika viimeisestä pyörätapahtumasta eniten sig -tavua if (firstData) {// Hanki kumulatiiviset pyörän kierrokset pienenä endiaanikuusiolla sijainneissa 2, 3 ja 4 (vähiten merkitsevä oktetti ensin) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (raaka -arvo3 * 65536) + (raaka -arvo4 * 16777216)); // Saa aikaa viimeisestä pyörätapahtumasta 1024 sekunnin sekunnissa Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = epätosi; } else {// Hanki toinen tietojoukko WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); pitkä TimeTemp = (raaka -arvo5 + (raaka -arvo6 * 256)); if (WheelRevsTemp> WheelRevs1) {// varmista, että polkupyörä liikkuu WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = totta;}
// Etsi etäisyys cm ja muunna km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
float kmTravelled = distanceTravelled / 1000000;
// Löydä aikaa 1024 sekunnista ja muunna tuntiksi
float timeDifference = (Aika_2 - Aika_1); float timeSecs = timeDifference / 1024; kelluva aikaHrs = timeSecs / 3600;
// Etsi nopeus kmh
nopeusKMH = (kmTravelled / timeHrs);
Arduinon luonnos isännöidään GitHubissa (https://github.com/mockendon/opengradesim).
Vaihe 3: Laitteisto 1 Lineaarinen toimilaite
Levyjarru -maantiepyöräni läpivientiakselissa on 19,2 mm: n akseli, joka poistaa 12 mm: n läpiviennin ja 100 mm: n haarukoiden väliin.
Varastossa oleva 3/4 tuuman 10swg -alumiiniputki sopii täydellisesti ja mukava hahmo nimeltä Dave eBayssa (https://www.ebay.co.uk/str/aluminiumonline) toimitetaan ja leikataan se pituudeksi minulle muutaman kilon verran.
Toimilaitteessa on 20 mm: n tanko, jossa on 6 mm: n reikä, joten 3D -painettu osa yhdistää alumiiniputken 6 mm: n teräspalkkiin, ja koska voimat ovat 90%: n puristus, jotkut PLA / ABS ovat haasteen mukaisia.
Jos suoritat tavallisen pikalukitusasetuksen, jotain tällaista (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) ei tarvitsisi suunnitella uudelleen.
Käynnistys on suunniteltu sopimaan Tacx -kouluttajani mukana toimitettuun korotuslohkoon, mutta sopisi todennäköisesti moniin vastaaviin korotuksiin tai voit muokata TinkerCad -tiedostoa tarpeidesi mukaan.
Vaihe 4: Laitteisto 2 - H -silta
Näissä verkossa hyvin yleisissä L298N H -siltalevyissä on sisäänrakennettu 5 V: n säädin, joka sopii erinomaisesti Arduinon virransyöttöön lineaarisen toimilaitteen tarvitsemasta 12 V: n virtalähteestä. Valitettavasti Arduino Nano IoT -kortti on 3,3 V: n signalointi, joten tarvitaan looginen tasomuunnin (tai optoerotin, koska signaalit ovat vain yksisuuntaisia).
Kotelo on suunniteltu vastaanottamaan yleisesti LED -valaistussovelluksissa käytettävät virtaliittimet. Leikkasin USB -jatkojohdon, jotta Arduino -pääyksikkö olisi helppo kytkeä / irrottaa, ja vaikka olin varma, että käytän virtajohtoja virtalähteisiin ja datajohtoja 3,3 V: n signalointiin, suosittelisin rehellisesti tätä VASTAAN inhoan ketään paistamaan USB -portteja tai oheislaitteita kytkemällä ne vahingossa!
Vaihe 5: Laitteisto 3 Control Electronics (Arduino)
Arduino OLED- ja logiikkatasomuuntimen kotelossa on tavallinen 1/2 -kierroksinen Garmin -tyylinen kiinnitys takana, jotta se voidaan asentaa turvallisesti pyörään. Etuosan kiinnitys mahdollistaa yksikön kallistamisen ylös- tai alaspäin nollaan kiihtyvyysanturin asentoon tai koodirivi, joka on helppo lisätä vain automaattiseen nollaan alussa.
Kotelossa on paikka kalvonäppäimistölle - tätä käytetään kuljettajan ja pyörän yhdistetyn painon asettamiseen. Voit asettaa tämän ohjelmallisesti etenkin, jos et jaa valmentajaa kenenkään kanssa.
Voi olla mukavaa ottaa käyttöön manuaalinen tila. Ehkä molempien painikkeiden painaminen voi käynnistää manuaalisen tilan ja sitten painikkeet voivat lisätä / vähentää kaltevuutta. Lisään tämän tehtävälistaan!
Kotelon STL -tiedosto on jälleen saatavilla Thingiversessä (katso tarvikkeita koskeva linkki).
Arduinon luonnos isännöidään GitHubissa (https://github.com/mockendon/opengradesim).
Voit tulostaa siistin pienen leikkeen CABLE -siltaasi täältä
Vaihe 6: "Takapudotukset"
Monet ihmiset ovat ottaneet esiin kysymyksen siitä, että takaosan pudotus hankaa pyörän liikkuessa. Joillakin kouluttajilla on akseli, joka liikkuu (kuten Kickr), mutta monilla ei.
Tällä hetkellä paras ratkaisuni minulle on asentaa pikalukitussovittimiin joitain tavallisia 61800-2RS-syväuralaakereita (noin 2 puntaa) ja kiinnittää näihin akselin läpiviennit (ks. Kuvat) yli kokoisella QR-vartaalla
Laakerit tarvitsevat ohuen välilevyn, esim. M12 16 mm 0,3 mm sovittimen ja laakerin väliin.
Ne sopivat täydellisesti ja pyörivät pyörän ja vartaan kanssa kouluttajasta riippumatta.
Tällä hetkellä tämä muuttaa siirtymää käyttöpuolella muutamalla millimetrillä, joten sinun on indeksoitava uudelleen
Suunnittelen mukautettuja osia (katso pdf-suunnitelma) koneistettavaksi (tulevan veljeni sorvin kohdalla, kun hänellä on tunti aikaa auttaa!). Näitä ei ole vielä testattu !!! Mutta hiominen 1 mm irti varaston käyttöpuolen QR -sovittimen sisäpinnasta on nopea korjaus ilman erikoistyökaluja;)