Tabla de contenido:

Simulador de pendiente abierto (bicicleta) - OpenGradeSIM: 6 pasos
Simulador de pendiente abierto (bicicleta) - OpenGradeSIM: 6 pasos

Video: Simulador de pendiente abierto (bicicleta) - OpenGradeSIM: 6 pasos

Video: Simulador de pendiente abierto (bicicleta) - OpenGradeSIM: 6 pasos
Video: ZWIFT: Primeros Pasos, Actualizaciones del Juego y Recomendaciones 2024, Noviembre
Anonim
Image
Image
Simulador de pendiente abierto (bicicleta) - OpenGradeSIM
Simulador de pendiente abierto (bicicleta) - OpenGradeSIM
Simulador de pendiente abierto (bicicleta) - OpenGradeSIM
Simulador de pendiente abierto (bicicleta) - OpenGradeSIM

Introducción

Una conocida empresa de fitness con sede en EE. UU. (Wahoo) presentó recientemente una gran ayuda para el entrenamiento en interiores que sube y baja la parte delantera de la bicicleta en el entrenador turbo de acuerdo con la pendiente simulada de la colina que está montando el usuario (el Kickr Climb).

Parece increíble, pero lamentablemente esto no está disponible para todos nosotros, ya que necesitará 1) un entrenador Wahoo de alta gama y 2) £ 500 en efectivo para hacerlo suyo.

Me rompí una clavícula (nunca puse a un ciclista de carretera en una bicicleta de montaña), así que tenía más millas en el entrenador y más tiempo para jugar y pensé que este podría ser un proyecto divertido.

La unidad comercial simula -5% a + 20%, así que quería acercarme a eso, ¡pero con el 10% del presupuesto!

Esto está diseñado en torno a mi Tacx Neo, pero cualquier entrenador que transmita sus datos de potencia y velocidad a través de ANT + o BLE podría funcionar (¡creo!).

Dado que la distancia entre ejes de mi bicicleta de carretera mide exactamente 1000 mm, necesitaría levantar las horquillas 200 mm para simular el 20% (ver foto), por lo que un actuador lineal de 200 mm funcionaría. Es poco probable que el peso de la bicicleta + ciclista supere los 100 kg y, dado que se distribuye entre los ejes y la mayoría está en la parte posterior, 750N levantará 75 kg y debería estar bien. Los actuadores más rápidos están disponibles por más dinero, pero este me costó alrededor de £ 20 y administra 10 mm / seg. Los actuadores con potenciómetros que se pueden utilizar como servos simples también son de 2 a 3 veces más caros.

Suministros

Impresión 3D (PLA o ABSetc) de la pieza del adaptador del eje pasante:

100 mm de tubo de aluminio de 3/4 de pulgada 10 swg (para un marco de eje pasante)

80 mm de barra de acero inoxidable de 6 mm

Impresión 3D (PLA o ABSetc) del zapato para la parte del actuador lineal:

Impresión 3D de la carcasa para el puente H

Impresión 3D de la carcasa para Arduino (Versión 1 con teclado) https://www.thingiverse.com/thing:3984911 (Versión 2 como se muestra (https://www.thingiverse.com/thing:3995976)

Pieza cortada con láser de acrílico transparente de 3 mm 32 x 38 mm para evitar que sude toda la electrónica (lo hizo, no es ideal).

Algunos bloques de sangrado (adaptados para dejar las pastillas adentro) para evitar que empujes accidentalmente los pistones de la pinza fuera de tus frenos de disco Shimano en tu entusiasmo

Actuador lineal 750N 200 mm de recorrido, por ejemplo, actuadores lineales Mini Al03 de

Puente L298N H (como:

Arduino Nano IoT 33 www.rapidonline.com pedido 73-4863

Teclado de membrana de 2 teclas, por ejemplo, Módulo bidireccional del convertidor de nivel lógico IIC I2C de 5 V a 3,3 V para Arduino, por ejemplo, Fuente de alimentación de 12 V 3 A CC: ¡las de iluminación LED funcionan muy bien!

NPE CABLE Ant + al puente BLE

Clip imprimible en 3D para el puente CABLE

Módulo de pantalla LCD OLED de 1.3 con interfaz IIC I2C 128x32 3.3V

Paso 1: algunas matemáticas

Algunas matemáticas
Algunas matemáticas

Necesitamos calcular la pendiente que se está simulando. Tenía la esperanza de que el entrenador anunciara estos datos junto con la velocidad, la potencia, la cadencia, etc., sin embargo, el entrenador simplemente establece la resistencia para mantener la salida de potencia de acuerdo con el software en la tableta, computadora, etc. que se usa para controlarlo. No tenía forma de capturar fácilmente la 'calificación simulada' del software, por lo que tendría que trabajar al revés …

Las fuerzas que actúan sobre la bicicleta y el ciclista son una combinación de pérdidas resistivas y la potencia necesaria para subir la colina. El entrenador informa velocidad y potencia. Si podemos encontrar las pérdidas resistivas a una velocidad dada, entonces la energía restante se usa para subir la colina. La potencia para escalar depende del peso de la bicicleta y del ciclista y de la velocidad de ascenso, por lo que podemos volver a la pendiente.

Primero utilicé la increíble https://bikecalculator.com para encontrar algunos puntos de datos para la pérdida de potencia resistiva a velocidades típicas. Luego transformé el dominio de la velocidad para producir una relación lineal y encontré la mejor línea de ajuste. Tomando la ecuación de la línea, ahora podemos calcular la potencia (W) a partir de la resistencia = (0.0102 * (Speedkmh ^ 2.8)) + 9.428.

Toma el poder de la resistencia del poder medido para dar el poder de "trepar".

Conocemos la velocidad de ascenso en km / hr y la convertimos a unidades SI de m / s (dividir por 3.6).

La inclinación se obtiene a partir de: Inclinación (%) = ((PowerClimbing / (WeightKg * g)) / Speed) * 100

donde la aceleración de la caída libre g = 9,8 m / s / so 9,8 N / kg

Paso 2: obtenga algunos datos

Obtener algunos datos
Obtener algunos datos

El cálculo de la inclinación requiere velocidad y potencia. Usé un Arduino Nano 33 IoT para conectarme al entrenador a través de BLE para recibir esto. Me quedé muy atascado inicialmente ya que la versión actual v.1.1.2 de la biblioteca nativa ArduinoBLE para este módulo no maneja la autenticación de ninguna forma, lo que significa que la mayoría (?) De los sensores BLE comerciales no se emparejarán con ella.

La solución fue utilizar un cable NPE ANT + a un puente BLE (https://npe-inc.com/cableinfo/) que mantiene el BLE integrado del entrenador libre para que la aplicación de entrenamiento se comunique y no requiere autenticación en el BLE. lado.

La característica de potencia BLE es bastante sencilla ya que la potencia en vatios está contenida en el segundo y tercer bytes de los datos transmitidos como un entero de 16 bits (little endian, es decir, el octeto menos significativo primero). Apliqué un filtro de promedio móvil para dar una potencia promedio de 3 segundos, como muestra mi computadora de bicicleta, ya que esto es menos errático.

if (powerCharacteristic.valueUpdated ()) {

// Defina una matriz para el valor uint8_t holdpowervalues [6] = {0, 0, 0, 0, 0, 0}; // Leer valor en la matriz powerCharacteristic.readValue (holdpowervalues, 6); // La potencia se devuelve como vatios en la ubicación 2 y 3 (loc 0 y 1 son indicadores de 8 bits) byte rawpowerValue2 = holdpowervalues [2]; // poder mínimo sig byte en el byte HEX rawpowerValue3 = holdpowervalues [3]; // poder más sig byte en HEX long rawpowerTotal = (rawpowerValue2 + (rawpowerValue3 * 256)); // Usa el filtro de media móvil para dar 'potencia de 3 segundos' powerTrainer = movingAverageFilter_power.process (rawpowerTotal);

La característica de velocidad BLE (velocidad y cadencia de ciclismo) es una de esas cosas que te hace preguntarte qué diablos estaba fumando el SIG cuando escribieron la especificación.

La característica devuelve una matriz de 16 bytes que no contiene ni velocidad ni cadencia. En su lugar, obtienes las revoluciones de la rueda y las revoluciones de la manivela (totales) y el tiempo desde el último evento en 1024ths de segundo. Entonces, más matemáticas. Ah, y los bytes no siempre están presentes, por lo que hay un byte de bandera al principio. Ah, y los bytes son little endian HEX, por lo que debe leer al revés multiplicando el segundo byte por 256, el tercero por 65536, etc. y luego sumándolos. Para encontrar la velocidad, debe asumir una circunferencia de rueda de bicicleta estándar para conocer la distancia….

if (speedCharacteristic.valueUpdated ()) {

// Este valor necesita una matriz de 16 bytes uint8_t holdvalues [16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Pero solo voy a leer los primeros 7 speedCharacteristic.readValue (holdvalues, 7); byte rawValue0 = holdvalues [0]; // banderas binarias 8 bits int byte rawValue1 = holdvalues [1]; // revoluciones byte menos significativo en el byte HEX rawValue2 = holdvalues [2]; // revoluciones del siguiente byte más significativo en el byte HEX rawValue3 = holdvalues [3]; // revoluciones del siguiente byte más significativo en el byte HEX rawValue4 = holdvalues [4]; // revoluciones del byte más significativo en el byte HEX rawValue5 = holdvalues [5]; // tiempo desde el último evento de rueda byte mínimo sig byte rawValue6 = holdvalues [6]; // tiempo desde el último evento de la rueda Most sig byte if (firstData) {// Obtiene las revoluciones acumuladas de la rueda como un pequeño hex endian en loc 2, 3 y 4 (octeto menos significativo primero) WheelRevs1 = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); // Obtiene el tiempo desde el último evento de la rueda en 1024ths de un segundo Time_1 = (rawValue5 + (rawValue6 * 256)); firstData = falso; } else {// Obtiene el segundo conjunto de datos de largo WheelRevsTemp = (rawValue1 + (rawValue2 * 256) + (rawValue3 * 65536) + (rawValue4 * 16777216)); Long TimeTemp = (rawValue5 + (rawValue6 * 256)); if (WheelRevsTemp> WheelRevs1) {// asegúrese de que la bicicleta se está moviendo WheelRevs2 = WheelRevsTemp; Time_2 = TimeTemp; firstData = true;}

// Encuentra la diferencia de distancia en cm y conviértela en km. Float distanceTravelled = ((WheelRevs2 - WheelRevs1) * wheelCircCM);

float kmTravelled = distancia recorrida / 1000000;

// Encuentra el tiempo en 1024ths de segundo y conviértelo en horas

float timeDifference = (Time_2 - Time_1); float timeSecs = timeDifference / 1024; float timeHrs = timeSecs / 3600;

// Encuentra la velocidad kmh

speedKMH = (km Travelled / timeHrs);

El boceto de Arduino está alojado en GitHub (https://github.com/mockendon/opengradesim).

Paso 3: Hardware 1 del actuador lineal

Hardware 1 el actuador lineal
Hardware 1 el actuador lineal
Hardware 1 el actuador lineal
Hardware 1 el actuador lineal
Hardware 1 el actuador lineal
Hardware 1 el actuador lineal

El eje pasante de mi bicicleta de carretera con freno de disco especifica un eje de 19,2 mm para despejar el eje pasante de 12 mm con 100 mm entre las horquillas.

El tubo de aluminio 10swg de 3/4 de pulgada encaja perfectamente y un buen tipo llamado Dave en ebay (https://www.ebay.co.uk/str/aluminiumonline) lo suministró y lo cortó a la medida para mí por unas pocas libras.

El actuador tiene una barra de 20 mm con un orificio de 6 mm, por lo que la parte impresa en 3D une el tubo de aluminio a una barra de acero de 6 mm y, dado que las fuerzas son de compresión del 90%, algunos PLA / ABS están a la altura del desafío.

Si ejecuta una configuración de liberación rápida estándar, algo como esto (https://www.amazon.co.uk/Sharplace-Quick-Release-Conversion-Adapter/dp/B079DCY344) evitaría tener que rediseñar este componente.

La bota está diseñada para encajar en el bloque elevador suministrado con mi entrenador Tacx, pero probablemente encajaría en muchos elevadores similares o simplemente puede editar el archivo TinkerCad para que se adapte a sus necesidades.

Paso 4: Hardware 2: el puente H

Hardware 2: el puente H
Hardware 2: el puente H
Hardware 2 - el puente H
Hardware 2 - el puente H
Hardware 2: el puente H
Hardware 2: el puente H

Estas placas puente L298N H que son muy comunes en línea tienen un regulador integrado de 5 V que es ideal para alimentar el Arduino desde la fuente de alimentación de 12 V requerida para el actuador lineal. Desafortunadamente, la placa Arduino Nano IoT es de señalización de 3.3V, de ahí la necesidad de un convertidor de nivel lógico (o un optoaislador ya que las señales son solo unidireccionales).

La carcasa está diseñada para aceptar los conectores de alimentación comúnmente utilizados en aplicaciones de iluminación LED. Maté un cable de extensión USB para que sea posible conectar / desconectar la unidad principal Arduino fácilmente y, aunque estaba seguro de usar las líneas eléctricas para la alimentación y las líneas de datos para la señalización de 3.3V, honestamente recomendaría CONTRA esto, ya que lo haría Odio que alguien fríe sus puertos USB o periféricos enchufándolos por error.

Paso 5: Hardware 3 la electrónica de control (Arduino)

Hardware 3 la electrónica de control (Arduino)
Hardware 3 la electrónica de control (Arduino)
Hardware 3 la electrónica de control (Arduino)
Hardware 3 la electrónica de control (Arduino)
Hardware 3 la electrónica de control (Arduino)
Hardware 3 la electrónica de control (Arduino)

El estuche para el convertidor de nivel lógico y OLED Arduino tiene un soporte estándar estilo Garmin de 1/2 vuelta en la parte posterior para permitir que se monte de forma segura en la bicicleta. Un montaje 'frontal' permitirá que la unidad se incline hacia arriba o hacia abajo a 'cero', la posición del acelerómetro o una línea de código solo para el cero automático al inicio sería fácil de agregar.

El estuche tiene un lugar para un teclado de membrana; esto se usa para establecer el peso combinado del ciclista y la bicicleta. Puede configurar esto mediante programación, especialmente si no comparte un entrenador con nadie.

Sería bueno implementar un modo 'manual'. Quizás presionar ambos botones podría iniciar un modo manual y luego los botones podrían aumentar / disminuir la inclinación. ¡Agregaré esto a la lista de tareas pendientes!

El archivo STL del caso está, nuevamente, disponible en Thingiverse (consulte la sección de suministros para el enlace).

El boceto de Arduino está alojado en GitHub (https://github.com/mockendon/opengradesim).

Puede imprimir un pequeño clip para su puente CABLE desde aquí

Paso 6: 'Las salidas traseras'

'Los abandonos traseros'
'Los abandonos traseros'
'Los abandonos traseros'
'Los abandonos traseros'
'Los abandonos traseros'
'Los abandonos traseros'

Mucha gente ha planteado el problema del roce de la puntera trasera cuando la bicicleta se mueve. Algunos entrenadores tienen un eje que se mueve (como el Kickr) pero muchos no.

Actualmente, mi mejor solución para mí es montar algunos rodamientos rígidos estándar 61800-2RS (alrededor de £ 2 cada uno) en los adaptadores de liberación rápida y luego montar las punteras del eje pasante en estos (ver fotos) con un pincho QR de gran tamaño

Los rodamientos necesitan una arandela de ajuste delgada, por ejemplo, M12 16 mm 0,3 mm entre el adaptador y el rodamiento.

Encajan perfectamente y giran con la bicicleta y el pincho independientemente del entrenador.

Por el momento, esto cambia el desplazamiento en el lado de la unidad en un par de mm, por lo que deberá volver a indexar

Estoy diseñando piezas personalizadas (ver plano en pdf) para mecanizar (¡en el torno de mi futuro cuñado cuando tenga una hora para ayudar!). ¡¡¡Aún no se han probado !!! Pero esmerilar 1 mm de la superficie interna del adaptador QR del lado de la unidad original es una solución rápida sin herramientas especiales;)

Recomendado: