Innehållsförteckning:
Video: DIY inomhuscykel smart tränare: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:36
Introduktion
Detta projekt började som en enkel modifiering av en Schwinn IC Elite inomhuscykel som använder en enkel skruv och filtkuddar för motståndsinställningarna. Problemet jag ville lösa var att skruvens stigning var för stor, så intervallet från att inte kunna trampa till att hjulet snurrade helt fritt var bara ett par grader på motståndsknappen. Först bytte jag skruven till M6, men sedan skulle jag behöva göra en vred, så varför inte bara använda en kvarvarande NEMA 17 stegmotto för att ändra motståndet? Om det redan finns elektronik, varför inte lägga till en vevmätare och en bluetooth -anslutning till en dator för att göra en smart tränare?
Detta visade sig vara svårare än väntat, eftersom det inte fanns några exempel på hur man efterliknar en effektmätare med en arduino och bluetooth. Jag slutade spendera cirka 20 timmar på programmering och tolkning av BLE GATT -specifikationerna. Jag hoppas att genom att ge ett exempel kan jag hjälpa någon att inte slösa så mycket tid på att försöka förstå vad exakt "Service Data AD Type Field" betyder …
programvara
Hela projektet finns på GitHub:
github.com/kswiorek/ble-ftms
Jag rekommenderar starkt att du använder Visual Studio med ett VisualGDB-plugin om du planerar att göra något mer allvarligt än att bara kopiera och klistra in min kod.
Om du har frågor om programmet, fråga, jag vet att mina minimalistiska kommentarer kanske inte hjälper så mycket.
Poäng
Tack till stoppi71 för sin guide om hur man gör en effektmätare. Jag gjorde veven enligt hans design.
Tillbehör:
Materialet för detta projekt beror mycket på vilken cykel du ändrar, men det finns några universella delar.
Vev:
- ESP32 -modul
- HX711 Viktgivare ADC
- Satsmätare
- MPU - gyroskop
- Ett litet Li-Po-batteri (cirka 750mAh)
- Värmekrymphylsa
- A4988 Steppdrivrutin
- 5V regulator
- En arduino fat jack
- 12V arduino strömförsörjning
Trösta:
- NEMA 17 stepper (måste vara ganska kraftfull,> 0,4Nm)
- M6 stång
- 12864 lcd
- WeMos LOLIN32
- Taktbrytare
Utrustning
För att göra detta kan du förmodligen komma undan med att bara använda en 3D -skrivare, men du kan spara mycket tid genom att laserskärning av höljet, och du kan också göra PCB. DXF- och gerberfilerna finns på GitHub, så du kan beställa dem lokalt. Kopplingen från gängstången till motorn slogs på en svarv och detta kan vara det enda problemet, eftersom delen måste vara ganska stark för att dra i dynorna, men det finns inte mycket plats i just den här cykeln.
Sedan jag gjorde den första cykeln skaffade jag mig en fräsmaskin som gör att jag kan göra platser för sensorerna i veven. Det gör det lättare att limma dem och skyddar dem också om något skulle träffa veven. (Jag har fått dessa sensorer att falla några gånger så jag ville vara säker.)
Steg 1: Veven:
Det är bäst att bara följa den här självstudien:
Du behöver i princip lima sensorerna till veven på fyra ställen och ansluta dem till brädans sidor.
De rätta anslutningarna är redan där så du behöver bara löd parparna direkt till dessa åtta kuddar på brädet.
För att ansluta till sensorerna, använd den tunnaste kabeln som möjligt - dynorna är mycket enkla att lyfta. Du måste limma sensorerna först och lämna precis tillräckligt mycket av dem utanför för att lödas, och täck sedan resten med epoxi. Om du försöker löda innan du limmar så krullar de och går sönder.
För att montera kretskortet:
- Sätt in guldnålar från botten (sidan med spår) i alla hål utom de vertikala nära botten.
- Placera de tre brädorna (ESP32 ovanpå, sedan MPU, HX711 på undersidan) så att guldnålarna sticker genom båda hålen.
- Löd huvudet till brädorna ovanpå
- Skär av guldnålarna från botten. (Prova att klippa dem först innan du monterar dem, så att du vet att dina "guldnålar" inte är stål inuti - det gör dem nästan omöjliga att skära och du måste fila eller slipa dem)
- löd de återstående guldnålarna till brädans botten.
- Ladda upp firmware för veven
Det sista steget är att packa hela veven med värmekrymphylsa.
Denna metod för att göra brädan är inte idealisk, eftersom brädorna tar mycket plats där du kan passa andra saker. Det bästa vore att lödda alla komponenter direkt till brädet, men jag saknar förmågan att lödda dessa små SMD själv. Jag skulle behöva beställa den monterad, och jag skulle förmodligen göra några misstag och sluta beställa dem tre gånger och vänta ett år innan de kommer.
Om någon skulle kunna designa kortet, skulle det vara bra om det hade lite batteriskyddskretsar och en sensor som skulle slå på ESP om veven börjar röra sig.
VIKTIG
HX711 -sensorn är som standard inställd på 10Hz - det är mycket långsamt för effektmätningen. Du måste lyfta stift 15 från kortet och ansluta det till stift 16. Detta driver stiftet HÖG och aktiverar 80Hz -läget. Denna 80Hz, förresten, bestämmer hastigheten för hela arduinoslingan.
Användande
ESP32 är programmerad att somna efter 30 -talet utan att någon Bluetooth -enhet är ansluten. För att slå på den igen måste du trycka på återställningsknappen. Sensorerna drivs också från en digital stift som vrider LÅG i viloläge. Om du vill testa sensorerna med exempelkoden från bibliotek måste du köra stiftet HÖG och vänta lite innan sensorerna slås på.
Efter montering måste sensorerna kalibreras genom att läsa värdet utan kraft och sedan med en applicerad vikt (jag använde en 12 kg eller 16 kg kettlebell hängd på pedalen). Dessa värden måste anges i powerCrank -koden.
Det är bäst att tarera vevet före varje åktur - det borde inte kunna ta sig själv när någon trampar, men bättre säkert än ledsen och det är möjligt att tarera det bara en gång per påslagning. Om du märker några märkliga effektnivåer måste du upprepa denna process:
- Sätt veven rakt ner tills lampan börjar blinka.
- Efter ett par sekunder lyser lampan på - rör inte den då
- När lampan släcks ställer den in den aktuella kraften som en ny 0.
Om du bara vill använda veven, utan konsolen, är koden här på github. Allt annat fungerar likadant.
Steg 2: Konsolen
Fodralet är klippt av 3 mm akryl, knapparna är 3D -tryckta och det finns distanser för LCD -skärmen, skurna från 5 mm akryl. Det är limmat med varmt lim (det fäster ganska bra vid akryl) och det finns en 3D -tryckt "fäste" för att hålla kretskortet vid LCD -skärmen. Stiften för LCD -skärmen är lödda från undersidan så att den inte stör ESP.
ESP är lödt upp och ner, så USB-porten passar i fodralet
Den separata knappen PCB är limmad med varmt lim, så knapparna fångas i sina hål, men de trycker fortfarande på strömbrytarna. Knapparna är anslutna till kortet med JST PH 2.0 -kontakter och stiftordningen är lätt att härleda från schemat
Det är mycket viktigt att montera stegdrivrutinen i rätt riktning (potentiometern nära ESP)
Hela delen för SD -kortet är inaktiverat, eftersom ingen använde det i den första versionen. Koden måste uppdateras med några användargränssnittsinställningar som ryttarens vikt och svårighetsinställning.
Konsolen är monterad med laserskärning "armar" och blixtlås. De små tänderna gräver i styret och håller i konsolen.
Steg 3: Motorn
Motorn håller sig i stället för justeringsratten med en 3D -tryckt konsol. På axeln är en kopplare monterad - ena sidan har ett 5 mm hål med ställskruvar för att hålla axeln, den andra har en M6 -gänga med ställskruvar för att låsa den. Om du vill kan du förmodligen göra det i en borrpress från ett 10 mm runt lager. Det behöver inte vara extremt exakt eftersom motorn inte är tätt monterad.
En bit M6 -gängstång skruvas i kopplingen och den drar i en M6 -mutter. Jag bearbetade det, men det kan lika enkelt göras av en bit mässing med en fil. Du kan till och med svetsa några bitar till en normal mutter, så att den inte roterar. En 3D -tryckt mutter kan också vara en lösning.
Gängan måste vara finare än stamskruven. Dess stigning är cirka 1,3 mm, och för M6 är den 0,8 mm. Motorn har inte tillräckligt med vridmoment för att vrida på skruven.
Muttern måste smörjas väl, eftersom motorn knappt kan vrida skruven på de högre inställningarna
Steg 4: Konfiguration
För att ladda upp kod till ESP32 från Arduino IDE måste du följa denna handledning:
Kortet är "WeMos LOLIN32", men "Dev -modulen" fungerar också
Jag föreslår att du använder Visual Studio, men det kan ofta gå sönder.
Före första användning
Veven måste ställas in enligt steget "Vev"
Med appen "nRF Connect" måste du kontrollera MAC -adressen för veven ESP32 och ställa in den i BLE.h -filen.
På rad 19 på indoorBike.ino måste du ställa in hur många rotationer av skruven som behövs för att ställa in motståndet från helt löst till maximalt. ("Maximalt" är subjektivt avsiktligt, du justerar svårigheten med den här inställningen.)
Den smarta tränaren har "virtuella växlar" för att ställa in dem korrekt, du måste kalibrera den på raderna 28 och 29. Du måste trampa med konstant kadens på en given motståndsinställning, läs sedan kraften och ställ in den i filen. Upprepa detta igen med en annan inställning.
Knappen längst till vänster växlar från ERG -läge (absolut motstånd) till simuleringsläge (virtuella växlar). Simuleringsläge utan datoranslutning gör ingenting eftersom det inte finns några simuleringsdata.
Linje 36. ställer in de virtuella växlarna - antalet och förhållandena. Du beräknar dem genom att dividera antalet tänder i främre växeln med antalet tänder i bakväxeln.
På rad 12. lägger du ryttarens och cykelns vikt (I [newton], mass gånger gravitationsacceleration!)
Hela fysikdelen av detta är förmodligen för komplicerat och till och med jag kommer inte ihåg vad det gör exakt, men jag beräknar det erforderliga vridmomentet för att dra cyklisten uppåt eller något liknande (det är därför kalibreringen).
Dessa parametrar är mycket subjektiva, du måste ställa in dem efter några åk för att de ska fungera korrekt.
Debug COM -porten skickar direkt binär data som tas emot av bluetooth i citattecken ('') och simuleringsdata.
Konfiguratorn
Eftersom konfigurationen av den förmodligen realistiska fysiken visade sig vara ett stort krångel för att få den att kännas realistisk, skapade jag en GUI -konfigurator som skulle tillåta användare att grafiskt definiera den funktion som konverteras från kullens grad till den absoluta motståndsnivån. Den är ännu inte helt färdig och jag hade inte möjlighet att testa den, men under den kommande månaden ska jag konvertera en annan cykel, så jag ska polera den då.
På fliken "Gears" kan du ställa in förhållandet för varje växel genom att flytta reglagen. Du måste sedan kopiera koden för att ersätta de definierade kugghjulen i koden.
På fliken "Betyg" får du en graf över en linjär funktion (ja, det visar sig att det mest hatade ämnet i matte faktiskt är användbart) som tar betyget (vertikal axel) och matar ut absoluta motståndssteg (horisontell axel). Jag kommer att gå in på matematiken lite senare för de intresserade.
Användaren kan definiera denna funktion med hjälp av de två punkterna som läggs på den. Till höger finns en plats för att byta aktuell växel. Den valda växeln, som du kan föreställa dig, ändrar sättet, hur betyget kartläggs till motstånd - på lägre växlar är det lättare att trampa uppför. Genom att flytta reglaget ändras den andra koefficienten, vilket påverkar hur den valda växeln ändrar funktionen. Det är lättast att spela med det ett tag för att se hur det beter sig. Du kan också behöva prova några olika inställningar för att hitta det som fungerar bäst för dig.
Det skrevs i Python 3 och borde fungera med standardbibliotek. För att använda den måste du avmarkera raderna omedelbart efter att "kommentera dessa rader för att använda konfiguratorn". Som sagt, det var inte testat, så det kan finnas några fel, men om något dyker upp, skriv en kommentar eller öppna ett problem, så jag kan rätta till det.
Matematiken (och fysiken)
Det enda sättet som styrenheten kan få det att kännas som att du går uppför är genom att vrida motståndsskruven. Vi måste omvandla betyget till antalet varv. För att göra det enklare att ställa in är hela intervallet från helt löst till att inte kunna vrida veven uppdelat i 40 steg, samma som används i ERG -läget, men den här gången använder det reella tal istället för heltal. Detta görs med en enkel kartfunktion - du kan slå upp det i koden. Nu är vi ett steg högre - istället för att hantera skruvens varv, har vi att göra med imaginära steg.
Nu hur fungerar det egentligen när du går uppför på en cykel (förutsatt en konstant hastighet)? Det måste uppenbarligen vara någon kraft som driver dig upp, annars kan du rulla ner. Denna kraft, som den första rörelselagen säger till oss, måste vara lika stor i storlek men motsatt i riktning mot kraften som drar ner dig, för att du ska vara i enhetlig rörelse. Den kommer från friktionen mellan hjulet och marken och om du ritar diagrammet över dessa krafter måste den vara lika stor som cykelns vikt och ryttaren gånger betyget:
F = Fg*G
Vad är det nu som får hjulet att tillämpa denna kraft? När vi har att göra med kugghjul och hjul är det lättare att tänka i vridmoment, vilket helt enkelt är kraften gånger radien:
t = F*R
Eftersom det finns växlar involverade ger du ett vridmoment på veven, som drar i kedjan och vrider på hjulet. Vridmomentet som behövs för att vrida hjulet multipliceras med växelförhållandet:
tp = tw*gr
och tillbaka från momentformeln får vi den kraft som krävs för att vrida pedalen
Fp = tp/r
Detta är något som vi kan mäta med hjälp av effektmätaren i veven. Eftersom dynamisk friktion är linjärt relaterad till kraften och eftersom just denna cykel använder fjädrar för att ge denna kraft, är den linjär för skruvens rörelse.
Kraft är kraft gånger hastigheten (antar samma riktning av vektorer)
P = F*V
och pedalens linjära hastighet är relaterad till vinkelhastigheten:
V = ω*r
och så kan vi beräkna kraften som krävs för att vrida pedalerna på en inställd motståndsnivå. Eftersom allt är linjärt relaterat kan vi använda proportioner för att göra det.
Detta var i huvudsak vad programvaran behövde beräkna under kalibreringen och med hjälp av en rondell för att få oss en komplicerad komposit, men en linjär funktion relaterad till resistans. Jag skrev allt på papper beräknade den slutliga ekvationen och alla konstanterna blev tre koefficienter.
Detta är tekniskt sett en 3D -funktion som representerar ett plan (tror jag) som tar betyget och växelförhållandet som argumenten, och dessa tre koefficienter är relaterade till de som behövs för att definiera ett plan, men eftersom växlarna är diskreta tal var det lättare att göra det till en parameter istället för att hantera prognoser och sådant. 1: a och 3: e koefficienterna kan definieras med en enda rad och (-1)* 2: a koefficienten är X-koordinaten för punkten, där linjen "roterar" runt vid växling.
I denna visualisering representeras argumenten av den vertikala linjen och värdena av den horisontella, och jag vet att detta kan vara irriterande, men det var mer intuitivt för mig och det passade bättre GUI. Det är förmodligen anledningen till att ekonomerna ritar sina grafer på det här sättet.
Steg 5: Slutför
Nu behöver du några appar att åka med på din nya tränare (vilket sparade dig runt $ 900:)). Här är mina åsikter om några av dem.
- RGT Cycling - enligt min mening den bästa - den har ett helt gratis alternativ, men har lite få spår. Hanterar anslutningsdelen bäst, eftersom din telefon ansluts via bluetooth och en dator visar spåret. Använder realistisk video med en AR -cyklist
- Rouvy - många spår, endast betald prenumeration, av någon anledning fungerar inte PC -appen med detta, du måste använda din telefon. Det kan uppstå problem när din bärbara dator använder samma kort för bluetooth och WiFi, den ligger ofta och vill inte ladda
- Zwift - ett animerat spel, endast betalt, fungerar ganska bra med tränaren, men användargränssnittet är ganska primitivt - startprogrammet använder Internet Explorer för att visa menyn.
Om du gillade bygget (eller inte), berätta för mig i kommentarerna och om du har några frågor kan du ställa här eller skicka ett problem till github. Jag förklarar gärna allt eftersom det är ganska komplicerat.
Rekommenderad:
Smart Desk LED -ljus - Smart Lighting W/ Arduino - Neopixels arbetsyta: 10 steg (med bilder)
Smart Desk LED -ljus | Smart Lighting W/ Arduino | Neopixels arbetsyta: Nu till dags spenderar vi mycket tid hemma, studerar och arbetar virtuellt, så varför inte göra vår arbetsyta större med ett anpassat och smart belysningssystem Arduino och Ws2812b lysdioder baserade. Här visar jag dig hur du bygger din Smart LED -lampa i skrivbordet som
Hardware and Software Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: 7 Steg
Hardware and Software Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: I den här instruktionsboken visar jag dig hur jag blinkade flera smarta enheter med min egen firmware, så jag kan styra dem med MQTT via min Openhab -inställning. nya enheter när jag hackade dem. Naturligtvis finns det andra mjukvarubaserade metoder för att flasha anpassade f
Smart väckarklocka: en smart väckarklocka tillverkad med hallon Pi: 10 steg (med bilder)
Smart väckarklocka: en smart väckarklocka tillverkad med hallon Pi: Har du någonsin velat ha en smart klocka? I så fall är detta lösningen för dig! Jag gjorde Smart Alarm Clock, det här är en klocka som du kan ändra alarmtiden enligt webbplatsen. När larmet går går det ett ljud (summer) och 2 lampor lyser
IoT -baserat smart trädgård och smart jordbruk med ESP32: 7 steg
IoT -baserat smart trädgårdsskötsel och smart jordbruk Användning av ESP32: Världen förändras med tiden och jordbruk. Numera integrerar människor elektronik på alla områden och jordbruket är inget undantag för detta. Denna sammanslagning av elektronik i jordbruket hjälper bönder och människor som förvaltar trädgårdar
Enkel Taranis X9D+ trådlös tränare som använder SBUS -mottagarens ingång: 9 steg
Enkel Taranis X9D+ trådlös tränare som använder SBUS-mottagarinmatning: Målet med detta projekt är att ansluta en FrSky X-Lite-sändare till en FrSky X9D+ -sändare i en TRAINER-konfiguration med en billig SBUS-mottagare (12 $). Genom att ansluta de två på detta sätt är det möjligt för en instruktörspilot att använda