Innholdsfortegnelse:

DIY innendørs sykkel smart trener: 5 trinn
DIY innendørs sykkel smart trener: 5 trinn

Video: DIY innendørs sykkel smart trener: 5 trinn

Video: DIY innendørs sykkel smart trener: 5 trinn
Video: ⚡️ Я НЕ СДАМСЯ! AMAZON 2.0 | Интернет магазин с нуля - Часть 3 2024, Juli
Anonim
DIY innendørs sykkel smart trener
DIY innendørs sykkel smart trener
DIY innendørs sykkel smart trener
DIY innendørs sykkel smart trener
DIY innendørs sykkel smart trener
DIY innendørs sykkel smart trener

Introduksjon

Dette prosjektet startet som en enkel modifikasjon av en Schwinn IC Elite innendørs sykkel som bruker en enkel skrue og filtputer for motstandsinnstillingene. Problemet jeg ønsket å løse var at skruens stigning var for stor, så rekkevidden fra å ikke kunne tråkke til hjulet snurret helt gratis var bare et par grader på motstandsknappen. Først byttet jeg skruen til M6, men så måtte jeg lage en knott, så hvorfor ikke bare bruke en NEMA 17 stepper mottor til overs for å endre motstanden? Hvis det allerede er noe elektronikk, hvorfor ikke legge til en veivmåler og en Bluetooth -tilkobling til en datamaskin for å lage en smart trener?

Dette viste seg å være vanskeligere enn forventet, fordi det ikke var eksempler på hvordan man etterligner en effektmåler med en arduino og bluetooth. Jeg endte opp med å bruke rundt 20 timer på å programmere og tolke BLE GATT -spesifikasjonene. Jeg håper at ved å gi et eksempel kan jeg hjelpe noen som ikke bruker så mye tid på å prøve å forstå hva "Service Data AD Type Field" betyr …

Programvare

Hele prosjektet er på GitHub:

github.com/kswiorek/ble-ftms

Jeg anbefaler på det sterkeste å bruke Visual Studio med et VisualGDB-plugin hvis du planlegger å gjøre noe mer alvorlig enn å bare kopiere og lime inn koden min.

Hvis du har spørsmål om programmet, vennligst spør, jeg vet at mine minimalistiske kommentarer kanskje ikke hjelper mye.

Studiepoeng

Takk til stoppi71 for guiden om hvordan du lager en effektmåler. Jeg gjorde sveiven i henhold til designet hans.

Rekvisita:

Materialene for dette prosjektet avhenger sterkt av hvilken sykkel du endrer, men det er noen universelle deler.

Sveiv:

  1. ESP32 -modul
  2. HX711 Vektføler ADC
  3. Strekkmålere
  4. MPU - gyroskop
  5. Et lite Li-Po-batteri (rundt 750mAh)
  6. Krympemuff
  7. Stekker driver for A4988
  8. 5V regulator
  9. En arduino fat jack
  10. 12V arduino strømforsyning

Konsoll:

  1. NEMA 17 stepper (må være ganske kraftig,> 0,4 Nm)
  2. M6 stang
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Taktbrytere

Utstyr

For å gjøre dette kan du sannsynligvis slippe unna med å bare bruke en 3D -skriver, men du kan spare mye tid ved å laserskjære saken, og du kan også lage PCB. DXF- og gerberfilene er på GitHub, så du kan bestille dem lokalt. Koblingen fra gjengestangen til motoren ble slått på en dreiebenk, og dette kan være det eneste problemet, ettersom delen må være ganske sterk for å trekke på putene, men det er ikke mye plass i denne sykkelen.

Siden jeg laget den første sykkelen, kjøpte jeg en fresemaskin som lar meg lage spor for sensorene i sveiven. Det gjør limingen litt lettere og beskytter dem også hvis noe skulle treffe sveiven. (Jeg har fått disse sensorene til å falle noen ganger, så jeg ville være trygg.)

Trinn 1: Veiven:

Sveiven
Sveiven
Sveiven
Sveiven
Sveiven
Sveiven

Det er best å bare følge denne opplæringen:

Du må i utgangspunktet lime sensorene til sveiven på fire steder og koble dem til sidene av brettet.

De riktige tilkoblingene er allerede der, så du må bare lodde parene av ledninger direkte til disse åtte putene på brettet.

For å koble til sensorene, bruk den tynneste ledningen som er mulig - putene er veldig enkle å løfte. Du må lime sensorene først og la akkurat nok av dem ligge ute til lodding, og deretter dekke resten med epoxy. Hvis du prøver å lodde før liming, krøller de og knekker.

Slik monterer du kretskortet:

  1. Sett gullnålene fra bunnen (siden med spor) i alle hullene unntatt de loddrette nær bunnen.
  2. Plasser de tre brettene (ESP32 på toppen, deretter MPU, HX711 på bunnen) slik at gullnålene stikker gjennom begge hullene.
  3. Lodde toppene til brettene på toppen
  4. Klipp av gullnålene fra bunnen. (Prøv å kutte dem først før montering, så du vet at "gullnålene" ikke er stål inni - det gjør dem nesten umulige å kutte, og du må filere eller male dem)
  5. lodde de gjenværende gullnålene til bunnen av brettet.
  6. Last opp fastvaren for sveiven

Det siste trinnet er å pakke hele sveiven med varmekrympemuff.

Denne metoden for å lage brettet er ikke ideell, ettersom platene tar mye plass der du kan passe andre ting. Det beste ville være å lodde alle komponentene direkte til brettet, men jeg mangler evnen til å lodde disse små SMD -ene selv. Jeg må bestille den montert, og jeg vil sannsynligvis gjøre noen feil og ende opp med å bestille dem tre ganger og vente et år før de kommer.

Hvis noen ville være i stand til å designe brettet, ville det være flott om det hadde noen batteribeskyttelseskretser og en sensor som ville slå på ESP hvis sveiven begynte å bevege seg.

VIKTIG

HX711 -sensoren er som standard satt til 10Hz - det er mye å bremse for effektmåling. Du må løfte pinne 15 fra kortet og koble den til pinne 16. Dette driver pinnen HØY og aktiverer 80Hz -modus. Denne 80Hz, forresten, setter hastigheten for hele arduinosløyfen.

Bruk

ESP32 er programmert til å gå i dvale etter 30 -årene uten at en Bluetooth -enhet er tilkoblet. For å slå den på igjen må du trykke på tilbakestillingsknappen. Sensorene drives også fra en digital pin, som svinger LOW i hvilemodus. Hvis du vil teste sensorene med eksempelkoden fra biblioteker, må du kjøre pinnen HØY og vente litt før sensorene slås på.

Etter montering må sensorene kalibreres ved å lese verdien uten kraft og deretter med en påført vekt (jeg brukte en 12 kg eller 16 kg kettlebell hengt på pedalen). Disse verdiene må settes inn i powerCrank -koden.

Det er best å tare sveiven før hver tur - den skal ikke være i stand til å tare seg selv når noen tråkker, men bedre trygt enn beklager, og det er mulig å tare den bare én gang per slått på. Hvis du merker noen merkelige effektnivåer, må du gjenta denne prosessen:

  1. Sett sveiven rett ned til lampen begynner å blinke.
  2. Etter et par sekunder lyser lyset - ikke rør det da
  3. Når lyset slås av, angir den nåværende kraften som er oppdaget som en ny 0.

Hvis du bare vil bruke sveiven uten konsollen, er koden her på github. Alt annet fungerer likt.

Trinn 2: Konsollen

Konsollen
Konsollen
Konsollen
Konsollen
Konsollen
Konsollen

Etuiet er kuttet av 3 mm akryl, knappene er 3D -trykte og det er avstandsstykker for LCD -skjermen, kuttet av 5 mm akryl. Det er limt med varmt lim (det fester seg ganske godt til akryl) og det er en 3D -trykt "brakett" for å holde PCB -en på LCD -skjermen. Pinnene til LCD -en er loddet fra undersiden slik at den ikke forstyrrer ESP.

ESP er loddet opp ned, så USB-porten passer i etuiet

Den separate knappen PCB er limt med varmt lim, så knappene fanges i hullene, men de trykker fortsatt på bryterne. Knappene er koblet til kortet med JST PH 2.0 -kontakter, og pin -rekkefølgen er lett å utlede fra skjematisk

Det er veldig viktig å montere stepperdriveren i riktig retning (potensiometeret nær ESP)

Hele delen for SD -kortet er deaktivert, siden ingen brukte det i den første versjonen. Koden må oppdateres med noen UI -innstillinger som ryttervekt og vanskelighetsinnstilling.

Konsollen er montert ved hjelp av laserskårne "armer" og glidelåser. De små tennene graver seg inn i styret og holder konsollen.

Trinn 3: Motoren

Motoren
Motoren
Motoren
Motoren
Motoren
Motoren

Motoren holder seg i stedet for justeringsknappen med en 3D -trykt brakett. På akselen er det montert en kobling - den ene siden har et 5 mm hull med seteskruer for å holde akselen, den andre har en M6 -gjeng med seteskruer for å låse den. Hvis du vil, kan du sannsynligvis lage den i en boremaskin fra et 10 mm rundt lager. Det trenger ikke å være ekstremt presist ettersom motoren ikke er veldig tett montert.

Et stykke M6 gjengestang er skrudd i koblingen og den trekker i en M6 mutter. Jeg bearbeidet den, men den kan like enkelt lages av et stykke messing med en fil. Du kan til og med sveise noen biter til en normal mutter, så den ikke roterer. En 3D -trykt mutter kan også være en løsning.

Tråden må være finere enn stamskruen. Stigningen er omtrent 1,3 mm, og for M6 er den 0,8 mm. Motoren har ikke nok dreiemoment til å skru på skruen.

Mutteren må smøres godt, da motoren knapt kan skru skruen på de høyere innstillingene

Trinn 4: Konfigurasjon

Konfigurasjon
Konfigurasjon
Konfigurasjon
Konfigurasjon

For å laste opp kode til ESP32 fra Arduino IDE må du følge denne opplæringen:

Brettet er "WeMos LOLIN32", men "Dev -modulen" fungerer også

Jeg foreslår at du bruker Visual Studio, men det kan ofte gå i stykker.

Før første gangs bruk

Veven må settes opp i henhold til "sveiv" -trinnet

Ved å bruke "nRF Connect" -appen må du sjekke MAC -adressen til vevet ESP32 og sette den i BLE.h -filen.

I linje 19 på indoorBike.ino må du angi hvor mange rotasjoner av skruen som trengs for å sette motstanden fra helt løs til maksimal. ("Maksimum" er subjektivt med vilje, du justerer vanskeligheten med denne innstillingen.)

Den smarte treneren har "virtuelle tannhjul" for å sette dem opp riktig, du må kalibrere den på linje 28 og 29. Du må tråkke med konstant tråkkfrekvens på en gitt motstandsinnstilling, deretter lese strømmen og sette den i filen. Gjenta dette igjen med en annen innstilling.

Knappen lengst til venstre bytter fra ERG -modus (absolutt motstand) til simuleringsmodus (virtuelle gir). Simuleringsmodus uten datamaskintilkobling gjør ingenting da det ikke er simuleringsdata.

Linje 36. angir virtuelle gir - antall og forhold. Du beregner dem ved å dele antall tenner i fremre gir med antall tenner i bakgir.

På linje 12. legger du vekten til rytteren og sykkelen (I [newton], massen ganger gravitasjonsakselerasjonen!)

Hele fysikkdelen av dette er sannsynligvis for komplisert, og selv husker jeg ikke helt hva det gjør, men jeg beregner det nødvendige dreiemomentet for å trekke syklisten oppoverbakke eller noe sånt (det er derfor kalibreringen).

Disse parameterne er svært subjektive, du må sette dem opp etter noen turer for at de skal fungere riktig.

Debug COM -porten sender direkte binære data mottatt av bluetooth i anførselstegn ('') og simuleringsdata.

Konfiguratoren

Fordi konfigurasjonen av den antatt realistiske fysikken viste seg å være et stort problem for å få den til å føles realistisk, opprettet jeg en GUI -konfigurator som skulle tillate brukere å grafisk definere funksjonen som konverterer fra høyden til det absolutte motstandsnivået. Den er ennå ikke helt ferdig, og jeg hadde ikke muligheten til å teste den, men i den kommende måneden skal jeg konvertere en annen sykkel, så jeg skal polere den da.

På "Gears" -fanen kan du angi forholdet for hvert gir ved å flytte glidebryterne. Du må deretter kopiere koden for å erstatte de definerte tannhjulene i koden.

På kategorien "Karakter" får du en graf over en lineær funksjon (ja, det viser seg at det mest hatede emnet i matematikk faktisk er nyttig) som tar karakteren (vertikal akse) og sender ut absolutte motstandstrinn (horisontal akse). Jeg vil gå inn i matematikken litt senere for de som er interessert.

Brukeren kan definere denne funksjonen ved å bruke de to punktene som ligger på den. Til høyre er det et sted å bytte gjeldende gir. Det valgte giret, som du kanskje forestiller deg, endrer måten, hvordan karakteren tilordnes motstand - på lavere gir er det lettere å tråkke oppoverbakke. Ved å flytte glidebryteren endres den andre koeffisienten, noe som påvirker hvordan det valgte giret endrer funksjonen. Det er lettest å leke med det en stund for å se hvordan det oppfører seg. Du må kanskje også prøve noen forskjellige innstillinger for å finne det som fungerer best for deg.

Den ble skrevet i Python 3 og skulle fungere med standardbiblioteker. For å bruke den må du fjerne kommentaren til linjene umiddelbart etter at du har "fjernet en kommentar til disse linjene for å bruke konfiguratoren". Som jeg sa, den ble ikke testet, så det kan være noen feil, men hvis det dukker opp noe, kan du skrive en kommentar eller åpne et problem, så jeg kan rette det.

Matematikk (og fysikk)

Den eneste måten kontrolleren kan få det til å føles som om du går oppoverbakke, er ved å vri motstandsskruen. Vi må konvertere karakteren til antall rotasjoner. For å gjøre det enklere å sette opp, er hele området fra helt løst til ikke å kunne dreie sveiven delt inn i 40 trinn, det samme som brukes i ERG -modus, men denne gangen bruker det reelle tall i stedet for heltall. Dette gjøres med en enkel kartfunksjon - du kan slå den opp i koden. Nå er vi et trinn høyere - i stedet for å håndtere skruens omdreininger, har vi å gjøre med imaginære trinn.

Hvordan fungerer det egentlig når du går oppoverbakke på en sykkel (forutsatt konstant hastighet)? Det må åpenbart være en viss kraft som presser deg opp, ellers ville du rulle ned. Denne kraften, som den første bevegelsesloven forteller oss, må være lik i størrelse, men motsatt i retning av kraften som trekker deg ned, for at du skal være i jevn bevegelse. Det kommer fra friksjonen mellom hjulet og bakken, og hvis du tegner diagrammet over disse kreftene, må det være lik vekten på sykkelen og rytteren ganger karakteren:

F = Fg*G

Hva er det som får hjulet til å bruke denne kraften? Når vi har å gjøre med gir og hjul, er det lettere å tenke i form av dreiemoment, som ganske enkelt er kraften ganger radius:

t = F*R

Siden det er tannhjul involvert, gir du et dreiemoment på sveiven, som trekker i kjedet og snur hjulet. Dreiemomentet som trengs for å snu hjulet multipliseres med girforholdet:

tp = tw*gr

og tilbake fra momentformelen får vi kraften som kreves for å snu pedalen

Fp = tp/r

Dette er noe vi kan måle ved hjelp av effektmåleren i sveiven. Siden dynamisk friksjon er lineært relatert til kraften, og da denne spesielle sykkelen bruker fjærer for å gi denne kraften, er den lineær for skruens bevegelse.

Kraft er kraft ganger hastigheten (forutsatt samme retning av vektorer)

P = F*V

og den lineære hastigheten til pedalen er relatert til vinkelhastigheten:

V = ω*r

og slik kan vi beregne kraften som kreves for å slå pedalene på et angitt motstandsnivå. Siden alt er lineært beslektet, kan vi bruke proporsjoner for å gjøre det.

Dette var egentlig det programvaren trengte for å beregne under kalibreringen og ved å bruke en rundkjøringsmetode for å få oss en komplisert kompositt, men en lineær funksjon som angår karakter til motstand. Jeg skrev alt på papir beregnet den endelige ligningen og alle konstantene ble til tre koeffisienter.

Dette er teknisk sett en 3D -funksjon som representerer et plan (tror jeg) som tar karakteren og girforholdet som argumentene, og disse tre koeffisientene er relatert til de som trengs for å definere et fly, men ettersom tannhjulene er diskrete tall, var det lettere å gjøre det til en parameter i stedet for å håndtere anslag og slikt. Den første og tredje koeffisienten kan defineres med en enkelt linje og (-1)* den andre koeffisienten er X-koordinaten til punktet, der linjen "roterer" rundt når du skifter gir.

I denne visualiseringen er argumentene representert med den vertikale linjen og verdiene ved den horisontale, og jeg vet at dette kan være irriterende, men det var mer intuitivt for meg og det passet bedre til GUI. Det er sannsynligvis grunnen til at økonomene tegner grafene sine på denne måten.

Trinn 5: Fullfør

Nå trenger du noen apper å kjøre med på din nye trener (som sparte deg rundt $ 900:)). Her er mine meninger om noen av dem.

  • RGT Cycling - etter min mening den beste - den har et helt gratis alternativ, men har litt få baner. Handler tilkoblingsdelen best, fordi telefonen din kobles til via Bluetooth og en PC viser sporet. Bruker realistisk video med en AR -syklist
  • Rouvy - mange spor, bare betalt abonnement. Av en eller annen grunn fungerer ikke PC -appen med dette, du må bruke telefonen. Det kan være problemer når den bærbare datamaskinen bruker det samme kortet for bluetooth og WiFi, den henger ofte og vil ikke laste inn
  • Zwift - et animert spill, bare betalt, fungerer ganske bra med treneren, men brukergrensesnittet er ganske primitivt - lanseringsprogrammet bruker Internet Explorer for å vise menyen.

Hvis du likte bygningen (eller ikke), vennligst fortell meg det i kommentarene, og hvis du har spørsmål kan du stille her eller sende inn et problem til github. Jeg vil gjerne forklare alt siden det er ganske komplisert.

Anbefalt: