Este proyecto comenzó cuando decidí actualizar mi volante para que se adaptara a mis requisitos personales de conducción de SIM, algo que representaba la experiencia de conducción con el realismo y sin adornos .
Pero, habiendo dicho eso, debería funcionar con cualquier base y consola compatible de Thrustmaster , ya que está emulando el volante F1.
Establecí mis objetivos en alto e hice una lista de cosas que quería que apareciera el volante.
La rueda Steerig debe presentar todos los botones disponibles en el controlador PlayStation Dualshock 4
Quería incluir una pantalla para la configuración relacionada con el volante (y posiblemente actualizaciones futuras)
Codificadores giratorios para el acceso rápido a las funciones de conducción necesarias (balance de frenos, ABS y control de tracción)
También quería incluir un botón de acción combinado (CAB) personalizado que me permitiera aumentar o disminuir, con un solo clic, cualquiera de las funciones anteriores una cantidad X de veces.
Como no tengo acceso inmediato a una impresora 3D o una máquina CNC, decidí ir con uno de los diseños 3drap.its. Con la ayuda de Antonio, diseñamos una nueva versión de la rueda actual que tienen en stock, y una que coincide con mi diseño a continuación.
Mire una demostración de video rápida de la rueda en acción.
Las pegatinas se imprimieron usando un chorro de tinta estándar en una hoja de pegatinas A4, y luego se cubrieron con cinta de embalaje transparente.
Descargue la hoja de calcomanías aquí (PDF).
Lo más importante para recordar con el hardware es que la base de Thrustmaster alimenta su volante con ~ 3,5V. Todo lo que usa debería poder ejecutar en ese voltaje.
Desde el principio, la idea era construir esto alrededor de una tabla Arduino Nano . He tenido experiencia previa con esta plataforma y el hecho de que encontré algunos puntos de partida en Internet facilitaron esta decisión.
El siguiente fue la pantalla. Solo quería que la pantalla sea un medio para que yo vea y edite la configuración en la rueda de Itlef, no para conectar o ver la telemetría. Entonces, una LCD retroiluminada simple de 16x2 sería suficiente. Para mantener el GPIO limitado, también agregué una mochila I 2 C.
Los codificadores rotativos fueron un poco de problema ya que el Arduono Nano no es compatible con muchos GPIO. Al final del día, fui con tres tableros Duppanet I 2 C Rotary Coder Mini V2.1. Funcionan muy bien, nunca se pierden un éxito y requieren solo 3 GPIO en total.
Finalmente, para los interruptores rotativos utilicé dos interruptores rotativos de 8 vías de 8 vías, cada uno que conduce un solo GPIO analógico, reduciendo aún más el GPIO requerido. La idea es bastante simple, y puedes obtener más información aquí.
Necesitaba 22 botones para realizar todos los funciones que planeé. Los obtuve de múltiples proveedores en línea sin uno particular que mencionar. La mayoría de los botones son simples interruptores temporales (encendido) con la excepción de (encendido) -Off- (encendido) alternar. Para los paletas de pala 3drap.it suministra microscopsos de servicio pesado que se ajustan cómodamente al recinto.
? Aquí está la lista completa del hardware que usé.
Aquí es donde recibí mucha ayuda de la comunidad (por favor vea los créditos a continuación). Hice mi investigación y descubrí que muchas personas estaban haciendo cosas similares, pero de ninguna manera que quería que funcionara mi volante. Entonces, contacté a algunos de ellos, obtuve algunas ideas y comencé a construir mi propia versión.
Mi punto de partida fue esta publicación de Taras, donde obtuve las guías básicas de conexión de hardware y software al T300. Esta fue también la primera publicación que leí que me llevó en este viaje. Taras ha sido de gran ayuda, ya que ha estado respondiendo a todas mis preguntas técnicas.
Después de eso, encontré los bits y bytes de ruedas de empuje F1 de ingeniería inversa en un proyecto de Bram Harmsen, que incluye los botones L3 y R3, que a su vez generalmente no están disponibles en ningún otro volante. Teniendo toda la información requerida para replicar todas las acciones, comencé a armarlo todo.
No entraré en demasiados detalles sobre ese código aquí, pero puede verlo en el repositorio. He agregado tantos comentarios como sea posible.
? Ver los archivos de Sketch de Arduino
La rueda se comporta mucho como cualquier otra rueda en el mercado. Emula todos los botones del controlador PlayStation Dualshock 4. Las principales diferencias son la matriz de botones , el menú de visualización , los codificadores rotativos y los interruptores giratorios (funciones de cabina).
En nombre de guardar GPIO en el nano, creé una matriz de botón 5x5 para admitir los 22 botones que necesitaba para mi diseño (¡sí, tengo 3 de sobra!).
? ️ Aquí está la matriz de botones .
Hubo algunas razones por las que quería una pantalla. Primero, necesitaba una forma de cambiar la configuración de la rueda sin la necesidad de conectarla a una computadora. En segundo lugar, también pensé que era bueno tener un reloj para mostrar la hora y fecha del mundo real. En tercer lugar, la pantalla podría usarse en futuras actualizaciones para mostrar la telemetría ... (pero aún no se planea nada). Y finalmente, se ve genial.
La pantalla está controlada por los tres botones de visualización:
Menú: Abra/cierre el menú de la rueda
Siguiente: Desplácese por el menú
Seleccionar: seleccione una opción
Opciones de menú de visualización:
Modo de la rueda: establezca el modo de la rueda dependiendo de la plataforma en la que esté jugando:
PS - Modo PlayStation (PS)
PC - Modo avanzado (PC)
Disp. Modo: configure el modo de la pantalla cuando la pantalla de visualización está activada. Cada vez que presiona un botón muestra su función ':
PD : presionar cualquier botón muestra la función de botón PlayStation (Cruz, Triángulo, L2, R2, ... etc.)
GT : presionando cualquier botón muestra la asignación del botón del simulador de acuerdo con mis preferencias personales (limitador pétido, HUD, limpiaparabrisas, ... etc.)
KeyPress: Muestre el botón KeyPress en la pantalla
Fecha/hora: Mostrar u ocultar la fecha y la hora en la pantalla de inicio
Buzzer : active o apague el timbre
Hour Chirp : sí, también podría emitir cada hora para realizar un seguimiento del tiempo que pasa en el Simuador
Pantalla apagada : apague la pantalla (cualquier botón de visualización lo vuelve a encender una vez más)
Tiempo de ejecución : muestre el tiempo desde que el volante arrancó, para que sepa cuánto tiempo ha estado funcionando
Los codificadores giratorios permiten acceso rápido al balance de frenos , ABS y ajustes de control de tracción mientras conducen. Los codificadores rotativos son geniales porque puede ajustar rápidamente la configuración sin necesidad de distraerse con los menús en la pantalla, etc.
Los codificadores rotativos se han mapeado de la siguiente manera:
Descripción | Podredumbre izquierda. (-) | Rot. (+) |
---|---|---|
Balance de frenos (BB) | D-Pad Down | D-Pad |
Sistema de frenado antíloque (ABS) | L3 | R3 |
Control de tracción (TC) | D-Pad a la izquierda | D-Pad derecho |
Descripción | Podredumbre izquierda. (-) | Rot. (+) |
---|---|---|
Balance de frenos (BB) | Abajo | Arriba |
Sistema de frenado antíloque (ABS) | 20 | 21 |
Control de tracción (TC) | Izquierda | Bien |
? Aquí está el mapa de los enlaces de control que he aplicado en Assetto Corsa Competizione para ambas plataformas.
Esto es algo en lo que pensé mientras veía un video donde Nico Rosberg explicaba cómo necesita cambiar el equilibrio de los frenos de la parte delantera hacia atrás y trasero varias veces en una sola vuelta para optimizar su conducción. Por supuesto, puede usar los codificadores rotativos, pero no puede ser preciso, especialmente con la retroalimentación de fuerza que patea en su rueda.
La idea es crear un botón establecido que pueda replicar los clics de Mutliple dependiendo de sus preferencias. Usando los interruptores rotativos, puede establecer rápidamente los parámetros:
Modo CAB: selecciona la función que desea replicar (BB, ABS, TC)
Pasos de cabina: seleccione la cantidad de veces que desea presionar el botón (1x-8x)
Cab -/+: al seleccionar el botón Cab -/+, se ejecutará en sus preferencias seleccionadas
Quería mantener las cosas lo más compacta posible, por lo que se requería un tablero personalizado. También quería que las cosas fueran removibles e intercambiables en caso de que haya un fracaso en el futuro. Mi intención era crear una PCB impresa personalizada, pero realmente no tenía sentido en este momento (¿tal vez en una actualización?). La placa final está compuesta por un perfor de 5x7 cm y utilicé un cable de núcleo sólido para hacer las conexiones.
Aunque mi primer intento (V1) funcionó perfectamente, no fue tan compacto como me gustaría. De hecho, no encajó en el recinto de dirección en absoluto. Rediseñé las pistas y reconstruí una segunda versión (V2) usando conectores masculinos DuPont angulados, ahorrando mucho espacio debido a una altura limitada.
? Eche un vistazo al diseño y tabla final del diagrama .
Si tiene todo conectado y conectado como muestra el diagrama, probablemente estará listo para usar el volante.
Para compilar el boceto Arduino, deberá tener instaladas estas bibliotecas:
EEPROM.H - EEPROM BIRITA PARA ALTACIÓN DE ALTACIÓN
LiquidCrystal_i2c.h - Pantalla de cristal líquido I 2 C Biblioteca
i2cencoderminilib.h - Encoder de rotación I 2 C Biblioteca
Timelib.h - biblioteca de tiempo
DS1307RTC.H - DS1307 Biblioteca RTC
Siga las instrucciones de la biblioteca sobre cómo configurar la hora actual en el RTC.
Siga las instrucciones de la biblioteca sobre cómo cambiar la dirección de cada una de las placas de codificadores rotativos. Los he configurado de la siguiente manera:
BB (balance de frenos): 0x20
ABS (Sistema de frenado antíloque): 0x21
TC (control de tracción): 0x22
Lo único que puede necesitar ajuste son los valores del interruptor rotativo, dado que los valores devueltos dependen del voltaje suministrado. Establezca el DEBUG_ROTARY_SWITCHES
en true
y el LCD mostrará los valores actuales de ambos interruptores. Tome nota de esos números y actualice los en el archivo de boceto t300_functions
, en las funciones getCABMode()
y getCABSteps()
.
He agregado un monitor de rendimiento incorporado. Deberá establecer DEBUG_LATENCY
en true
y abrir el monitor en serie (115200 baudios). Una vez cargado, verá un informe en tiempo real sobre la latencia de bucle actual.
La primera versión de software tuvo bastantes problemas, siendo la latencia la más grande. De vez en cuando se perdería un clic de botón, lo que durante una carrera esto significaba un fallo en un cambio ascendente o un cambio descendente. Esto compensó un mal rendimiento.
Después de ejecutar pruebas, descubrí que un solo bucle funcionaba alrededor de 2800 ms con un hipo eventual cada segundo a alrededor de 106000 ms. Era abonda que algo estaba produciendo algún tipo de retraso. Finalmente optimizé el código para los codificadores rotativos y el reloj (RTC).
Dado que la pantalla no agrega mucho a la experiencia de conducción, puede optar por apagarla mientras conduce a largo plazo presionando a largo plazo el interruptor giratorio ABS.
La versión actual funciona sin problemas y no he notado ningún fallido durante las carreras.
Un pequeño espacio para reconocer el trabajo realizado anteriormente por otros.
Taras Ivaniukovich https://rr-m.org/blog/ - por el trabajo que ha compartido en su blog y la ayuda que brindó en todo el camino
Bram Harmsen https://www.ththingiverse.com/thing:2813599 - para ingeniería inversa el volante F1
MRFID72 - Para el increíble video de YouTube que explica los interruptores rotativos analógicos
Danny Van den Brande : por el código que encontré en línea que me ayudó a configurar la matriz de botones
Antonio de Stefano https://3drap.it - para el increíble recinto del volante
GNU Licencia pública general v3.0 o posterior