Tabla de contenido:

Entrenador inteligente para bicicletas de interior DIY: 5 pasos
Entrenador inteligente para bicicletas de interior DIY: 5 pasos

Video: Entrenador inteligente para bicicletas de interior DIY: 5 pasos

Video: Entrenador inteligente para bicicletas de interior DIY: 5 pasos
Video: ZWIFT: Primeros Pasos, Actualizaciones del Juego y Recomendaciones 2024, Noviembre
Anonim
Entrenador inteligente de bicicleta interior de bricolaje
Entrenador inteligente de bicicleta interior de bricolaje
Entrenador inteligente de bicicleta interior de bricolaje
Entrenador inteligente de bicicleta interior de bricolaje
Entrenador inteligente de bicicleta interior de bricolaje
Entrenador inteligente de bicicleta interior de bricolaje

Introducción

Este proyecto comenzó como una simple modificación de una bicicleta de interior Schwinn IC Elite que utiliza un simple tornillo y almohadillas de fieltro para los ajustes de resistencia. El problema que quería resolver era que el paso del tornillo era demasiado grande, por lo que el rango desde no poder pedalear hasta que la rueda girara completamente libre era de solo un par de grados en la perilla de resistencia. Al principio cambié el tornillo a M6, pero luego tendría que hacer una perilla, así que ¿por qué no usar un motor paso a paso NEMA 17 sobrante para cambiar la resistencia? Si ya hay algunos dispositivos electrónicos, ¿por qué no agregar un medidor de potencia de manivela y una conexión bluetooth a una computadora para hacer un entrenador inteligente?

Esto resultó más difícil de lo esperado, porque no había ejemplos sobre cómo emular un medidor de potencia con un arduino y bluetooth. Terminé gastando alrededor de 20 horas en programar e interpretar las especificaciones BLE GATT. Espero que, al proporcionar un ejemplo, pueda ayudar a alguien a no perder tanto tiempo tratando de comprender qué significa exactamente "Campo de tipo de anuncio de datos de servicio" …

Software

Todo el proyecto está en GitHub:

github.com/kswiorek/ble-ftms

Recomiendo encarecidamente usar Visual Studio con un complemento de VisualGDB si planeas hacer algo más serio que simplemente copiar y pegar mi código.

Si tiene preguntas sobre el programa, por favor pregunte, sé que mis comentarios minimalistas pueden no ayudar mucho.

Créditos

Gracias a stoppi71 por su guía sobre cómo hacer un medidor de potencia. Hice la manivela de acuerdo con su diseño.

Suministros:

Los materiales para este proyecto dependen en gran medida de la bicicleta que esté modificando, pero hay algunas piezas universales.

Manivela:

  1. Módulo ESP32
  2. HX711 Sensor de peso ADC
  3. Medidores de deformación
  4. MPU - giroscopio
  5. Una pequeña batería de Li-Po (alrededor de 750 mAh)
  6. Manga termorretráctil
  7. Controlador paso a paso A4988
  8. Regulador de 5V
  9. Un conector de barril arduino
  10. Fuente de alimentación arduino 12V

Consola:

  1. Paso a paso NEMA 17 (debe ser bastante potente,> 0,4 Nm)
  2. Varilla M6
  3. 12864 pantalla lcd
  4. WeMos LOLIN32
  5. Interruptores táctiles

Equipo

Para hacer esto, probablemente podría salirse con la suya usando solo una impresora 3D, sin embargo, puede ahorrar mucho tiempo cortando la carcasa con láser, y también puede hacer PCB. Los archivos DXF y gerber están en GitHub, por lo que puede solicitarlos localmente. El acoplador de la varilla roscada al motor se encendió en un torno y este podría ser el único problema, ya que la pieza debe ser bastante fuerte para tirar de las pastillas, pero no hay mucho espacio en esta bicicleta en particular.

Desde que hice la primera bicicleta, adquirí una fresadora que me permite hacer ranuras para los sensores en la manivela. Hace que pegarlos sea un poco más fácil y también los protege si algo golpea la manivela. (Me han caído estos sensores unas cuantas veces, así que quería estar a salvo).

Paso 1: la manivela:

La manivela
La manivela
La manivela
La manivela
La manivela
La manivela

Es mejor seguir este tutorial:

Básicamente, debes pegar los sensores a la manivela en cuatro lugares y conectarlos a los lados de la placa.

Las conexiones adecuadas ya están allí, por lo que solo tiene que soldar los pares de cables directamente a estas ocho almohadillas en la placa.

Para conectarse a los sensores, use el cable más delgado posible; las almohadillas son muy fáciles de levantar. Primero debe pegar los sensores y dejar solo los suficientes afuera para soldar, luego cubra el resto con epoxi. Si intenta soldar antes de pegar, se rizan y se rompen.

Para ensamblar la PCB:

  1. Inserte alfileres de oro desde la parte inferior (el lado con trazos) en todos los orificios excepto en los verticales cerca de la parte inferior.
  2. Coloque las tres tablas (ESP32 en la parte superior, luego MPU, el HX711 en la parte inferior) de modo que los pasadores dorados se adhieran a ambos orificios.
  3. Suelde los encabezados a las tablas en la parte superior.
  4. Corta los alfileres de oro de la parte inferior. (Intente cortarlos primero antes de ensamblarlos, para que sepa que sus "alfileres de oro" no son de acero por dentro; hace que sean casi imposibles de cortar y necesita limarlos o molerlos)
  5. suelde los pasadores de oro restantes a la parte inferior del tablero.
  6. Sube el firmware de la manivela

El último paso es empacar toda la manivela con una manga termorretráctil.

Este método de hacer el tablero no es ideal, ya que los tableros ocupan mucho espacio en el que podrías colocar otras cosas. Lo mejor sería soldar todos los componentes a la placa directamente, pero no tengo la habilidad para soldar estos pequeños SMD yo mismo. Necesitaría ordenarlo ensamblado, y probablemente cometería algunos errores y terminaría ordenando tres veces y esperando un año antes de que lleguen.

Si alguien pudiera diseñar la placa, sería genial si tuviera algún circuito de protección de la batería y un sensor que encienda el ESP si la manivela comenzara a moverse.

¡IMPORTANTE

El sensor HX711 está configurado de forma predeterminada en 10 Hz; es mucho más lento para la medición de potencia. Necesita levantar el pin 15 de la placa y conectarlo al pin 16. Esto hace que el pin sea ALTO y habilita el modo 80Hz. Este 80Hz, por cierto, establece la velocidad de todo el bucle arduino.

Uso

El ESP32 está programado para irse a dormir después de 30 segundos sin ningún dispositivo bluetooth conectado. Para volver a encenderlo, debe presionar el botón de reinicio. Los sensores también se alimentan desde un pin digital, que se vuelve BAJO en el modo de suspensión. Si desea probar los sensores con el código de ejemplo de las bibliotecas, debe conducir el pin ALTO y esperar un poco antes de que se enciendan los sensores.

Después del montaje, los sensores deben calibrarse leyendo el valor sin fuerza y luego aplicando un peso (utilicé una pesa rusa de 12 kg o 16 kg colgada del pedal). Estos valores deben introducirse en el código powerCrank.

Es mejor tarar la manivela antes de cada viaje; no debería poder tararse solo cuando alguien está pedaleando, pero es mejor prevenir que curar y es posible tararlo solo una vez por encendido. Si nota algunos niveles de potencia extraños, debe repetir este proceso:

  1. Ponga la manivela hacia abajo hasta que la luz comience a parpadear.
  2. Después de un par de segundos, la luz permanecerá encendida; no la toques entonces.
  3. Cuando la luz se apaga, establece la fuerza actual detectada como un nuevo 0.

Si solo desea usar la manivela, sin la consola, el código está aquí en github. Todo lo demás funciona igual.

Paso 2: la consola

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

La caja está cortada en acrílico de 3 mm, los botones están impresos en 3D y hay espaciadores para la pantalla LCD, cortados en acrílico de 5 mm. Está pegado con pegamento caliente (se adhiere bastante bien al acrílico) y hay un "soporte" impreso en 3D para sujetar la PCB a la pantalla LCD. Los pines de la pantalla LCD están soldados desde la parte inferior para que no interfiera con el ESP.

El ESP está soldado al revés, por lo que el puerto USB encaja en el estuche

El PCB de botón separado está pegado con pegamento caliente, por lo que los botones se capturan en sus orificios, pero aún presionan los interruptores. Los botones están conectados a la placa con conectores JST PH 2.0 y el orden de los pines es fácil de deducir del esquema.

Es muy importante montar el controlador paso a paso en la orientación correcta (el potenciómetro cerca del ESP)

Toda la parte de la tarjeta SD está deshabilitada, ya que nadie la usó en la primera versión. El código debe actualizarse con algunas configuraciones de la interfaz de usuario, como el peso del ciclista y la configuración de dificultad.

La consola se monta mediante "brazos" y cierres cortados con láser. Los pequeños dientes se clavan en el manillar y sostienen la consola.

Paso 3: el motor

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

El motor se mantiene en el lugar de la perilla de ajuste con un soporte impreso en 3D. En su eje está montado un acoplador: un lado tiene un orificio de 5 mm con tornillos de fijación para sujetar el eje, el otro tiene una rosca M6 con tornillos de fijación para bloquearlo. Si lo desea, probablemente pueda hacerlo en una prensa de taladro con una culata redonda de 10 mm. No es necesario que sea extremadamente preciso, ya que el motor no está muy bien montado.

Una pieza de varilla roscada M6 se atornilla en el acoplador y tira de una tuerca M6 de latón. Lo mecanicé, pero se puede hacer fácilmente con una pieza de latón con una lima. Incluso puede soldar algunas brocas a una tuerca normal, para que no gire. Una tuerca impresa en 3D también puede ser una solución.

La rosca debe ser más fina que el tornillo original. Su paso es de aproximadamente 1,3 mm y para M6 es de 0,8 mm. El motor no tiene suficiente par para girar el tornillo original.

La tuerca debe estar bien lubricada, ya que el motor apenas puede girar el tornillo en los ajustes más altos.

Paso 4: configuración

Configuración
Configuración
Configuración
Configuración

Para cargar código a ESP32 desde Arduino IDE, debe seguir este tutorial:

La placa es "WeMos LOLIN32", pero el "Módulo de desarrollo" también funciona

Sugiero usar Visual Studio, pero a menudo se puede romper.

Antes del primer uso

La manivela debe configurarse de acuerdo con el paso "Manivela"

Con la aplicación "nRF Connect", debe verificar la dirección MAC de la manivela ESP32 y configurarla en el archivo BLE.h.

En la línea 19 de indoorBike.ino, debe configurar cuántas rotaciones del tornillo se necesitan para configurar la resistencia de completamente floja a máxima. (El "máximo" es subjetivo a propósito, usted ajusta la dificultad con esta configuración).

El entrenador inteligente tiene "engranajes virtuales" para configurarlos correctamente, necesita calibrarlo en las líneas 28 y 29. Necesita pedalear con una cadencia constante en una configuración de resistencia determinada, luego leer la potencia y configurarla en el archivo. Repita esto nuevamente con otro ajuste.

El botón más a la izquierda cambia del modo ERG (resistencia absoluta) al modo de simulación (engranajes virtuales). El modo de simulación sin una conexión a la computadora no hace nada, ya que no hay datos de simulación.

Línea 36. establece los engranajes virtuales: el número y las proporciones. Los calcula dividiendo el número de dientes en el engranaje delantero por el número de dientes en el engranaje trasero.

En la línea 12. pones el peso del ciclista y la bicicleta (¡En [newtons], masa multiplicada por la aceleración gravitacional!)

Toda la parte física de esto es probablemente demasiado complicada e incluso yo no recuerdo qué hace exactamente, pero calculo el par requerido para tirar del ciclista cuesta arriba o algo así (por eso la calibración).

Estos parámetros son muy subjetivos, es necesario configurarlos después de algunos viajes para que funcionen correctamente.

El puerto COM de depuración envía datos binarios directos recibidos por bluetooth entre comillas ('') y datos de simulación.

El configurador

Debido a que la configuración de la física supuestamente realista resultó ser una gran molestia para que pareciera realista, creé un configurador GUI que debería permitir a los usuarios definir gráficamente la función que convierte del grado de la colina al nivel de resistencia absoluta. Todavía no está completamente terminado y no tuve la oportunidad de probarlo, pero en el próximo mes estaré convirtiendo otra bicicleta, así que luego la puliré.

En la pestaña "Engranajes" puede establecer la proporción de cada engranaje moviendo los controles deslizantes. Luego, debe copiar el fragmento de código para reemplazar los engranajes definidos en el código.

En la pestaña "Calificación" se le da un gráfico de una función lineal (sí, resulta que la materia más odiada en matemáticas es realmente útil) que toma la calificación (eje vertical) y genera pasos de resistencia absoluta (eje horizontal). Entraré en matemáticas un poco más tarde para aquellos interesados.

El usuario puede definir esta función utilizando los dos puntos que se le atribuyen. A la derecha hay un lugar para cambiar la marcha actual. La marcha seleccionada, como puede imaginar, cambia la forma en que la pendiente se asigna a la resistencia: en las marchas más bajas es más fácil pedalear cuesta arriba. Mover el control deslizante cambia el segundo coeficiente, que influye en cómo la marcha seleccionada cambia la función. Es más fácil jugar con él un rato para ver cómo se comporta. Es posible que también deba probar algunas configuraciones diferentes para encontrar la que funcione mejor para usted.

Fue escrito en Python 3 y debería funcionar con las bibliotecas predeterminadas. Para usarlo, debe descomentar las líneas inmediatamente después de "descomentar estas líneas para usar el configurador". Como dije, no se probó, por lo que puede haber algunos errores, pero si surge algo, escriba un comentario o abra un problema para que pueda corregirlo.

Las matemáticas (y la física)

La única forma en que el controlador puede hacer que parezca que vas cuesta arriba es girando el tornillo de resistencia. Necesitamos convertir la pendiente al número de rotaciones. Para que sea más fácil de configurar, todo el rango desde completamente flojo hasta no poder girar la manivela se divide en 40 pasos, los mismos que se usan en el modo ERG, pero esta vez usa números reales en lugar de enteros. Esto se hace con una función de mapa simple: puede buscarlo en el código. Ahora estamos un paso más arriba: en lugar de tratar con revoluciones del tornillo, estamos tratando con pasos imaginarios.

Ahora bien, ¿cómo funciona realmente cuando vas cuesta arriba en bicicleta (asumiendo una velocidad constante)? Obviamente, es necesario que haya alguna fuerza que lo empuje hacia arriba o, de lo contrario, rodaría hacia abajo. Esta fuerza, como nos dice la primera ley del movimiento, debe ser igual en magnitud pero opuesta en dirección a la fuerza que lo empuja hacia abajo, para que esté en movimiento uniforme. Proviene de la fricción entre la rueda y el suelo y si dibuja el diagrama de estas fuerzas, debe ser igual al peso de la bicicleta y al ciclista multiplicado por la pendiente:

F = Fg * G

Ahora bien, ¿qué hace que la rueda aplique esta fuerza? Como se trata de engranajes y ruedas, es más fácil pensar en términos de par, que es simplemente la fuerza multiplicada por el radio:

t = F * R

Como hay engranajes involucrados, imparte un par en la manivela, que tira de la cadena y hace girar la rueda. El par necesario para girar la rueda se multiplica por la relación de transmisión:

tp = tw * gr

y de regreso de la fórmula de torque obtenemos la fuerza requerida para girar el pedal

Fp = tp / r

Esto es algo que podemos medir usando el medidor de potencia en la manivela. Como la fricción dinámica está relacionada linealmente con la fuerza y como esta bicicleta en particular usa resortes para impartir esta fuerza, es lineal al movimiento del tornillo.

La potencia es la fuerza multiplicada por la velocidad (asumiendo la misma dirección de los vectores)

P = F * V

y la velocidad lineal del pedal está relacionada con la velocidad angular:

V = ω * r

y así podemos calcular la fuerza requerida para girar los pedales en un nivel de resistencia establecido. Como todo está relacionado linealmente, podemos usar proporciones para hacerlo.

Esto era esencialmente lo que el software necesitaba calcular durante la calibración y usar una forma indirecta para obtener un compuesto complicado, pero una función lineal que relaciona el grado con la resistencia. Escribí todo en papel, calculé la ecuación final y todas las constantes se convirtieron en tres coeficientes.

Esta es técnicamente una función 3D que representa un plano (creo) que toma el grado y la relación de engranajes como argumentos, y estos tres coeficientes están relacionados con los necesarios para definir un plano, pero como los engranajes son números discretos, fue más fácil para convertirlo en un parámetro en lugar de tratar con proyecciones y tal. Los coeficientes primero y tercero se pueden definir mediante una sola línea y (-1) * el segundo coeficiente es la coordenada X del punto, donde la línea "gira" alrededor al cambiar de marcha.

En esta visualización, los argumentos están representados por la línea vertical y los valores por la horizontal, y sé que esto puede ser molesto, pero fue más intuitivo para mí y se ajusta mejor a la GUI. Esa es probablemente la razón por la que los economistas dibujan sus gráficos de esta manera.

Paso 5: ¡Termina

Ahora necesitas algunas aplicaciones para montar en tu nuevo entrenador (que te ahorró alrededor de $ 900:)). Aquí están mis opiniones sobre algunos de ellos.

  • RGT Cycling, en mi opinión el mejor, tiene una opción completamente gratuita, pero tiene algunas pistas. La parte de conexión es la que mejor se ocupa, porque su teléfono se conecta a través de bluetooth y una PC muestra la pista. Utiliza video realista con un ciclista AR
  • Rouvy: muchas pistas, solo suscripción paga, por alguna razón, la aplicación para PC no funciona con esto, debe usar su teléfono. Puede haber problemas cuando su computadora portátil usa la misma tarjeta para bluetooth y WiFi, a menudo se retrasa y no quiere cargar
  • Zwift: un juego animado, solo de pago, funciona bastante bien con el entrenador, pero la interfaz de usuario es bastante primitiva: el lanzador usa Internet Explorer para mostrar el menú.

Si disfrutó de la compilación (o no), dígame en los comentarios y si tiene alguna pregunta, puede hacerla aquí o enviar un problema a github. Con mucho gusto te lo explicaré todo ya que es bastante complicado.

Recomendado: