Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Noget matematik
- Trin 2: Få nogle data
- Trin 3: Hardware 1 den lineære aktuator
- Trin 4: Hardware 2 - H -broen
- Trin 5: Hardware 3 kontrolelektronikken (Arduino)
- Trin 6: 'The Rear Drop Outs'
Video: Open (Cykel) Grade Simulator - OpenGradeSIM: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Introduktion
Et bestemt velkendt amerikansk fitnessfirma (Wahoo) bragte for nylig et fantastisk indendørs træningshjælpemiddel, der hæver og sænker cyklens forside på turbotræneren i henhold til den simulerede bakkegrad, som brugeren kører (Kickr Climb).
Ser fantastisk ud, men desværre er dette ikke tilgængeligt for os alle, da du får brug for 1) en Wahoo -træner i topklassen og 2) 500 £ kontant for at gøre dette til dit.
Jeg brækkede en kraveben (satte aldrig en cykelrytter på en mountainbike), så jeg havde flere kilometer på træneren og mere tid til at pille og tænkte, at dette kunne være et sjovt projekt.
Den kommercielle enhed simulerer -5% til +20%, så jeg ville komme tæt på det, men på 10% af budgettet!
Dette er designet omkring min Tacx Neo, men enhver træner, der sender sine strøm- og hastighedsdata via ANT+ eller BLE, kan fås til at fungere (jeg tror!).
Da hjulbasen på min racercykel måler præcis 1000 mm, ville jeg skulle løfte gaflerne med 200 mm for at simulere 20% (se billede), så en 200 mm lineær aktuator ville gøre. Cyklen + ryttervægten vil sandsynligvis ikke overstige 100 kg, og da dette er fordelt mellem akslerne og det meste er på bagsiden, løfter 750N 75 kg og burde være ok. Hurtigere aktuatorer er tilgængelige for flere penge, men denne kostede mig omkring £ 20 og klarer 10 mm/sek. Aktuatorer med potentiometre, der kan bruges som enkle servoer, er også 2 til 3 gange dyrere.
Forbrugsvarer
3D -print (PLA eller ABSetc) af adapteren til gennemgående aksel:
100 mm 3/4 tommer 10 swg aluminiumsrørlager (til en gennemgående akselramme)
80 mm 6 mm rustfri stålstang
3D -print (PLA eller ABSetc) af skoen til den lineære aktuatordel:
3D-print af sagen til H-broen
3D -print af etuiet til Arduino (Version 1 med tastatur) https://www.thingiverse.com/thing:3984911 (Version 2 som vist (https://www.thingiverse.com/thing:3995976)
Laserskåret stykke 3 mm klar akryl 32 x 38 mm for at forhindre dig i at svede over elektronikken (gjorde det, ikke ideelt).
Nogle blødningsblokke (tilpasset til at efterlade puderne) for at forhindre, at du ved et uheld skubber kaliperstemplerne ud af dine Shimano -skivebremser i din entusiasme
Lineær aktuator 750N 200 mm rejse f.eks. Al03 mini lineære aktuatorer fra
L298N H -bro (som:
Arduino Nano IoT 33 www.rapidonline.com ordre 73-4863
2 -tasters membrantastatur f.eks.
IIC I2C Logic Level Converter Bi-directional Module 5V to 3.3V For Arduino eg
12V 3A DC strømforsyning - dem til LED -belysning fungerer godt!
NPE CABLE Ant+ til BLE bro
3D -printbart klip til CABLE -broen
1,3 OLED LCD -skærmmodul med IIC I2C -interface 128x32 3,3V
Trin 1: Noget matematik
Vi skal beregne den hældning, der simuleres. Jeg havde håbet, at træneren ville annoncere disse data sammen med hastighed, effekt, kadence osv., Men træneren sætter simpelthen modstand til at opretholde effekt i henhold til softwaren på tabletten, computeren osv., Der bruges til at styre det. Jeg havde ingen mulighed for let at fange den 'simulerede karakter' fra softwaren, så jeg skulle arbejde baglæns …
De kræfter, der virker på cyklen og rytteren, er en kombination af resistive tab og den kraft, der er nødvendig for at bestige bakken. Træneren rapporterer hastighed og effekt. Hvis vi kan finde de resistive tab ved en given hastighed, bruges den resterende effekt til at bestige bakken. Styrken til at klatre afhænger af vægten af cyklen og rytteren og stigningshastigheden, og så kan vi arbejde tilbage til hældningen.
Først brugte jeg den fantastiske https://bikecalculator.com til at finde nogle datapunkter for resistivt effekttab ved typiske hastigheder. Derefter transformerede jeg hastighedsdomænet til at producere et lineært forhold og fandt den bedst passende linje. Ved at tage ligningens ligning kan vi nu beregne effekt (W) ud fra modstand = (0.0102*(Speedkmh^2.8))+9.428.
Tag kraften fra modstanden fra den målte effekt for at give kraften til 'klatring'.
Vi kender stigningshastigheden i km/t og konverterer dette til SI -enheder på m/s (divider med 3,6).
Hældning findes fra: Hældning (%) = ((PowerClimbing/(WeightKg*g))/Speed)*100
hvor acceleration af frit fald g = 9,8m/s/s eller 9,8 N/kg
Trin 2: Få nogle data
Hældningsberegningen kræver hastighed og kraft. Jeg brugte en Arduino Nano 33 IoT til at oprette forbindelse til træneren via BLE for at modtage dette. Jeg blev meget fastlåst i starten, da den nuværende v.1.1.2 -version af det indfødte ArduinoBLE -bibliotek til dette modul ikke håndterer godkendelse i nogen form, hvilket betyder, at de fleste (?) Kommercielle BLE -sensorer ikke vil parre med det.
Løsningen var at bruge et NPE-kabel ANT+ til BLE-bro (https://npe-inc.com/cableinfo/), som holder trænerens indbyggede BLE gratis, så træningsappen kan kommunikere og kræver ingen godkendelse på BLE side.
BLE -effektkarakteristikken er ret ligetil, da effekt i watt er indeholdt i den anden og tredje byte af de transmitterede data som et 16 bit heltal (lille endian dvs. mindst signifikant oktet først). Jeg brugte et glidende gennemsnit filter for at give 3'er gennemsnitlig effekt - ligesom min cykelcomputer viser - da dette er mindre uregelmæssigt.
hvis (powerCharacteristic.valueUpdated ()) {
// Definer en matrix for værdien uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Læs værdi i array powerCharacteristic.readValue (holdpowervalues, 6); // Strøm returneres som watt på placering 2 og 3 (loc 0 og 1 er 8 bit flag) byte rawpowerValue2 = holdpowervalues [2]; // effekt mindst sig byte i HEX byte rawpowerValue3 = holdpowervalues [3]; // power most sig byte i HEX long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Brug filter i glidende gennemsnit til at give '3s power' powerTrainer = movingAverageFilter_power.process (rawpowerTotal);
BLE -hastighedskarakteristikken (Cycling Speed and Cadence) er en af de ting, der får dig til at undre dig over, hvad i alverden SIG røg, da de skrev specifikationen.
Karakteristikken returnerer et 16 byte array, der hverken indeholder hastighed eller kadence. I stedet får du hjulomdrejninger og kranksvingninger (totaler) og tid siden sidste hændelsesdata i 1024. sekund. Så mere matematik så. Åh, og bytes er ikke altid til stede, så der er en flagbyte i starten. Åh, og bytes er lidt endian HEX, så du skal læse baglæns multiplicere den anden byte med 256, tredje med 65536 osv. Og derefter tilføje dem sammen. For at finde hastighed skal du antage en standard cykelhjulets omkreds for at kende afstand ….
hvis (speedCharacteristic.valueUpdated ()) {
// Denne værdi har brug for et 16 byte array uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Men jeg vil kun læse de første 7 speedCharacteristic.readValue (holdvalues, 7); byte rawValue0 = holdværdier [0]; // binære flag 8 bit int byte rawValue1 = holdværdier [1]; // omdrejninger mindst signifikante byte i HEX -byte rawValue2 = holdværdier [2]; // omdrejninger næste vigtigste byte i HEX -byte rawValue3 = holdværdier [3]; // omdrejninger næste mest betydningsfulde byte i HEX -byte rawValue4 = holdværdier [4]; // omdrejninger mest signifikante byte i HEX -byte rawValue5 = holdværdier [5]; // tid siden sidste hjulhændelse mindst sig byte byte rawValue6 = holdværdier [6]; // tid siden sidste hjulhændelse mest sig byte if (firstData) {// Få kumulative hjulomdrejninger som lidt endian hex i loc 2, 3 og 4 (mindst signifikant oktet først) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Få tid siden sidste hjulhændelse i 1024ths af en anden Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = falsk; } andet {// Få andet sæt data lange WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); lang TimeTemp = (rawValue5 + (rawValue6 * 256)); hvis (WheelRevsTemp> WheelRevs1) {// sørg for at cyklen bevæger sig WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = true;}
// Find afstandsforskel i cm, og konverter til km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
flyde kmTravelled = distanceTravelled / 1000000;
// Find tid i 1024ths af et sekund og konverter til timer
float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Find hastighed kmh
speedKMH = (kmTravelled / timeHrs);
Arduino -skitsen er hostet på GitHub (https://github.com/mockendon/opengradesim).
Trin 3: Hardware 1 den lineære aktuator
Den gennemgående aksel på min skivebremse -cykel specificerer en 19,2 mm aksel til at rydde 12 mm gennemgående aksel med 100 mm mellem gaflerne.
Stock 3/4 tommer 10swg aluminiumsrør er en perfekt pasform og en dejlig fyr kaldet Dave på ebay (https://www.ebay.co.uk/str/aluminiumonline) leveret og skåret det i længden for mig for et par pund.
Aktuatoren har en 20 mm stang med et 6 mm hul, så den 3D -trykte del forbinder aluminiumsrøret med en 6 mm stålstang, og da kræfterne er 90% kompression, er noget PLA / ABS klar til udfordringen.
Hvis du kører en standard quick release-opsætning, ville sådan noget (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) undgå at skulle redesigne denne komponent.
Støvlen er designet til at passe ind i raiser -blokken, der fulgte med min Tacx -træner, men ville sandsynligvis passe ind i mange lignende raisers, eller du kan bare redigere TinkerCad -filen, så den passer til dine krav.
Trin 4: Hardware 2 - H -broen
Disse L298N H brokort, der er meget almindelige online, har en indbygget 5V regulator, som er fantastisk til at drive Arduino fra den 12V strømforsyning, der kræves til den lineære aktuator. Desværre signalerer Arduino Nano IoT -kortet 3,3V, og derfor er behovet for en logisk niveauomformer (eller en optoisolator, da signalerne kun er ensrettet).
Sagen er designet til at acceptere de strømstik, der normalt bruges i LED -belysningsprogrammer. Jeg slagtede en USB -forlængerledning for at gøre det muligt at tilslutte / afbryde Arduino -hovedenheden let, og mens jeg var sikker på at bruge strømledningerne til strøm og datalinierne til 3.3V -signalering, ville jeg ærligt rådgive mod dette, da jeg ville hader nogen til at stege deres USB -porte eller eksterne enheder ved at tilslutte dem ved en fejl!
Trin 5: Hardware 3 kontrolelektronikken (Arduino)
Etuiet til Arduino OLED og logic level converter har en standard 1/2 omdrejning i Garmin -stil på bagsiden, så den kan monteres sikkert på cyklen. En 'ud foran' mount vil gøre det muligt for enheden at vippe op eller ned til 'nul' accelerometerpositionen eller en kodelinje bare for automatisk nul i starten ville være let at tilføje.
Etuiet har plads til et membrantastatur - dette bruges til at indstille den kombinerede rytter- og cykelvægt. Du kan bare indstille dette programmatisk, især hvis du ikke deler en træner med nogen.
Det kan være rart at implementere en 'manuel' tilstand. Måske kan et tryk på begge knapper starte en manuel tilstand, og derefter kan knapperne øge / reducere hældning. Jeg tilføjer dette til huskelisten!
Sagens STL -fil er igen tilgængelig på Thingiverse (se afsnittet forbrugsvarer for link).
Arduino -skitsen er hostet på GitHub (https://github.com/mockendon/opengradesim).
Du kan udskrive et pænt lille klip til din CABLE -bro herfra
Trin 6: 'The Rear Drop Outs'
Mange mennesker har rejst spørgsmålet om den bageste drop out gnidning, når cyklen bevæger sig. Nogle trænere har en aksel, der bevæger sig (som Kickr), men mange gør det ikke.
I øjeblikket er min bedste løsning for mig at montere nogle standard 61800-2RS dybe rillelejer (ca. £ 2 hver) på quick release-adapterne og derefter montere de gennemgående akseludfald på disse (se billeder) med en over størrelse QR-spyd
Lejerne har brug for en tynd mellemlægsskive, f.eks. M12 16 mm 0,3 mm mellem adapteren og lejet.
De passer perfekt og roterer med cyklen og spydet uafhængigt af træneren.
I øjeblikket ændrer dette forskydningen på drevsiden med et par mm, så du skal indeksere igen
Jeg designer specialtilpassede dele (se pdf-plan) til maskinen (på min kommende svogers drejebænk, når han har en time til at hjælpe!). Disse er ikke testet endnu !!! Men slibning 1 mm fra den indre overflade af lagerdrevets QR -adapter er en hurtig løsning uden specialværktøj;)
Anbefalede:
Styr kraftfuld elektrisk skateboard E-cykel 350W DC-motor ved hjælp af Arduino og BTS7960b: 9 trin
Kontrol Kraftfuld elektrisk skateboard E-Bike 350W DC-motor ved hjælp af Arduino og BTS7960b: I denne vejledning skal vi lære at styre en DC-motor ved hjælp af Arduino og Dc driver bts7960b. Motoren kan være en 350W eller bare en lille Toy arduino DC-motor så længe strømmen ikke overstiger BTS7960b driveren Max strøm. Se videoen
Forsinket slukningstimer til cykel: 5 trin
Forsinket slukningstimer for cykel: Problem: Jeg har tilføjet forskellige enheder på min cykel. Problemet er enten, at de er direkte forbundet til batteriet, og de trækker en lækstrøm eller efter hovedafbryderen og er ikke tilgængelige, når jeg slukker min cykel. Eksempler: Du skal oplade dig
Cykel -energidemo (betjeningsvejledning): 4 trin
Cykel -energidemo (betjeningsvejledning): Denne instruktion er betjeningsvejledningen til demoen om cyklenergi. Linket til bygningen er inkluderet herunder: https: //www.instructables.com/id/Bicycle-Energy-Demo-Build
Cykel Energi Demo (Byg): 7 trin
Bicycle Energy Demo (Build): Formålet med denne Instructable var at skabe en interaktiv cykeldemonstration for at vække børns interesse for teknik. Projektet fungerer som følger, da et barn træder cyklen hurtigere, er han i stand til at aktivere flere lys på displayet
Sådan laver du LED -forlygter med høj effekt til cykel: 4 trin (med billeder)
Sådan laver du LED -forlygter med høj effekt til cykel: Det er altid praktisk at have et stærkt lys, mens du cykler om natten for tydeligt syn og sikkerhed. Det advarer også andre på mørke steder og undgå ulykker. Så i denne instruktive vil jeg demonstrere, hvordan man bygger og installerer en 100 watt LED p