Sisällysluettelo:

DIY Indoor Bike Smart Trainer: 5 vaihetta
DIY Indoor Bike Smart Trainer: 5 vaihetta

Video: DIY Indoor Bike Smart Trainer: 5 vaihetta

Video: DIY Indoor Bike Smart Trainer: 5 vaihetta
Video: The Backwards Brain Bicycle - Smarter Every Day 133 2024, Heinäkuu
Anonim
DIY Indoor Bike Smart Trainer
DIY Indoor Bike Smart Trainer
DIY Indoor Bike Smart Trainer
DIY Indoor Bike Smart Trainer
DIY Indoor Bike Smart Trainer
DIY Indoor Bike Smart Trainer

Johdanto

Tämä projekti alkoi yksinkertaisena muutoksena Schwinn IC Elite -sisäpyörään, joka käyttää yksinkertaista ruuvia ja huopatyynyjä vastusasetuksiin. Ongelma, jonka halusin ratkaista, oli se, että ruuvin nousu oli liian suuri, joten alue polkemattomuudesta pyörän pyörimiseen täysin vapaana oli vain pari astetta vastusnupissa. Vaihdoin aluksi ruuvin M6: ksi, mutta sitten minun piti tehdä nuppi, joten miksi et käytä vasemmanpuoleista NEMA 17 -askelmoottoria vastuksen muuttamiseen? Jos elektroniikkaa on jo olemassa, miksi et lisääisi tietokoneeseen kampiakselimittaria ja bluetooth -yhteyttä älykkään kouluttajan luomiseksi?

Tämä osoittautui odotettua vaikeammaksi, koska ei ollut esimerkkejä tehomittarin emuloimisesta arduinolla ja bluetoothilla. Lopulta käytin noin 20 tuntia BLE GATT -määritysten ohjelmointiin ja tulkintaan. Toivon, että tarjoamalla esimerkin voin auttaa jotakuta olemaan tuhlaamatta niin paljon aikaa yrittäessään ymmärtää mitä "Service Data AD Type Field" tarkoittaa …

Ohjelmisto

Koko projekti on GitHubissa:

github.com/kswiorek/ble-ftms

Suosittelen käyttämään Visual Studiota VisualGDB-laajennuksen kanssa, jos aiot tehdä jotain vakavampaa kuin vain kopioida ja liittää koodini.

Jos sinulla on kysyttävää ohjelmasta, kysy, tiedän, että minimalistiset kommenttini eivät välttämättä auta paljon.

Laajuus

Kiitos stoppi71: lle oppaasta tehomittarin tekemisestä. Tein kammen hänen suunnitelmansa mukaan.

Tarvikkeet:

Tämän projektin materiaalit riippuvat suuresti siitä, mitä pyörää olet muokkaamassa, mutta on joitain yleisosia.

Kampi:

  1. ESP32 -moduuli
  2. HX711 Painoanturi ADC
  3. Venymämittarit
  4. MPU - gyroskooppi
  5. Pieni Li-Po-akku (noin 750 mAh)
  6. Lämpökutistuva holkki
  7. A4988 Stepper -kuljettaja
  8. 5V säädin
  9. Arduino -tynnyrin pistoke
  10. 12V arduino virtalähde

Konsoli:

  1. NEMA 17 -askelin (täytyy olla melko voimakas,> 0,4 Nm)
  2. M6 sauva
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Tact -kytkimet

Laitteet

Tätä varten voit todennäköisesti päästä eroon käyttämällä vain 3D -tulostinta, mutta voit säästää paljon aikaa leikkaamalla kotelon laserilla ja voit myös valmistaa piirilevyjä. DXF- ja gerber -tiedostot ovat GitHubissa, joten voit tilata ne paikallisesti. Kierretangon ja moottorin välinen kytkin käännettiin sorvilla ja tämä saattaa olla ainoa ongelma, koska osan on oltava melko vahva vetämään tyynyjä, mutta tässä pyörässä ei ole paljon tilaa.

Ensimmäisen pyörän valmistamisen jälkeen ostin jyrsinkoneen, jonka avulla voin tehdä lovia kammen antureille. Se helpottaa niiden liimaamista ja suojaa niitä myös, jos jotain osuu kampaan. (Nämä anturit ovat pudonneet muutaman kerran, joten halusin olla turvassa.)

Vaihe 1: Kampi:

Kampi
Kampi
Kampi
Kampi
Kampi
Kampi

On parasta seurata tätä opetusohjelmaa:

Sinun on periaatteessa liimattava anturit kampeen neljästä paikasta ja liitettävä ne levyn sivuihin.

Oikeat liitännät ovat jo olemassa, joten sinun on vain juotettava johdinparit suoraan näille kahdeksalle levyn tyynylle.

Liitä antureihin ohuin mahdollinen johto - tyynyt on helppo nostaa. Sinun on ensin liimata anturit ja jätettävä vain tarpeeksi niitä ulos juotettavaksi, ja peitä loput epoksilla. Jos yrität juottaa ennen liimaamista, ne käpristyvät ja rikkoutuvat.

Piirilevyn kokoaminen:

  1. Työnnä kultapihdit alhaalta (jälkiä sisältävä puoli) kaikkiin reikiin paitsi pohjan lähellä oleviin reikiin.
  2. Aseta kolme lautaa (ESP32 päälle, sitten MPU, HX711 pohjaan) niin, että kullanneulat tarttuvat molempien reikien läpi.
  3. Juotos otsikot päällekkäisiin levyihin
  4. Leikkaa kultakupit irti pohjasta. (Yritä leikata ne ennen kokoonpanoa, jotta tiedät, että "kultapihdit" eivät ole terästä sisältä - niiden leikkaaminen on lähes mahdotonta ja sinun on viilattava tai jauhattava ne)
  5. juota loput kultapihdit levyn pohjaan.
  6. Lataa kammen laiteohjelmisto

Viimeinen vaihe on pakata koko kampi lämpökutistuvaan holkkiin.

Tämä levyn valmistusmenetelmä ei ole ihanteellinen, koska levyt vievät paljon tilaa, johon mahtuu muita asioita. Paras olisi juottaa kaikki komponentit suoraan levylle, mutta minulla ei ole taitoa juottaa näitä pieniä SMD -levyjä itse. Minun olisi tilattava se koottuna, ja luultavasti tekisin joitain virheitä ja lopulta tilaisin ne kolme kertaa ja odottaisin vuoden ennen niiden saapumista.

Jos joku pystyisi suunnittelemaan levyn, olisi hienoa, jos siinä olisi paristosuojaus ja anturi, joka käynnistäisi ESP: n, jos kampi alkaa liikkua.

TÄRKEÄ

HX711 -anturi on oletusarvoisesti asetettu 10 Hz: iin - se on paljon hitaampaa tehon mittauksessa. Sinun on nostettava tappi 15 levyltä ja liitettävä se nastaan 16. Tämä ajaa tappia KORKEA ja ottaa käyttöön 80 Hz: n tilan. Tämä 80 Hz, muuten, asettaa koko arduino -silmukan taajuuden.

Käyttö

ESP32 on ohjelmoitu nukkumaan 30 sekunnin jälkeen ilman Bluetooth -laitetta. Voit kytkeä sen takaisin päälle painamalla nollauspainiketta. Anturit saavat virtaa myös digitaalisesta nastasta, joka muuttuu LOW -tilassa LOW -tilaan. Jos haluat testata antureita kirjastojen esimerkkikoodilla, sinun on ajettava tappi HIGH ja odotettava hetki, ennen kuin anturit kytkeytyvät päälle.

Asennuksen jälkeen anturit on kalibroitava lukemalla arvo ilman voimaa ja sitten painolla (käytin 12 kg: n tai 16 kg: n kahvakuulaa poljin). Nämä arvot on syötettävä powerCrank -koodiin.

On parasta taarata kampi ennen jokaista ajoa - sen ei pitäisi pystyä taaraamaan itseään, kun joku polkee, mutta parempi olla kuin pahoillani, ja se on mahdollista taarata vain kerran käynnistyksen yhteydessä. Jos huomaat outoja tehotasoja, sinun on toistettava tämä prosessi:

  1. Aseta kampi suoraan alas, kunnes valo alkaa vilkkua.
  2. Valo palaa muutaman sekunnin kuluttua - älä koske siihen
  3. Kun valo sammuu, se asettaa nykyisen voiman uutena 0: ksi.

Jos haluat käyttää vain kampaa ilman konsolia, koodi on täällä githubissa. Kaikki muu toimii samalla tavalla.

Vaihe 2: Konsoli

Konsoli
Konsoli
Konsoli
Konsoli
Konsoli
Konsoli

Kotelo on leikattu 3 mm: n akryylistä, painikkeet ovat 3D -tulostettuja ja LCD -näytössä on välikappaleita, jotka on leikattu 5 mm: n akryylistä. Se on liimattu kuumalla liimalla (se tarttuu melko hyvin akryyliin) ja siinä on 3D -painettu "kiinnike", joka pitää piirilevyn kiinni LCD -näytössä. Nestekidenäytön tapit on juotettu alhaalta, joten se ei häiritse ESP: tä.

ESP on juotettu ylösalaisin, joten USB-portti sopii koteloon

Erillinen painikepiirilevy on liimattu kuumaliimalla, joten painikkeet jäävät reikiinsä, mutta painavat silti kytkimiä. Painikkeet on liitetty korttiin JST PH 2.0 -liittimillä ja nastan järjestys on helppo päätellä kaaviosta

On erittäin tärkeää asentaa askelmoottori oikeaan suuntaan (potentiometri lähellä ESP: tä)

Koko SD -kortin osa on poistettu käytöstä, koska kukaan ei käyttänyt sitä ensimmäisessä versiossa. Koodi on päivitettävä joillakin käyttöliittymäasetuksilla, kuten ajajan painolla ja vaikeusasetuksella.

Konsoli on asennettu käyttämällä laserleikattuja "aseita" ja vetoketjuja. Pienet hampaat kaivautuvat ohjaustankoon ja pitävät konsolia.

Vaihe 3: Moottori

Moottori
Moottori
Moottori
Moottori
Moottori
Moottori

Moottori pitää itsensä säätönupin paikalla 3D -tulostetulla kiinnikkeellä. Sen akseliin on asennettu liitin - toisella puolella on 5 mm reikä kiinnitysruuveilla akselin pitämiseksi, toisella on M6 -kierre ja kiinnitysruuvit sen lukitsemiseksi. Jos haluat, voit todennäköisesti tehdä sen porapuristimessa noin 10 mm: n pyöreästä materiaalista. Sen ei tarvitse olla erittäin tarkka, koska moottoria ei ole asennettu kovin tiukasti.

Pala M6 -kierretankoa kierretään liittimeen ja se vetää messinkistä M6 -mutteria. Työstin sen, mutta se voidaan tehdä yhtä helposti messingistä viilalla. Voit jopa hitsata joitakin bittejä normaaliin mutteriin, jotta se ei pyöri. 3D -painettu mutteri voi myös olla ratkaisu.

Kierteen on oltava ohuempi kuin perusruuvi. Sen nousu on noin 1,3 mm ja M6: n 0,8 mm. Moottorilla ei ole tarpeeksi vääntömomenttia ruuvin kääntämiseksi.

Mutteri on voideltava hyvin, koska moottori tuskin voi kääntää ruuvia korkeammilla asetuksilla

Vaihe 4: Määritykset

Asetukset
Asetukset
Asetukset
Asetukset

Voit ladata koodin ESP32: een Arduino IDE: stä noudattamalla tätä opetusohjelmaa:

Taulu on "WeMos LOLIN32", mutta "Dev -moduuli" toimii myös

Ehdotan Visual Studion käyttöä, mutta se voi usein rikkoutua.

Ennen ensimmäistä käyttöä

Kampi on asetettava "Kampi" -vaiheen mukaisesti

Käyttämällä "nRF Connect" -sovellusta sinun on tarkistettava ESP32 -kammen MAC -osoite ja asetettava se BLE.h -tiedostoon.

IndoorBike.inon rivillä 19 sinun on asetettava, kuinka monta ruuvin kierrosta tarvitaan, jotta vastus saadaan täysin löysältä maksimiin. ("Suurin" on tarkoituksellinen subjektiivinen, voit säätää vaikeutta tällä asetuksella.)

Älykkäällä kouluttajalla on "virtuaalivaihteet" niiden asettamiseksi oikein, sinun on kalibroitava se riveille 28 ja 29. Sinun on poljettava jatkuvalla poljinnopeudella tietyllä vastusasetuksella, luettava sitten teho ja asetettava se tiedostoon. Toista tämä toisella asetuksella.

Vasemmanpuoleisin painike vaihtaa ERG -tilasta (absoluuttinen vastus) simulaatiotilaan (virtuaalivaihteet). Simulaatiotila ilman tietokoneliitäntää ei tee mitään, koska simulaatiotietoja ei ole.

Rivi 36. asettaa virtuaalivaihteet - lukumäärän ja suhteet. Lasket ne jakamalla etuhammaspyörän hampaiden lukumäärä takavaihteen hampaiden lukumäärällä.

Riville 12. laitat ajajan ja pyörän painon ([newtonit], massa kertaa painovoiman kiihtyvyys!)

Koko fysiikan osa on luultavasti liian monimutkainen, enkä edes muista, mitä se tekee tarkasti, mutta lasken tarvittavan vääntömomentin pyöräilijän vetämiseksi ylämäkeen tai jotain sellaista (siksi kalibrointi).

Nämä parametrit ovat erittäin subjektiivisia, joten sinun on määritettävä ne muutaman ajon jälkeen, jotta ne toimisivat oikein.

Virheenkorjauksen COM -portti lähettää Bluetoothin kautta vastaanotettua suoraa binääridataa lainausmerkeissä ('') ja simulaatiotiedoissa.

Konfiguraattori

Koska oletetun realistisen fysiikan kokoonpano osoittautui valtavaksi vaivaksi, jotta se tuntuisi realistiselta, loin graafisen käyttöliittymän konfiguraattorin, jonka avulla käyttäjät voivat määrittää graafisesti funktion, joka muuntaa mäen luokasta absoluuttiseen vastustasoon. Se ei ole vielä täysin valmis, eikä minulla ollut mahdollisuutta testata sitä, mutta ensi kuussa vaihdan toisen pyörän, joten kiillotan sen sitten.

Vaihteet -välilehdessä voit asettaa kunkin vaihteen suhteen liikuttamalla liukusäätimiä. Sitten sinun on kopioitava koodibitti, jotta voit korvata koodissa määritellyt hammaspyörät.

"Arvosana" -välilehdellä saat kaavion lineaarisesta funktiosta (kyllä, osoittautuu, että matematiikan vihatuin aihe on todella hyödyllinen), joka ottaa arvosanan (pystyakseli) ja antaa absoluuttisen vastusaskeleen (vaaka -akseli). Menen matematiikkaan vähän myöhemmin kiinnostuneille.

Käyttäjä voi määrittää tämän toiminnon käyttämällä kahta sen päälle asetettua pistettä. Oikealla on paikka vaihtaa nykyinen vaihde. Valittu vaihde, kuten voitte kuvitella, muuttaa tapaa, miten laatu kartoitetaan vastustuskykyyn - alemmilla vaihteilla on helpompi polkea ylämäkeen. Liukusäätimen siirtäminen muuttaa toista kerrointa, joka vaikuttaa siihen, miten valittu vaihde muuttaa toimintoa. Sen kanssa on helpointa leikkiä nähdäkseen kuinka se käyttäytyy. Sinun on ehkä myös kokeiltava muutamia eri asetuksia löytääksesi sinulle parhaiten sopivan.

Se on kirjoitettu Python 3: ssa ja sen pitäisi toimia oletuskirjastojen kanssa. Jos haluat käyttää sitä, sinun on poistettava rivien kommentit heti "poista nämä rivit, jotta voit käyttää konfiguraattoria". Kuten sanoin, sitä ei testattu, joten saattaa tapahtua virheitä, mutta jos jotain ilmenee, kirjoita kommentti tai avaa ongelma, jotta voin korjata sen.

Matematiikka (ja fysiikka)

Ainoa tapa, jolla ohjain voi saada sinut tuntemaan itsesi ylämäkeen, on kiertää vastusruuvia. Meidän on muutettava arvosana kierrosten lukumääräksi. Asennuksen helpottamiseksi koko alue täysin löysästä kammen kääntämättä jättämiseen on jaettu 40 vaiheeseen, sama kuin ERG -tilassa, mutta tällä kertaa se käyttää todellisia numeroita kokonaislukujen sijasta. Tämä tehdään yksinkertaisella karttatoiminnolla - voit etsiä sen koodista. Nyt olemme askeleen korkeammalla - ruuvin kierrosten sijaan käsittelemme kuvitteellisia askeleita.

Miten se todella toimii, kun nouset pyörällä (olettaen vakionopeuden)? Ilmeisesti on oltava jokin voima, joka työntää sinut ylös, tai muuten rullaisit alas. Tämän voiman, kuten ensimmäinen liikelaki kertoo, on oltava kooltaan yhtä suuri, mutta vastakkainen suunnassa kuin voima, joka vetää sinut alas, jotta voisit olla tasaisesti liikkeessä. Se johtuu pyörän ja maan välisestä kitkasta, ja jos piirrät näiden voimien kaavion, sen on oltava yhtä suuri kuin pyörän paino ja ajaja kertaa arvosanalla:

F = Fg*G

Mikä saa pyörän kohdistamaan tämän voiman? Vaihteiden ja pyörien suhteen on helpompaa ajatella vääntömomentin suhteen, joka on yksinkertaisesti voima kertaa säde:

t = F*R

Vaihteiden mukana annat vääntömomentin kampille, joka vetää ketjusta ja kääntää pyörää. Pyörän kääntämiseen tarvittava vääntömomentti kerrotaan vaihteella:

tp = tw*gr

ja takaisin vääntömomenttikaavasta saamme polkimen kääntämiseen tarvittavan voiman

Fp = tp/r

Tämän voimme mitata kammen tehomittarilla. Koska dynaaminen kitka liittyy lineaarisesti voimaan ja koska tämä pyörä käyttää jousia tämän voiman tuottamiseksi, se on lineaarinen ruuvin liikkeen suhteen.

Teho on voima kertaa nopeus (olettaen, että vektoreiden suunta on sama)

P = F*V

ja polkimen lineaarinen nopeus liittyy kulmanopeuteen:

V = ω*r

ja niin voimme laskea voiman, joka tarvitaan polkimien kääntämiseen asetetulla vastustasolla. Koska kaikki liittyy lineaarisesti, voimme käyttää mittasuhteita tähän.

Tämä oli olennaisesti se, mitä ohjelmisto tarvitsi laskemaan kalibroinnin aikana ja käyttämällä kiertotietä saadakseen meille monimutkaisen komposiitin, mutta lineaarisen funktion, joka liittyy luokkaan vastus. Kirjoitin kaiken paperille lasken lopullisen yhtälön ja kaikista vakioista tuli kolme kertointa.

Tämä on teknisesti kolmiulotteinen funktio, joka edustaa tasoa (mielestäni), joka käyttää arvoja ja välityssuhdetta argumentteina, ja nämä kolme kerrointa liittyvät tason määrittämiseen tarvittaviin kertoimiin, mutta koska vaihteet ovat erillisiä numeroita, se oli helpompaa tehdä siitä parametri ennusteiden ja vastaavien käsittelemisen sijasta. Ensimmäinen ja kolmas kertoimet voidaan määrittää yhdellä suoralla ja (-1)* toinen kerroin on pisteen X-koordinaatti, jossa viiva "pyörii" vaihdettaessa.

Tässä visualisoinnissa argumentteja edustaa pystyviiva ja arvoja vaakasuuntainen viiva, ja tiedän, että tämä saattaa olla ärsyttävää, mutta se oli minulle intuitiivisempaa ja sopi paremmin käyttöliittymään. Tämä on luultavasti syy siihen, miksi taloustieteilijät piirtävät kaavionsa tällä tavalla.

Vaihe 5: Lopeta

Nyt tarvitset sovelluksia, joilla voit ajaa uudella kouluttajallasi (mikä säästää noin 900 dollaria:)). Tässä on mielipiteeni joistakin niistä.

  • RGT Cycling - mielestäni paras - sillä on täysin ilmainen vaihtoehto, mutta sillä on vähän kappaleita. Käyttää parhaiten yhteysosaa, koska puhelimesi muodostaa yhteyden Bluetoothin kautta ja tietokone näyttää raidan. Käyttää realistista videota AR -pyöräilijän kanssa
  • Rouvy - paljon kappaleita, vain maksullinen tilaus, jostain syystä PC -sovellus ei toimi tämän kanssa, sinun on käytettävä puhelintasi. Ongelmia saattaa ilmetä, kun kannettava tietokone käyttää samaa korttia bluetooth- ja wifi -yhteyksille, se usein viivästyy eikä halua ladata
  • Zwift - animoitu peli, vain maksullinen, toimii varsin hyvin kouluttajan kanssa, mutta käyttöliittymä on varsin alkeellinen - kantoraketti näyttää valikon Internet Explorerilla.

Jos pidit rakentamisesta (tai et), kerro siitä kommenteissa ja jos sinulla on kysyttävää, voit kysyä täältä tai lähettää ongelman githubille. Selitän mielelläni kaiken, koska se on melko monimutkaista.

Suositeltava: