Tabla de contenido:
- Suministros
- Paso 1: algunas matemáticas
- Paso 2: obtenga algunos datos
- Paso 3: Hardware 1 del actuador lineal
- Paso 4: Hardware 2: el puente H
- Paso 5: Hardware 3 la electrónica de control (Arduino)
- Paso 6: 'Las salidas traseras'
Video: Simulador de pendiente abierto (bicicleta) - OpenGradeSIM: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
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
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
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
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
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)
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'
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:
SIMULADOR DE JUEGO DE CARRERAS DE BRICOLAJE -- SIMULADOR F1: 5 Pasos
SIMULADOR DE JUEGO DE CARRERAS DE BRICOLAJE || SIMULADOR F1: Hola a todos Bienvenidos a Mi canal, Hoy les voy a mostrar cómo construyo un " Simulador de juegos de carreras " con la ayuda de Arduino UNO. esto no es un blog de compilación, es solo una descripción general y una prueba del simulador. Próximamente el blog de compilación completo
Q-Bot: el solucionador de cubos de Rubik de código abierto: 7 pasos (con imágenes)
Q-Bot: el solucionador de cubos de Rubik de código abierto: imagina que tienes un cubo de Rubik revuelto, conoces ese rompecabezas de los 80 que todo el mundo tiene pero nadie sabe realmente cómo resolverlo y quieres devolverlo a su patrón original. Afortunadamente en estos días es muy fácil encontrar instrucciones de resolución
Kit de aprendizaje Arduino (código abierto): 7 pasos (con imágenes)
Arduino Learner Kit (código abierto): si eres un principiante en Arduino World y vas a aprender Arduino teniendo experiencia práctica, este Instructables y este Kit son para ti. Este kit también es una buena opción para los profesores a quienes les gusta enseñar Arduino a sus estudiantes de una manera fácil
Sensor de alarma de puerta con interruptor magnético, normalmente abierto, proyecto simple, 100% en funcionamiento, código fuente proporcionado: 3 pasos
Sensor de alarma de puerta de interruptor magnético, normalmente abierto, proyecto simple, 100% en funcionamiento, código fuente dado: Descripción: Hola chicos, voy a hacer un tutorial sobre la alarma de sensor de interruptor magnético MC-18 que funciona en modo normalmente abierto. Tipo de interruptor: NO (tipo de cierre normal), el circuito está abierto normalmente y el circuito está conectado cuando el imán está cerca. La caña
Simulador de bicicleta con ajuste de velocidad en tiempo real: 5 pasos
Simulador de bicicleta con ajuste de velocidad en tiempo real: este proyecto utiliza un interruptor de lengüeta magnético para crear un velocímetro y controlar la velocidad de video de videos de ciclismo en primera persona en YouTube u otros medios. El Arduino calcula la mph y luego usa esa información para simular la presión de un botón de la computadora