Taula de continguts:

Entrenador intel·ligent de bicicleta interior de bricolatge: 5 passos
Entrenador intel·ligent de bicicleta interior de bricolatge: 5 passos

Vídeo: Entrenador intel·ligent de bicicleta interior de bricolatge: 5 passos

Vídeo: Entrenador intel·ligent de bicicleta interior de bricolatge: 5 passos
Vídeo: RAF CAMORA - Primo (prod. X-Plosive & RAF Camora) 2024, De novembre
Anonim
Entrenador intel·ligent de bici interior de bricolatge
Entrenador intel·ligent de bici interior de bricolatge
Entrenador intel·ligent de bici interior de bricolatge
Entrenador intel·ligent de bici interior de bricolatge
Entrenador intel·ligent de bici interior de bricolatge
Entrenador intel·ligent de bici interior de bricolatge

Introducció

Aquest projecte va començar com una simple modificació d'una bicicleta interior Schwinn IC Elite que utilitza un cargol senzill i pastilles de feltre per configurar la resistència. El problema que volia resoldre era que el pas del cargol era gran, de manera que el rang des de no poder pedalar fins que la roda gira completament lliure era de només un parell de graus al pom de resistència. Al principi vaig canviar el cargol per M6, però després hauria de fer un comandament, per què no només heu d’utilitzar un motocapa NEMA 17 per canviar la resistència? Si ja hi ha components electrònics, per què no afegir un comptador de potència de manovella i una connexió bluetooth a un ordinador per fer un entrenador intel·ligent?

Això va resultar més difícil del que s'esperava, perquè no hi havia exemples sobre com emular un mesurador de potència amb un arduino i un bluetooth. Vaig acabar dedicant unes 20 hores a programar i interpretar les especificacions de BLE GATT. Espero que, proporcionant un exemple, pugui ajudar algú a no perdre tant de temps en intentar entendre què significa exactament "Camp de tipus de dades de servei".

Programari

Tot el projecte es troba a GitHub:

github.com/kswiorek/ble-ftms

Us recomano fer servir Visual Studio amb un connector VisualGDB si teniu previst fer alguna cosa més greu que simplement copiar el meu codi.

Si teniu preguntes sobre el programa, pregunteu-ho, ja sé que els meus comentaris minimalistes poden no ajudar-vos gaire.

Crèdits

Gràcies a stoppi71 per la seva guia sobre com fer un mesurador de potència. Vaig fer la manovella segons el seu disseny.

Subministraments:

Els materials d’aquest projecte depenen en gran mesura de la moto que esteu modificant, però hi ha algunes parts universals.

Maneta:

  1. Mòdul ESP32
  2. HX711 Sensor de pes ADC
  3. Calibres de tensió
  4. MPU - giroscopi
  5. Una petita bateria Li-Po (al voltant de 750 mAh)
  6. Funda termorretractable
  7. A4988 Controlador pas a pas
  8. Regulador de 5V
  9. Una presa de barril arduino
  10. Alimentació arduino de 12V

Consola:

  1. Pas a pas NEMA 17 (ha de ser força potent,> 0,4 Nm)
  2. Vareta M6
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Interruptors tàctils

Equipament

Per fer-ho, probablement podríeu sortir només utilitzant una impressora 3D, però podeu estalviar molt de temps tallant la caixa amb làser i també podeu fabricar PCB. Els fitxers DXF i gerber es troben a GitHub, de manera que podeu demanar-los localment. L'acoblador de la barra roscada al motor es va encendre amb un torn i aquest podria ser l'únic problema, ja que la peça ha de ser força forta per tirar de les coixinetes, però no hi ha molt espai en aquesta bicicleta en particular.

Des que vaig fabricar la primera bicicleta, vaig adquirir una fresadora que em permetia fer ranures per als sensors de la manovella. Facilita una mica d’enganxar-los i també els protegeix si alguna cosa colpeja la manovella. (Alguns cops he caigut aquests sensors, així que volia estar segur.)

Pas 1: la manovella:

La manovella
La manovella
La manovella
La manovella
La manovella
La manovella

El millor és seguir aquest tutorial:

Bàsicament cal enganxar els sensors a la manovella en quatre llocs i connectar-los als laterals de la placa.

Les connexions adequades ja hi són, de manera que només heu de soldar els parells de cables directament a aquests vuit coixinets de la placa.

Per connectar-vos als sensors utilitzeu el cable més prim possible: els coixinets són molt fàcils d’elevar. Primer heu d’enganxar els sensors i deixar-ne prou a l’exterior per soldar i, a continuació, tapar la resta amb epoxi. Si intenteu soldar abans d’enganxar, s’arrissen i es trenquen.

Per muntar el PCB:

  1. Introduïu passadors d'or des de la part inferior (el costat amb traces) a tots els forats, excepte als verticals propers a la part inferior.
  2. Col·loqueu els tres taulers (ESP32 a la part superior, després MPU, l’HX711 a la part inferior) de manera que els passadissos s’enganxin pels dos forats.
  3. Soldeu les capçaleres a les taules de la part superior
  4. Talleu els passadors d'or de la part inferior. (Proveu-los de tallar-los abans de muntar-los, de manera que sabeu que els "pincs daurats" no són d'acer a l'interior; els fa gairebé impossibles de tallar i els heu de llimar o moldre).
  5. soldeu els passadors d'or restants a la part inferior del tauler.
  6. Pengeu el firmware de la maneta

L’últim pas és empaquetar tota la manovella amb un mànec termoencongible.

Aquest mètode de fabricació del tauler no és l’ideal, ja que els taulers ocupen molt d’espai on podríeu encabir altres coses. El millor seria soldar tots els components directament a la placa, però em falta l’habilitat per soldar jo mateix aquests petits SMD. Hauria de demanar-lo muntat i probablement cometria alguns errors i acabaria ordenant-los tres vegades i esperant un any abans que arribessin.

Si algú pogués dissenyar la placa, seria fantàstic que tingués alguna protecció de la bateria i un sensor que activés l’ESP si la manovella comencés a moure’s.

IMPORTANT

El sensor HX711 està configurat per defecte a 10Hz; és molt lent per mesurar la potència. Heu d’aixecar el pin 15 de la placa i connectar-lo al pin 16. Això fa que el pin sigui ALTA i permeti el mode 80Hz. Aquest 80Hz, per cert, estableix la velocitat de tot el bucle arduino.

Ús

L'ESP32 està programat per dormir després de 30 anys sense cap dispositiu Bluetooth connectat. Per tornar a activar-lo, cal prémer el botó de reinici. Els sensors també s’alimenten des d’un pin digital, que es torna BAIX en el mode de repòs. Si voleu provar els sensors amb el codi d'exemple de les biblioteques, heu de conduir el pin HIGH i esperar una mica abans que els sensors s'encenguin.

Després del muntatge, cal calibrar els sensors llegint el valor sense força i després amb un pes aplicat (he utilitzat un kettlebell de 12 o 16 kg penjat al pedal). Cal posar aquests valors al codi powerCrank.

El millor és tarar la manovella abans de cada recorregut; no hauria de ser capaç de tarar-se quan algú pedaleja, però és més segur que perdonar i és possible tarar-la només una vegada per cada encès. Si observeu uns nivells de potència estranys, heu de repetir aquest procés:

  1. Col·loqueu la manovella cap avall fins que la llum comenci a parpellejar.
  2. Al cap d'un parell de segons, la llum continuarà encesa; no la toqueu llavors
  3. Quan la llum s'apaga, estableix la força actual detectada com a 0 nova.

Si només voleu utilitzar la maneta, sense la consola, el codi es troba aquí a github. Tota la resta funciona igual.

Pas 2: la consola

La consola
La consola
La consola
La consola
La consola
La consola

La caixa està tallada en acrílic de 3 mm, els botons estan impresos en 3D i hi ha separadors per a la pantalla LCD, tallats en acrílic de 5 mm. S'enganxa amb cola calenta (s'adhereix bastant bé a l'acrílic) i hi ha un "suport" imprès en 3D per subjectar el PCB a la pantalla LCD. Els pins de la pantalla LCD es solden des de la part inferior de manera que no interfereixin amb l’ESP.

L'ESP està soldat al revés, de manera que el port USB s'adapta a la caixa

El PCB de botons separat està enganxat amb cola calenta, de manera que els botons queden capturats als seus forats, però continuen pressionant els interruptors. Els botons es connecten a la placa amb connectors JST PH 2.0 i l'ordre dels pins és fàcil de deduir de l'esquema

És molt important muntar el controlador pas a pas en l’orientació correcta (el potenciòmetre prop de l’ESP)

Tota la part de la targeta SD està desactivada, ja que ningú la va utilitzar a la primera versió. Cal actualitzar el codi amb algunes opcions d’interfície d’usuari, com ara el pes del pilot i la dificultat.

La consola es munta utilitzant "braços" de lasercut i zipties. Les petites dents caven al manillar i subjecten la consola.

Pas 3: el motor

El motor
El motor
El motor
El motor
El motor
El motor

El motor es manté al lloc del comandament amb un suport imprès en 3D. Al seu eix hi ha muntat un acoblament: un costat té un forat de 5 mm amb cargols fixats per subjectar l’eix, l’altre té un fil M6 amb cargols fixats per bloquejar-lo. Si voleu, probablement pugueu fer-ho amb una broca a partir d’un material rodó de 10 mm. No cal que sigui extremadament precís, ja que el motor no està muntat molt fort.

Una peça de barra roscada M6 es cargola a l’acoblador i tira d’una femella M6 de llautó. El vaig mecanitzar, però es pot fer tan fàcilment amb un tros de llautó amb una llima. Fins i tot podeu soldar alguns bits a una femella normal, de manera que no giraria. Una femella impresa en 3D també pot ser una solució.

El fil ha de ser més fi que el cargol. El seu pas és d’uns 1,3 mm i, per a M6, de 0,8 mm. El motor no té prou parell per activar el cargol de la bomba.

La femella ha d’estar ben lubricada, ja que el motor amb prou feines pot girar el cargol en els paràmetres superiors

Pas 4: Configuració

Configuració
Configuració
Configuració
Configuració

Per carregar el codi a ESP32 des de Arduino IDE, heu de seguir aquest tutorial:

El tauler és "WeMos LOLIN32", però el "mòdul Dev" també funciona

Us suggereixo utilitzar Visual Studio, però sovint es pot trencar.

Abans del primer ús

La manovella s'ha de configurar segons el pas "Biela"

Mitjançant l'aplicació "nRF Connect" heu de comprovar l'adreça MAC de la maneta ESP32 i establir-la al fitxer BLE.h.

A la línia 19 de indoorBike.ino heu d’establir quantes rotacions del cargol es necessiten per ajustar la resistència des de la solta fins a la màxima. (El "màxim" és subjectiu a propòsit; ajusteu la dificultat amb aquest paràmetre.)

L'entrenador intel·ligent té "engranatges virtuals" per configurar-los correctament, cal calibrar-lo a les línies 28 i 29. Cal pedalar amb una cadència constant en una configuració de resistència determinada, després llegir la potència i configurar-la al fitxer. Repetiu-ho de nou amb una altra configuració.

El botó situat a l’esquerra canvia del mode ERG (resistència absoluta) al mode de simulació (engranatges virtuals). El mode de simulació sense connexió a l’ordinador no fa res, ja que no hi ha dades de simulació.

La línia 36. defineix els engranatges virtuals: el nombre i les relacions. Els calculeu dividint el nombre de dents de l’engranatge davanter pel nombre de dents de l’engranatge posterior.

A la línia 12. poses el pes del pilot i de la moto (En [newtons], la massa es multiplica per l’acceleració gravitatòria!)

Probablement tota la part de la física és massa complicada i fins i tot no recordo què fa exactament, però calculo el parell necessari per tirar el ciclista cap amunt o alguna cosa semblant (per això el calibratge).

Aquests paràmetres són molt subjectius; cal que els configureu després d’unes quantes travessies perquè funcionin correctament.

El port COM de depuració envia dades binàries directes rebudes pel bluetooth entre cometes ('') i dades de simulació.

El configurador

Com que la configuració de la física suposadament realista va resultar ser una gran molèstia per fer-la sentir realista, vaig crear un configurador GUI que hauria de permetre als usuaris definir gràficament la funció que converteix del nivell del turó al nivell de resistència absolut. Encara no està completament acabada i no vaig tenir l'oportunitat de provar-la, però el proper mes convertiré una altra moto, així que la poliré aleshores.

A la pestanya "Engranatges" podeu establir la proporció de cada engranatge movent els control lliscants. A continuació, haureu de copiar el bit de codi per substituir els engranatges definits al codi.

A la pestanya "Qualificació" se us mostra un gràfic d'una funció lineal (sí, resulta que l'assignatura més odiada en matemàtiques és realment útil) que pren el grau (eix vertical) i genera passos de resistència absoluta (eix horitzontal). Aniré a les matemàtiques una mica més tard per als interessats.

L'usuari pot definir aquesta funció utilitzant els dos punts que hi posa. A la dreta hi ha un lloc per canviar l’engranatge actual. L’engranatge seleccionat, com us podríeu imaginar, canvia la forma en què s’assigna la resistència; en marxes inferiors és més fàcil pedalar cap amunt. Si moveu el control lliscant es canvia el segon coeficient, que influeix en la manera en què l’engranatge seleccionat canvia la funció. El més fàcil és jugar-hi una estona per veure com es comporta. És possible que també hàgiu de provar uns quants paràmetres diferents per trobar allò que us convé més.

Va ser escrit en Python 3 i hauria de funcionar amb les biblioteques per defecte. Per utilitzar-lo, heu de descomentar les línies immediatament després de "descomentar-les per utilitzar el configurador". Com he dit, no es va provar, de manera que pot haver-hi alguns errors, però si apareix alguna cosa, escriviu un comentari o obriu un problema per poder corregir-lo.

Les matemàtiques (i la física)

L'única manera que el controlador pot fer sentir com si anés pujant és girant el cargol de resistència. Hem de convertir el grau al nombre de rotacions. Per facilitar la configuració, tot el rang, des del completament fluix fins a no poder girar la manovella, es divideix en 40 passos, els mateixos que s’utilitzen en el mode ERG, però aquesta vegada utilitza nombres reals en lloc de nombres enters. Això es fa amb una simple funció de mapa: podeu cercar-la al codi. Ara som un pas més amunt: en lloc de tractar amb revolucions del cargol, estem davant de passos imaginaris.

Ara bé, com funciona realment quan es puja en bicicleta (suposant una velocitat constant)? Obviouslybviament, cal que hi hagi una força que us empeny cap amunt, en cas contrari, baixareu. Aquesta força, tal com ens indica la primera llei del moviment, ha de ser igual de magnitud, però oposada en direcció a la força que us fa tirar cap avall, perquè pugueu estar en moviment uniforme. Prové de la fricció entre la roda i el terra i, si es dibuixa l’esquema d’aquestes forces, ha de ser igual al pes de la moto i al pilot el doble del nivell:

F = Fg * G

Ara, què fa que la roda apliqui aquesta força? Com que estem tractant d’engranatges i rodes, és més fàcil pensar en termes de parell, que és simplement la força multiplicada pel radi:

t = F * R

Com que hi ha engranatges implicats, imparteu un parell motor a la manovella, que tira de la cadena i gira la roda. El parell necessari per girar la roda es multiplica per la relació d'engranatges:

tp = tw * gr

i tornant de la fórmula del parell, obtenim la força necessària per girar el pedal

Fp = tp / r

Això es pot mesurar mitjançant el mesurador de potència de la manovella. Com que la fricció dinàmica està relacionada linealment amb la força i com aquesta bicicleta en particular fa servir molls per impartir aquesta força, és lineal al moviment del cargol.

La potència és la força multiplicada per la velocitat (suposant la mateixa direcció dels vectors)

P = F * V

i la velocitat lineal del pedal està relacionada amb la velocitat angular:

V = ω * r

i així podem calcular la força necessària per girar els pedals en un nivell de resistència fixat. Com que tot està relacionat linealment, podem fer servir proporcions per fer-ho.

Això era essencialment el que el programari necessitava calcular durant el calibratge i utilitzar una forma de rotonda per obtenir un compost compost complicat, però una funció lineal que relacionava el grau amb la resistència. Vaig escriure tot en paper calculant l'equació final i totes les constants es van convertir en tres coeficients.

Aquesta és tècnicament una funció 3D que representa un pla (crec) que pren el grau i la relació d'engranatges com a arguments, i aquests tres coeficients estan relacionats amb els necessaris per definir un pla, però com que els engranatges són nombres discrets, va ser més fàcil per convertir-lo en un paràmetre en lloc de tractar amb projeccions i altres. El primer i el tercer coeficient es poden definir mitjançant una única línia i (-1) * el segon coeficient és la coordenada X del punt, on la línia "gira" al canviar de marxa.

En aquesta visualització, els arguments es representen per la línia vertical i els valors per l’horitzontal, i sé que això pot ser molest, però va ser més intuïtiu per a mi i s’adaptava millor a la GUI. Probablement aquesta és la raó per la qual els economistes dibuixen les seves gràfiques d’aquesta manera.

Pas 5: Acabeu

Ara necessiteu algunes aplicacions per utilitzar-les al vostre nou entrenador (cosa que us ha estalviat uns 900 dòlars:)). Aquí teniu les meves opinions sobre algunes d’elles.

  • RGT Cycling - al meu entendre el millor - té una opció totalment gratuïta, però té algunes pistes. Tracta de la millor part de la connexió, perquè el telèfon es connecta mitjançant bluetooth i un PC mostra la pista. Utilitza un vídeo realista amb un ciclista de RA
  • Rouvy: moltes pistes, només subscripció de pagament; per alguna raó, l'aplicació de PC no funciona amb això, heu d'utilitzar el telèfon. Pot haver-hi problemes quan el portàtil utilitza la mateixa targeta per Bluetooth i WiFi, sovint es queda enrere i no es vol carregar
  • Zwift: un joc d'animació, només de pagament, funciona força bé amb l'entrenador, però la interfície d'usuari és bastant primitiva: el llançador utilitza Internet Explorer per mostrar el menú.

Si us ha agradat la construcció (o no), digueu-me als comentaris i si teniu cap pregunta, podeu fer-ho aquí o enviar un problema a github. Amb molt de gust ho explicaré tot, ja que és força complicat.

Recomanat: