Taula de continguts:
- Subministraments
- Pas 1: algunes matemàtiques
- Pas 2: obteniu algunes dades
- Pas 3: maquinari 1 l'accionador lineal
- Pas 4: Maquinari 2: el pont H
- Pas 5: maquinari 3 l'electrònica de control (Arduino)
- Pas 6: "Els abandonaments posteriors"
Vídeo: Simulador de graus Open (Bicycle) - OpenGradeSIM: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Introducció
Una empresa de fitness coneguda amb seu als Estats Units (Wahoo) va presentar recentment una gran ajuda per a l’entrenament interior que eleva i baixa la part davantera de la bicicleta al turbo trainer d’acord amb el nivell simulat de pujada que fa l’usuari (el Kickr Climb).
Sembla increïble, però per desgràcia això no està disponible per a tots, ja que necessitareu 1) un entrenador Wahoo de gamma alta i 2) 500 euros en efectiu per fer-ho vostre.
Vaig trencar una clavícula (mai vaig posar un ciclista de carretera en una bicicleta de muntanya), així que tenia més quilòmetres a l’entrenador i més temps per jugar i vaig pensar que podia ser un projecte divertit.
La unitat comercial simula un -5% a un + 20%, de manera que volia apropar-me a això però amb un 10% del pressupost.
Està dissenyat al voltant del meu Tacx Neo, però qualsevol entrenador que transmeti les seves dades de potència i velocitat mitjançant ANT + o BLE podria funcionar (crec!).
Com que la base de rodes de la meva bicicleta de carretera mesura exactament 1000 mm, hauria d’elevar les forquilles en 200 mm per simular un 20% (vegeu la imatge), de manera que ho faria un actuador lineal de 200 mm. És poc probable que el pes de la bicicleta + pilot excedeixi els 100 kg i, ja que es distribueix entre els eixos i la majoria es troba a la part posterior 750N aixecarà 75 kg i hauria d’estar bé. Els actuadors més ràpids estan disponibles per més diners, però aquest em costa uns 20 lliures esterlines i gestiona 10 mm / seg. Els actuadors amb potenciòmetres que es poden utilitzar com a servos simples també són de 2 a 3 vegades més cars.
Subministraments
Impressió 3D (PLA o ABSetc) de la peça de l'adaptador de l'eix passant:
100 mm de tub d'alumini de 3/4 polzades de 10 swg (per a un marc d'eix passant)
Barres d'acer inoxidable de 80 mm de 6 mm
Impressió 3D (PLA o ABSetc) de la sabata per a la part de l’actuador lineal:
Impressió 3D de la funda per al pont H
Impressió 3D de la funda per a Arduino (versió 1 amb teclat) https://www.thingiverse.com/thing:3984911 (versió 2 com es mostra (https://www.thingiverse.com/thing:3995976)
Peça tallada amb làser d’acrílic transparent de 3 mm de 32 x 38 mm per evitar suar tota l’electrònica (això no és ideal).
Alguns blocs de sagnat (adaptats per deixar els coixinets endinsats) per evitar que empentes accidentalment els pistons de la pinça dels frens de disc Shimano amb el teu entusiasme
Actuador lineal 750N 200 mm de recorregut, per exemple, mini actuadors lineals Al03 de
Pont L298N H (com ara:
Arduino Nano IoT 33 www.rapidonline.com comanda 73-4863
Teclat de membrana de 2 tecles, per exemple, Mòdul bidireccional de 5V a 3,3V del convertidor de nivell lògic IIC I2C per a Arduino, per exemple, Font d'alimentació de 12V 3A DC: les d'il·luminació LED funcionen molt bé.
NPE CABLE Ant + a pont BLE
Clip imprimible en 3D per al pont CABLE
Mòdul de pantalla LCD OLED de 1,3 amb interfície IIC I2C 128x32 3,3V
Pas 1: algunes matemàtiques
Hem de calcular la inclinació que s’està simulant. Tenia l’esperança que l’entrenador anunciaria aquestes dades juntament amb la velocitat, la potència, la cadència, etc., però l’entrenador simplement estableix resistència per mantenir la potència de sortida segons el programari de la tauleta, l’ordinador, etc. que s’utilitza per controlar-les. No tenia cap manera de captar fàcilment el "grau simulat" del programari, de manera que hauria de treballar cap enrere …
Les forces que actuen sobre la moto i el pilot són una combinació de pèrdues resistives i la potència necessària per pujar al turó. L’entrenador informa de velocitat i potència. Si podem trobar les pèrdues resistives a una velocitat determinada, la potència restant s’utilitza per pujar al turó. La potència de pujar depèn del pes de la moto i del pilot i de la velocitat de pujada, de manera que podem tornar a la inclinació.
Primer vaig utilitzar l’increïble https://bikecalculator.com per trobar alguns punts de dades per a la pèrdua de potència resistiva a velocitats típiques. Aleshores vaig transformar el domini de la velocitat per produir una relació lineal i vaig trobar la millor línia d’ajust. Prenent l’equació de la línia ara podem calcular la potència (W) a partir de la resistència = (0,0102 * (Velocitat kmh ^ 2,8)) + 9,428.
Preneu la potència de la resistència de la potència mesurada per donar poder de "pujar".
Sabem la velocitat de pujada en km / h i la convertim en unitats SI de m / s (divideix per 3,6).
La inclinació es troba a: Inclinació (%) = ((PowerClimbing / (WeightKg * g)) / Speed) * 100
on l’acceleració de caiguda lliure g = 9,8 m / s / s o 9,8 N / kg
Pas 2: obteniu algunes dades
El càlcul de la inclinació requereix velocitat i potència. Vaig utilitzar un Arduino Nano 33 IoT per connectar-me a l'entrenador mitjançant BLE per rebre-ho. Em vaig quedar molt atrapat inicialment, ja que la versió v.1.1.2 actual de la biblioteca nativa ArduinoBLE per a aquest mòdul no gestiona l’autenticació en cap forma, cosa que significa que la majoria de (?) Sensors BLE comercials no s’aparellaran amb ella.
La solució va ser utilitzar un cable NPE ANT + a pont BLE (https://npe-inc.com/cableinfo/) que mantingui el BLE integrat de l’entrenador gratuït perquè l’aplicació de formació es pugui comunicar i no requereixi autenticació al BLE lateral.
La característica de potència BLE és bastant senzilla, ja que la potència en watts es troba en el segon i tercer bytes de les dades transmeses com a enter de 16 bits (poc endian, és a dir, l'octet menys significatiu primer). Vaig aplicar un filtre mitjà mòbil per donar una potència mitjana de 3 segons, tal com mostra la meva bicicleta, ja que és menys irregular.
if (powerCharacteristic.valueUpdated ()) {
// Definiu una matriu per al valor uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Llegiu el valor a la matriu powerCharacteristic.readValue (holdpowervalues, 6); // La potència es retorna com a watts a la ubicació 2 i 3 (loc 0 i 1 són senyals de 8 bits) byte rawpowerValue2 = holdpowervalues [2]; // potència mínima sig byte en byte HEX rawpowerValue3 = holdpowervalues [3]; // poder més sig byte a HEX long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Utilitzeu el filtre mitjà mòbil per donar "3s power" powerTrainer = movingAverageFilter_power.process (rawpowerTotal);
La característica de velocitat BLE (velocitat i cadència en bicicleta) és una d’aquestes coses que us fa preguntar-se què fumava el SIG quan van escriure l’especificació.
La característica retorna una matriu de 16 bytes que no conté ni velocitat ni cadència. En lloc d'això, obteniu revolucions de rodes i revolucions de manovella (totals) i temps des de les dades de l'últim esdeveniment en 1024 segons de segon. Així doncs, més matemàtiques. Ah, i els bytes no sempre estan presents, de manera que hi ha un byte de bandera a l'inici. Ah, i els bytes són HEX poc endians, de manera que heu de llegir cap enrere multiplicant el segon byte per 256, el tercer per 65536, etc. i després sumar-los. Per trobar la velocitat cal assumir una circumferència de roda de bicicleta estàndard per conèixer la distància …
if (speedCharacteristic.valueUpdated ()) {
// Aquest valor necessita una matriu de 16 bytes uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Però només llegiré els primers 7 speedCharacteristic.readValue (holdvalues, 7); byte RawValue0 = holdvalues [0]; // marcadors binaris 8 bits int byte RawValue1 = holdvalues [1]; // revolucions de bytes menys significatius en byte HEX RawValue2 = holdvalues [2]; // revolucions següent byte més significatiu en byte HEX rawValue3 = holdvalues [3]; // revolucions següent byte més significatiu en byte HEX RawValue4 = holdvalues [4]; // revolucions byte més significatiu en byte HEX rawValue5 = holdvalues [5]; // temps des de l'últim esdeveniment de roda com a mínim sig byte byte rawValue6 = holdvalues [6]; // temps des de l'últim esdeveniment de roda més sig byte si (firstData) {// Obteniu revolucions de roda acumulades com a petit hexagonal endian al lloc 2, 3 i 4 (primer octet menys significatiu) WheelRevs1 = (RawValue1 + (RawValue2 * 256) + (RawValue3 * 65536) + (RawValue4 * 16777216)); // Obteniu temps des de l’últim esdeveniment de roda en 1024è de segon Temps_1 = (RawValue5 + (RawValue6 * 256)); firstData = false; } else {// Obteniu el segon conjunt de dades llarg WheelRevsTemp = (RawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); temps llarg = (RawValue5 + (RawValue6 * 256)); if (WheelRevsTemp> WheelRevs1) {// assegureu-vos que la bicicleta es mou WheelRevs2 = WheelRevsTemp; Temps_2 = TempsTemp; firstData = true;}
// Cerqueu la diferència de distància en cm i convertiu-la en km float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);
flotador kmTravelled = distànciaTravelled / 1000000;
// Cerqueu el temps en 1024 segons de segon i convertiu-lo en hores
float timeDifference = (Hora_2 - Hora_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;
// Cerca velocitat kmh
velocitat KMH = (kmTravelled / timeHrs);
L’esbós d’Arduino està allotjat a GitHub (https://github.com/mockendon/opengradesim).
Pas 3: maquinari 1 l'accionador lineal
L'eix passant de la meva bicicleta de carretera de fre de disc especifica un eix de 19,2 mm per netejar l'eix passant de 12 mm amb 100 mm entre les forquilles.
El tub d'alumini de 3/4 de polzada de 10 polzades s'adapta perfectament i proporciona un bon tipus anomenat Dave a eBay (https://www.ebay.co.uk/str/aluminiumonline) i el vaig tallar al llarg per unes quantes lliures.
L'actuador té una barra de 20 mm amb un forat de 6 mm, de manera que la part impresa en 3D uneix el tub d'alumini amb una barra d'acer de 6 mm i, atès que les forces són de compressió del 90%, alguns PLA / ABS són el repte.
Si executeu una configuració de versió ràpida estàndard, una cosa així (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) evitaria haver de redissenyar aquest component.
L'arrencada està dissenyada per adaptar-se al bloc de subministrament subministrat amb el meu entrenador Tacx, però probablement encaixaria en molts elevadors similars o només podeu editar el fitxer TinkerCad per adaptar-lo al vostre requisit.
Pas 4: Maquinari 2: el pont H
Aquestes plaques de pont L298N H que són molt habituals en línia tenen un regulador integrat de 5V que és ideal per alimentar l’Arduino des de la font d’alimentació de 12V necessària per a l’actuador lineal. Malauradament, la placa Arduino Nano IoT és una senyalització de 3,3 V, per tant, és necessari un convertidor de nivell lògic (o un optoisolador, ja que els senyals només són unidireccionals).
La caixa està dissenyada per acceptar els connectors d'alimentació que s'utilitzen habitualment en aplicacions d'il·luminació LED. Vaig carregar un cable d’extensió USB perquè fos possible connectar / desconnectar la unitat principal Arduino fàcilment i, tot i que estava segur d’utilitzar les línies d’alimentació i les línies de dades per a la senyalització de 3,3 V, sincerament ho aconsellaria CONTRA això, com ho faria odi que algú fregís els seus ports USB o perifèrics connectant-lo per error.
Pas 5: maquinari 3 l'electrònica de control (Arduino)
La carcassa del convertidor de nivell lògic i OLED Arduino té un muntatge estàndard Garmin de 1/2 gir a la part posterior per permetre que es pugui muntar de manera segura a la moto. Un muntatge "frontal" permetrà inclinar la unitat cap amunt o cap avall fins a "zero" la posició de l'acceleròmetre o seria fàcil afegir una línia de codi només a zero automàtic a l'inici.
La caixa té un punt per a un teclat de membrana: s’utilitza per configurar el pes combinat del pilot i de la bicicleta. Només podeu configurar-ho per programació, sobretot si no compartiu un entrenador amb ningú.
Pot ser bo implementar un mode "manual". Potser si premeu els dos botons es podria iniciar un mode manual i després els botons podrien augmentar / disminuir la inclinació. Afegiré això a la llista de tasques.
El fitxer STL del cas, de nou, està disponible a Thingiverse (consulteu la secció de subministraments per obtenir l'enllaç).
L’esbós d’Arduino està allotjat a GitHub (https://github.com/mockendon/opengradesim).
Podeu imprimir un petit clip per al vostre pont CABLE des d’aquí
Pas 6: "Els abandonaments posteriors"
Molta gent ha plantejat la qüestió de l’abandonament del darrere quan la moto es mou. Alguns entrenadors tenen un eix que es mou (com el Kickr), però molts no.
Actualment, la meva millor solució per a mi és muntar uns coixinets de ranura 61800-2RS estàndard (aproximadament 2 lliures cadascun) als adaptadors d'alliberament ràpid i, a continuació, muntar els abandons de l'eix transversal en aquests (vegeu fotos) amb un pinxo QR de gran mida
Els coixinets necessiten una arandela fina, per exemple, M12 16 mm 0,3 mm entre l'adaptador i el coixinet.
S'ajusten perfectament i giren amb la bicicleta i el pinxo independentment de l'entrenador.
De moment, això canvia el desplaçament del costat de la unitat per un parell de mm, de manera que haureu de tornar a indexar
Estic dissenyant peces personalitzades (vegeu el pla pdf) per mecanitzar (al torn del meu futur cunyat quan tingui una hora per ajudar-vos!). Aquests encara no estan provats !!! Però rectificar 1 mm de la superfície interna de l’adaptador QR del costat de la unitat de stock és una solució ràpida sense eines especials;)
Recomanat:
Altaveu portàtil de 360 graus: 8 passos
Altaveu portàtil de 360 graus: què ofereix? Hola a tothom, espero que us divertiu al voltant dels bricolatges. Aquesta vegada torno amb un altaveu portàtil especial de 360 graus que és una mica diferent dels típics que hi ha. Utilitza 6 controladors d’altaveus individuals (un parell de woofers
SIMULADOR DE JOCS DE CURSES DE Bricolatge -- SIMULADOR F1: 5 passos
SIMULADOR DE JOCS DE CURSES DE Bricolatge || F1 SIMULATOR: Hola a tots Benvinguts al meu canal, avui us mostraré com construeixo un "Simulador de jocs de carreres". amb l'ajut d'Arduino UNO. no es tracta d'un bloc de compilació, només és una visió general i prova del simulador. Aviat es completarà el bloc de compilació
Afegiu un codificador a Feetech Micro 360 graus de gir continu Servo FS90R: 10 passos
Afegiu un codificador al Servo de rotació contínua Feetech Micro 360 graus FS90R: és molt difícil o gairebé impossible controlar amb precisió el moviment del robot de rodes mitjançant el control del motor de bucle obert. Moltes aplicacions requereixen establir amb precisió la posició o la distància de recorregut d’un robot de rodes. Micro servo mot de rotació contínua petita
Fono-cronoxil: un sintetitzador de 360 graus: 3 passos (amb imatges)
Phono-Chronoxyle: un sintetitzador de 360 graus: l’escultor Julien Signolet de París i el músic Mathias Durand es va acostar a mi per a una instal·lació sonora interactiva al Parc Floral de París per a Nuit Blanche 2019. La instal·lació seria fora de casa i no estaria present durant el a
Barret de càmera analògica de 360 graus: 10 passos (amb imatges)
Barret de càmera analògica de 360 graus: oblida Instagram, torna aquest aspecte retro a les teves imatges fent servir una pel·lícula analògica clàssica d’una manera divertida i nova. Aquest barret de càmera es va fabricar amb càmeres de pel·lícula d’un sol ús de 35 mm i diversos servomotors petits, tots alimentats per dues bateries AA. Amb t