Sommario:

Allenatore intelligente per bici indoor fai-da-te: 5 passaggi
Allenatore intelligente per bici indoor fai-da-te: 5 passaggi

Video: Allenatore intelligente per bici indoor fai-da-te: 5 passaggi

Video: Allenatore intelligente per bici indoor fai-da-te: 5 passaggi
Video: Interval training al medio | Allenamento indoor. 2024, Dicembre
Anonim
Allenatore intelligente per bici indoor fai-da-te
Allenatore intelligente per bici indoor fai-da-te
Allenatore intelligente per bici indoor fai-da-te
Allenatore intelligente per bici indoor fai-da-te
Allenatore intelligente per bici indoor fai-da-te
Allenatore intelligente per bici indoor fai-da-te

introduzione

Questo progetto è iniziato come una semplice modifica a una bici indoor Schwinn IC Elite che utilizza una semplice vite e feltrini per le impostazioni di resistenza. Il problema che volevo risolvere era che il passo della vite era troppo grande, quindi l'intervallo dal non poter pedalare alla ruota che girava completamente libera era solo di un paio di gradi sulla manopola della resistenza. All'inizio ho cambiato la vite in M6, ma poi avrei dovuto fare una manopola, quindi perché non usare semplicemente un mottor stepper NEMA 17 rimasto per cambiare la resistenza? Se c'è già dell'elettronica, perché non aggiungere un misuratore di potenza a manovella e una connessione bluetooth a un computer per creare un trainer intelligente?

Questo si è rivelato più difficile del previsto, perché non c'erano esempi su come emulare un misuratore di potenza con un arduino e il bluetooth. Ho finito per dedicare circa 20 ore alla programmazione e all'interpretazione delle specifiche BLE GATT. Spero che fornendo un esempio posso aiutare qualcuno a non perdere così tanto tempo a cercare di capire cosa significa esattamente "Campo del tipo di annuncio dei dati di servizio"…

Software

L'intero progetto è su GitHub:

github.com/kswiorek/ble-ftms

Consiglio vivamente di utilizzare Visual Studio con un plug-in VisualGDB se hai intenzione di fare qualcosa di più serio del semplice copiare e incollare il mio codice.

Se hai domande sul programma, chiedi pure, so che i miei commenti minimalisti potrebbero non essere di grande aiuto.

Titoli di coda

Grazie a stoppi71 per la sua guida su come realizzare un misuratore di potenza. Ho fatto la manovella secondo il suo progetto.

Forniture:

I materiali per questo progetto dipendono molto dalla bici che stai modificando, ma ci sono alcune parti universali.

Manovella:

  1. Modulo ESP32
  2. HX711 Sensore di peso ADC
  3. Estensimetri
  4. MPU - giroscopio
  5. Una piccola batteria Li-Po (circa 750 mAh)
  6. Manicotto termoretraibile
  7. A4988 Driver passo-passo
  8. Regolatore 5V
  9. Un jack a botte arduino
  10. Alimentatore arduino 12V

Console:

  1. NEMA 17 stepper (deve essere abbastanza potente, >0.4Nm)
  2. Asta M6
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Interruttori tattili

Attrezzatura

Per fare ciò, probabilmente potresti farla franca utilizzando solo una stampante 3D, tuttavia puoi risparmiare molto tempo tagliando al laser la custodia e puoi anche realizzare PCB. I file DXF e gerber sono su GitHub, quindi puoi ordinarli localmente. L'accoppiatore dall'asta filettata al motore è stato girato su un tornio e questo potrebbe essere l'unico problema, poiché la parte deve essere abbastanza forte per tirare le pastiglie, ma non c'è molto spazio in questa particolare bici.

Da quando ho realizzato la prima bici, ho acquistato una fresatrice che mi permette di realizzare delle scanalature per i sensori nella pedivella. Li rende un po' più facili da incollare e li protegge anche se qualcosa dovesse colpire la manovella. (Ho fatto cadere questi sensori alcune volte, quindi volevo essere al sicuro.)

Passaggio 1: la manovella:

la manovella
la manovella
la manovella
la manovella
la manovella
la manovella

È meglio seguire questo tutorial:

Fondamentalmente devi incollare i sensori alla pedivella in quattro punti e collegarli ai lati della scheda.

Le connessioni corrette sono già lì, quindi devi solo saldare le coppie di fili direttamente a questi otto pad sulla scheda.

Per connetterti ai sensori usa il filo più sottile possibile: i pad sono molto facili da sollevare. È necessario incollare prima i sensori e lasciarne fuori per saldare quel tanto che basta, quindi coprire il resto con resina epossidica. Se provi a saldare prima di incollare, si arricciano e si rompono.

Per assemblare il PCB:

  1. Inserisci gli spilli d'oro dal basso (il lato con le tracce) in tutti i fori tranne quelli verticali vicino al fondo.
  2. Posiziona le tre schede (ESP32 in alto, quindi MPU, HX711 in basso) in modo che i perni dorati penetrino in entrambi i fori.
  3. Saldare le intestazioni alle schede in alto
  4. Tagliare le spille d'oro dal fondo. (Prova a tagliarli prima del montaggio, così saprai che i tuoi "spilli d'oro" non sono d'acciaio all'interno - li rende quasi impossibili da tagliare e devi limare o molarli)
  5. saldare i restanti perni d'oro sul fondo della scheda.
  6. Carica il firmware per la pedivella

L'ultimo passo è imballare l'intera manovella con un manicotto termoretraibile.

Questo metodo per realizzare la tavola non è l'ideale, poiché le tavole occupano molto spazio in cui potresti inserire altre cose. La cosa migliore sarebbe saldare direttamente tutti i componenti alla scheda, ma non ho l'abilità di saldare da solo questi piccoli SMD. Avrei bisogno di ordinarlo assemblato, e probabilmente farei degli errori e finirei per ordinarli tre volte e aspettare un anno prima che arrivino.

Se qualcuno fosse in grado di progettare la scheda, sarebbe fantastico se avesse un circuito di protezione della batteria e un sensore che attiverebbe l'ESP se la manovella iniziasse a muoversi.

IMPORTANTE

Il sensore HX711 per impostazione predefinita è impostato su 10Hz - è molto lento per la misurazione della potenza. È necessario sollevare il pin 15 dalla scheda e collegarlo al pin 16. Questo pilota il pin HIGH e abilita la modalità 80Hz. Questo 80Hz, tra l'altro, imposta la frequenza dell'intero ciclo arduino.

Utilizzo

L'ESP32 è programmato per andare a dormire dopo 30 secondi senza alcun dispositivo bluetooth connesso. Per riaccenderlo è necessario premere il pulsante di ripristino. I sensori sono anche alimentati da un pin digitale, che diventa LOW in modalità di sospensione. Se vuoi testare i sensori con il codice di esempio dalle librerie devi guidare il pin HIGH e aspettare un po' prima che i sensori si accendano.

Dopo il montaggio i sensori vanno tarati leggendo il valore senza forzare e poi con un peso applicato (io ho usato un kettlebell da 12kg o 16kg appeso al pedale). Questi valori devono essere inseriti nel codice powerCrank.

È meglio tarare la pedivella prima di ogni corsa: non dovrebbe essere in grado di tarare da sola quando qualcuno sta pedalando, ma è meglio prevenire che curare ed è possibile tarare solo una volta per accensione. Se noti degli strani livelli di potenza devi ripetere questo processo:

  1. Abbassa la manovella finché la spia non inizia a lampeggiare.
  2. Dopo un paio di secondi la luce rimarrà accesa, quindi non toccarla
  3. Quando la luce si spegne imposta la forza corrente rilevata come un nuovo 0.

Se vuoi usare solo la manovella, senza la console, il codice è qui su github. Tutto il resto funziona allo stesso modo.

Passaggio 2: la console

La Console
La Console
La Console
La Console
La Console
La Console

La custodia è tagliata in acrilico da 3 mm, i pulsanti sono stampati in 3D e ci sono distanziali per l'LCD, tagliati in acrilico da 5 mm. È incollato con colla a caldo (si attacca abbastanza bene all'acrilico) e c'è una "staffa" stampata in 3D per tenere il PCB sull'LCD. I pin per l'LCD sono saldati dal lato inferiore in modo che non interferiscano con l'ESP.

L'ESP è saldato capovolto, quindi la porta USB si adatta alla custodia

Il PCB del pulsante separato è incollato con colla a caldo, quindi i pulsanti vengono catturati nei loro fori, ma continuano a premere gli interruttori. I pulsanti sono collegati alla scheda con connettori JST PH 2.0 e l'ordine dei pin è facile da dedurre dallo schema

È molto importante montare lo stepper driver con l'orientamento corretto (il potenziometro vicino all'ESP)

L'intera parte per la scheda SD è disabilitata, poiché nessuno la utilizzava nella prima versione. Il codice deve essere aggiornato con alcune impostazioni dell'interfaccia utente come il peso del ciclista e l'impostazione della difficoltà.

La console è montata utilizzando "braccia" lasercut e cerniere. I piccoli denti scavano nel manubrio e trattengono la console.

Passaggio 3: il motore

Il motore
Il motore
Il motore
Il motore
Il motore
Il motore

Il motore si mantiene al posto della manopola di regolazione con una staffa stampata in 3D. Al suo albero è montato un accoppiatore: un lato ha un foro da 5 mm con viti di fissaggio per tenere l'albero, l'altro ha una filettatura M6 con viti di fissaggio per bloccarlo. Se lo desideri, puoi probabilmente farlo con un trapano a colonna da un pezzo tondo da 10 mm. Non è necessario essere estremamente precisi in quanto il motore non è montato molto saldamente.

Un pezzo di barra filettata M6 è avvitato nell'accoppiatore e tira su un dado M6 in ottone. L'ho lavorato a macchina, ma può essere facilmente ricavato da un pezzo di ottone con una lima. Puoi anche saldare alcune punte a un dado normale, in modo che non ruoti. Anche un dado stampato in 3D può essere una soluzione.

La filettatura deve essere più fine della vite di serie. Il suo passo è di circa 1,3 mm e per M6 è di 0,8 mm. Il motore non ha una coppia sufficiente per girare la vite di serie.

Il dado deve essere ben lubrificato, poiché il motore riesce a malapena a girare la vite sulle impostazioni più alte

Passaggio 4: configurazione

Configurazione
Configurazione
Configurazione
Configurazione

Per caricare il codice su ESP32 da Arduino IDE devi seguire questo tutorial:

La scheda è "WeMos LOLIN32", ma funziona anche il "Modulo Dev"

Suggerisco di utilizzare Visual Studio, ma spesso può rompersi.

Prima del primo utilizzo

La pedivella deve essere impostata secondo il passaggio "Crank"

Utilizzando l'app "nRF Connect" è necessario verificare l'indirizzo MAC della pedivella ESP32 e impostarlo nel file BLE.h.

Nella riga 19 di indoorBike.ino è necessario impostare quante rotazioni della vite sono necessarie per impostare la resistenza da completamente allentata a massima. (Il "massimo" è volutamente soggettivo, regolate la difficoltà con questa impostazione.)

Lo smart trainer dispone di "marce virtuali" per impostarle correttamente, è necessario calibrarlo sulle linee 28 e 29. È necessario pedalare con cadenza costante su una determinata impostazione di resistenza, quindi leggere la potenza e impostarla nel file. Ripeti di nuovo con un'altra impostazione.

Il pulsante più a sinistra passa dalla modalità ERG (resistenza assoluta) alla modalità simulazione (marce virtuali). La modalità di simulazione senza una connessione al computer non fa nulla poiché non ci sono dati di simulazione.

La riga 36. imposta le marce virtuali - il numero e i rapporti. Li calcoli dividendo il numero di denti dell'ingranaggio anteriore per il numero di denti dell'ingranaggio posteriore.

Nella riga 12. metti il peso del ciclista e della bici (In [newton], massa per l'accelerazione gravitazionale!)

L'intera parte fisica di questo è probabilmente troppo complicata e anche io non ricordo cosa fa esattamente, ma calcolo la coppia necessaria per tirare il ciclista in salita o qualcosa del genere (ecco perché la calibrazione).

Questi parametri sono altamente soggettivi, è necessario impostarli dopo alcune uscite affinché funzionino correttamente.

La porta COM di debug invia i dati binari diretti ricevuti dal bluetooth tra virgolette (' ') e dati di simulazione.

Il configuratore

Poiché la configurazione della fisica apparentemente realistica si è rivelata un'enorme seccatura per renderla realistica, ho creato un configuratore GUI che dovrebbe consentire agli utenti di definire graficamente la funzione che converte dal grado della collina al livello di resistenza assoluta. Non è ancora del tutto finita e non ho avuto l'opportunità di provarla, ma nel prossimo mese convertirò un'altra moto, quindi la pulirò.

Nella scheda "Ingranaggi" puoi impostare il rapporto di ciascuna marcia spostando i cursori. È quindi necessario copiare il bit di codice per sostituire gli ingranaggi definiti nel codice.

Nella scheda "Grado" ti viene fornito un grafico di una funzione lineare (sì, risulta che l'argomento più odiato in matematica è effettivamente utile) che prende il voto (asse verticale) ed emette passi di resistenza assoluta (asse orizzontale). Mi occuperò di matematica un po 'più tardi per coloro che sono interessati.

L'utente può definire questa funzione utilizzando i due punti che si trovano su di essa. Sulla destra c'è un posto per cambiare la marcia attuale. La marcia selezionata, come puoi immaginare, cambia il modo in cui il grado mappa la resistenza: con le marce più basse è più facile pedalare in salita. Spostando il cursore si modifica il 2° coefficiente, che influenza il modo in cui la marcia selezionata modifica la funzione. È più facile giocarci un po' per vedere come si comporta. Potrebbe anche essere necessario provare alcune impostazioni diverse per trovare quella che funziona meglio per te.

È stato scritto in Python 3 e dovrebbe funzionare con le librerie predefinite. Per utilizzarlo è necessario decommentare le righe subito dopo "decommenta queste righe per utilizzare il configuratore". Come ho detto, non è stato testato, quindi potrebbero esserci degli errori, ma se succede qualcosa, scrivi un commento o apri un problema, così posso correggerlo.

La matematica (e la fisica)

L'unico modo in cui il controller può farti sentire come se stessi andando in salita è ruotando la vite della resistenza. Dobbiamo convertire il grado nel numero di rotazioni. Per facilitare la messa a punto, l'intera gamma da completamente allentata a non poter girare la manovella è suddivisa in 40 passaggi, gli stessi utilizzati nella modalità ERG, ma questa volta utilizza numeri reali anziché interi. Questo viene fatto con una semplice funzione mappa: puoi cercarla nel codice. Ora siamo un gradino più in alto - invece di occuparci di giri della vite, abbiamo a che fare con passi immaginari.

Ora come funziona effettivamente quando si sale in bici (assumendo una velocità costante)? Ovviamente ci deve essere una forza che ti spinga verso l'alto, altrimenti rotoleresti verso il basso. Questa forza, come ci dice la prima legge del moto, deve essere uguale in grandezza ma opposta in direzione alla forza che ti tira verso il basso, perché tu sia in movimento uniforme. Deriva dall'attrito tra la ruota e il terreno e se disegni il diagramma di queste forze, deve essere uguale al peso della bici e il ciclista moltiplica il grado:

F=Fg*G

Ora, cosa fa sì che la ruota applichi questa forza? Trattandosi di ingranaggi e ruote, è più facile pensare in termini di coppia, che è semplicemente la forza moltiplicata per il raggio:

t=F*R

Poiché sono coinvolti ingranaggi, si impartisce una coppia alla manovella, che tira la catena e fa girare la ruota. La coppia necessaria per girare la ruota viene moltiplicata per il rapporto di trasmissione:

tp=tw*gr

e tornando dalla formula della coppia otteniamo la forza necessaria per girare il pedale

Fp=tp/r

Questo è qualcosa che possiamo misurare usando il misuratore di potenza nella manovella. Poiché l'attrito dinamico è correlato in modo lineare alla forza e poiché questa particolare bicicletta utilizza le molle per impartire questa forza, è lineare al movimento della vite.

La potenza è la forza moltiplicata per la velocità (assumendo la stessa direzione dei vettori)

P=F*V

e la velocità lineare del pedale è correlata alla velocità angolare:

V=ω*r

e così possiamo calcolare la forza necessaria per far girare i pedali su un livello di resistenza impostato. Poiché tutto è correlato in modo lineare, possiamo usare le proporzioni per farlo.

Questo era essenzialmente ciò che il software aveva bisogno di calcolare durante la calibrazione e usando un modo indiretto per ottenere un composito complicato, ma una funzione lineare che metteva in relazione il grado con la resistenza. Ho scritto tutto su carta, ho calcolato l'equazione finale e tutte le costanti sono diventate tre coefficienti.

Questa è tecnicamente una funzione 3D che rappresenta un piano (credo) che prende come argomenti il grado e il rapporto di trasmissione, e questi tre coefficienti sono correlati a quelli necessari per definire un piano, ma poiché gli ingranaggi sono numeri discreti, è stato più semplice per renderlo un parametro invece di occuparsi di proiezioni e simili. Il 1° e il 3° coefficiente possono essere definiti da una singola linea e (-1)* il 2° coefficiente è la coordinata X del punto, dove la linea "ruota" quando si cambia marcia.

In questa visualizzazione gli argomenti sono rappresentati dalla linea verticale e i valori da quella orizzontale, e so che questo potrebbe essere fastidioso, ma per me era più intuitivo e si adattava meglio alla GUI. Questo è probabilmente il motivo per cui gli economisti tracciano i loro grafici in questo modo.

Passaggio 5: Finisci

Ora hai bisogno di alcune app con cui guidare sul tuo nuovo trainer (che ti ha fatto risparmiare circa $ 900:)). Ecco le mie opinioni su alcuni di essi.

  • RGT Cycling - secondo me il migliore - ha un'opzione completamente gratuita, ma ha un po' di piste. Si occupa della parte di connessione al meglio, perché il tuo telefono si connette tramite bluetooth e un PC visualizza la traccia. Utilizza video realistici con un ciclista AR
  • Rouvy: molte tracce, solo abbonamento a pagamento, per qualche motivo l'app per PC non funziona con questo, è necessario utilizzare il telefono. Potrebbero esserci problemi quando il tuo laptop utilizza la stessa scheda per Bluetooth e WiFi, spesso è in ritardo e non vuole caricare
  • Zwift - un gioco animato, solo a pagamento, funziona abbastanza bene con il trainer, ma l'interfaccia utente è piuttosto primitiva: il launcher utilizza Internet Explorer per visualizzare il menu.

Se ti è piaciuta la build (o no), per favore dimmelo nei commenti e se hai domande puoi chiedere qui o inviare un problema a github. Spiegherò volentieri tutto perché è piuttosto complicato.

Consigliato: