Hola,
Parece que estás disfrutando del foro pero aún no te has registrado. ¿Por qué no te tomas un minuto para crear una cuenta?. Como usuario registrado en 900grados tendrás acceso completo al foro sin ninguna limitación y podrás comunicarte directamente con todos los miembros de la comunidad.

Si ya tienes una cuenta inicia sesión en la parte superior derecha de esta página (login) y no verás más este aviso.

Resultados 1 al 9 de 9

Tema: Mi volante custom para bases Thrustmaster

  1. #1
    Piloto de karting Avatar de Matusalen
    Registrado
    22/09/2016
    Edad
    44
    Vivo en
    Tarragona
    Mensajes
    35

    Mi volante custom para bases Thrustmaster

    Muy buenas a todos,

    Vengo a mostrar lo que llevo haciendo los últimos 2 meses. Es un volante para bases Thrustmaster (TX, T300, T500 y supongo que TS-PC) sin cables.






    Tiene 10 botones (8+Levas) que van conectados a la base y la barra de leds para las RPM y el display para la marcha engranada que van conectados por bluetooth al PC (de momento sólo compatible con iRacing).
    Toda la estructura está impresa en 3D con PLA con un alto infill. Esto le da buena rigidez aunque pesa algo mas que si estuviera hecho con placas de fibra carbono, pero como vereis he intentado que el BOM sea lo mas económico posible.

    Os dejo algunas fotos mas y luego pasamos a cosas más "técnicas".
















    Como veis, el interior es un poco caótico. Al haber puesto 2 arduino, la cantidad de cables se dispara. Bonito no es, pero funciona.

    En cuanto a la estructura, como he comentado está impresa en PLA, con un infill del 100% en la cara frontal y trasera para darle más rigidez. El resto de piezas, como las levas o los soportes, están impresos con un infill del 40% para reducir el peso y mantener rigidez. En total, sin contar con las pruebas y piezas que he tenido que repetir, la impresión se habrá llevado entre 15 y 20 horas.

    Los diseños de las piezas son míos basándome en otras existentes. En concreto estas:
    Estructura: https://www.thingiverse.com/thing:1678086
    Adaptador QR: https://www.thingiverse.com/thing:976223

    las levas son magnéticas, con un microinterruptor de palanca larga y 2 imanes de neodimio de 5x8. Se pueden ajustar en distanca y también en recorrido. La verdad es que el tacto parece muy bueno.

    En cuanto a la electrónica decir que no he inventado nada. la conexión del arduino a la base la saqué de un blog.
    hay un arduino que se hace de interface entre los botones y la base (es una simple conexión serie) y el otro se encarga de recibir los datos por el módulo BT y mostrar los datos por el display y los leds. Realmente no es nada complicado.

    Conexión de base a arduino: http://rr-m.org/blog/arduino-nano-co...lbases-part-3/
    Sketch de control de leds y display:
    Código:
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #define OLED_RESET 4
    #define PIN            6
    #define NUMPIXELS      16
    #define BLINKSPD       100
    
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    Adafruit_SSD1306 display(OLED_RESET);
    SoftwareSerial BT1(10,11); // RX, TX
    
    
    long emillis =0;
    int blink_color=pixels.Color(0,0,0);
    uint32_t color_green=pixels.Color(0,10,0);
    uint32_t color_orange=pixels.Color(10,5,0);
    uint32_t color_red=pixels.Color(10,0,0);
    uint32_t color_blue=pixels.Color(0,0,30);
    
    long await=0;
    
    uint32_t colors[] ={
        color_green,
        color_green,
        color_green,
        color_green,
        color_green,
        color_green,
        color_green,
        color_green,
        color_orange,
        color_orange,
        color_orange,
        color_orange,
        color_red,
        color_red,
        color_red,
        color_blue
      };
    
    int currentPosition=0;
    int isBlinking=0;
    
    void setup() {
      pixels.begin();
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      
      BT1.begin(9600);
    
      drawGear("X");    
      knightRider(3, 32, 4, pixels.Color(20,2,0)); // Cycles, Speed, Width, RGB Color (original orange-red)
      clearStrip();
      drawGear("");
    }
    
    void loop() {
    
      while (BT1.available()>0) {
        int v =BT1.read();
    
        if (v<=15) {
          currentPosition = v;
          drawRPM();
        } else if (v<=17) {
          isBlinking=v-16;
          drawBlink();
        } else if (v<=29) {
            switch (v) {
              case 18:
                drawGear("R");
                break;
              case 19:
                drawGear("N");
                break;
              default:
                drawGear(String(v-19));
            }
        }
        await=millis();
      }
    
      if (millis()-await>5000) {
        drawGear("");
        clearStrip();
        await=millis();
      }
    }
    
    void drawRPM() {
      for(int i=0;i0) {
        if (millis()-emillis>=BLINKSPD){
          if (blink_color==pixels.Color(0,0,0)) {
            blink_color=colors[NUMPIXELS-1];
          } else {
            blink_color=pixels.Color(0,0,0);
          }
          emillis=millis();     
        }
      } else {
        blink_color=pixels.Color(0,0,0);
      }
      pixels.setPixelColor(NUMPIXELS-1, blink_color);  
      pixels.show();
    
    }
    
    void drawGear (String g) {
      display.clearDisplay();
    
      if (isBlinking>0) {
        if (millis()-emillis>=BLINKSPD){
          if (blink_color==pixels.Color(0,0,0)) {
            display.invertDisplay(true);
          } else {
            display.invertDisplay(false);
          }    
        }
      } else {
        display.invertDisplay(false);
      }
      
      display.setTextSize(9);
      display.setTextColor(WHITE);
      display.setCursor(43,0);
      display.println(g);
      display.display();
    }
    
    void knightRider(uint16_t cycles, uint16_t speed, uint8_t width, uint32_t color) {
      uint32_t old_val[NUMPIXELS];
      for(int i = 0; i < cycles; i++){
        for (int count = 1; count0; x--) {
            old_val[x-1] = dimColor(old_val[x-1], width);
            pixels.setPixelColor(x-1, old_val[x-1]); 
          }
          pixels.show();
          delay(speed);
        }
        for (int count = NUMPIXELS-1; count>=0; count--) {
          pixels.setPixelColor(count, color);
          old_val[count] = color;
          for(int x = count; x<=NUMPIXELS ;x++) {
            old_val[x-1] = dimColor(old_val[x-1], width);
            pixels.setPixelColor(x+1, old_val[x+1]);
          }
          pixels.show();
          delay(speed);
        }
      }
    }
    
    void clearStrip() {
      isBlinking=0;
      for( int i = 0; i
    
    El código podría ser mucho mas pequeño, pero le he puesto una pequeña animación al arrancar para darle un toque de gracia.

    La aplicación que envía los datos por BT desde el PC la he hecho con VB.NET y el port a c# del SDK de iRacing (iRSDKSharp), tampoco tiene mucho secreto. os copio aquí la parte importante:

    Código:
        Imports iRSDKSharp
    
        Private Sub ProcessData()
            Dim Gear As Integer
            Dim Rpm, RpmP As Double
            Dim LedCount As Byte = 0
    
            Integer.TryParse(_Sdk.GetData("Gear"), Gear)
    
            Rpm = _Sdk.GetData("RPM")
    
            Counter += 1
            If Counter = 100 Then
                If Rpm = 0 Then
                    Restart()
                    Exit Sub
                End If
                Counter = 0
            End If
    
            If _SessionInfo <> _Sdk.GetSessionInfo Then
                _SessionInfo = _Sdk.GetSessionInfo()
                _MaxRpm = Double.Parse(YamlParser.Parse(_SessionInfo, "DriverInfo:DriverCarSLShiftRPM:"), NumberStyles.Any, CultureInfo.InvariantCulture)
            End If
    
    
            RpmP = Rpm * 100.0 / _MaxRpm
    
            Select Case RpmP
                Case Is > 99
                    LedCount = 15
                Case Is > 97.6
                    LedCount = 14
                Case Is > 96.0
                    LedCount = 13
                Case Is > 94
                    LedCount = 12
                Case Is > 91.6
                    LedCount = 11
                Case Is > 87.5
                    LedCount = 10
                Case Is > 82.5
                    LedCount = 9
                Case Is > 76.6
                    LedCount = 8
                Case Is > 70
                    LedCount = 7
                Case Is > 62.5
                    LedCount = 6
                Case Is > 54.1
                    LedCount = 5
                Case Is > 45
                    LedCount = 4
                Case Is > 35
                    LedCount = 3
                Case Is > 24.1
                    LedCount = 2
                Case Is > 12.5
                    LedCount = 1
                Case Else
                    LedCount = 0
            End Select
    
            SerialSend(LedCount, Gear)
    
    
        End Sub
    
        Private Sub SerialSend(LedCount As Integer, Gear As Integer)
            Dim data(2) As Byte
            data(0) = LedCount
            Data(1) = 16 + IIf(LedCount = 15, 1, 0)
            Data(2) = Gear + 19
            _Serial.Write(data, 0, 3)
        End Sub
    Y poco más. Si alguno os quereis hacer uno igual o parecido preguntad y intentaré resolver vustras dudas. Soys libres de usar el código, la idea o los diseños 3d para lo que queráis aunque si lo haceis os agradeceré que me mencioneis ;)


    Agradecimientos a:
    Taras, por hacer el sketch y esquema de cableado para conectar el arduino a la base Thrustmaster.
    Juha Koljonen, por el diseño de la estructura y levas para impresión en 3D.
    Michael Bramkamp, por el diseño del adaptador del QR para la base.
    A toda la comunidad arduino, por publicar todos esos ejemplos de código para que los demás podamos aprender.
    A la comunidad de Spainlabs y a Ghosthawk, por ayudarme a poner en marcha mi impresora 3D.


    BOM:
    2 x Arduino Nano 6.75€
    1 x Módulo BT HC-06 3.95€
    1 x Display Oled 0.96" 6.89€
    2 x Barra leds WS2812B RGB 9.98€
    10 x Pulsadores 6.78€
    5 x microswitch KW10 LR 2.02€
    1 x Conector Mini din 6p M 1.70€
    10 x Tuercas aluminio M3 6.10€
    20 x Arandela cónica aluminio M3 7.03€
    4 x Iman neodimio 5x8 1.70€
    6 x Tornillo Din 7991 M3x30 1€
    1 x pintura spray negro mate 8€

    TOTAL: 61.9€ (aproximadamente)

    Faltaría sumar el precio del aro y el plástico, pero no tengo claro que cantidad he usado realmente en la versión final.
    No he sumado cables y alguna tontería más que ya tenía por casa.
    Decir que todo lo he comprado por ebay y simpre que he podido a vendedores españoles. Si se compra en aliexpress a china es mucho mas barato.

    Bueno, creo que es mas o menos todo. Si quereis preguntar os responderé con mucho gusto.

    Un saludo y felices fiestas!

    Xavi.

  2. #2
    Dueño de una escudería Avatar de antmerino
    Registrado
    01/04/2015
    Edad
    46
    Vivo en
    Murcia
    Mensajes
    2,956
    muy chulo, este es el mio, como ves también esta hecho en 3d, tengo dos versiones, una para aros pequeños y otra más grande.

    http://900grados.es/foro/showthread....e-by-antmerino
    http://900grados.es/foro/showthread....s-by-antmerino

  3. #3
    Piloto de karting Avatar de Matusalen
    Registrado
    22/09/2016
    Edad
    44
    Vivo en
    Tarragona
    Mensajes
    35
    Cita antmerino ha escrito Ver mensaje
    muy chulo, este es el mio, como ves también esta hecho en 3d, tengo dos versiones, una para aros pequeños y otra más grande.

    http://900grados.es/foro/showthread....e-by-antmerino
    http://900grados.es/foro/showthread....s-by-antmerino
    Gracias. Viniendo de ti es todo un cumplido :)

    Los habia visto. Pero lo tuyo está a otro nivel. Tengo algunas ideas para la v2... veremos que sale.

  4. #4
    Dueño de una escudería Avatar de antmerino
    Registrado
    01/04/2015
    Edad
    46
    Vivo en
    Murcia
    Mensajes
    2,956
    Cita Matusalen ha escrito Ver mensaje
    Gracias. Viniendo de ti es todo un cumplido :)
    Para nada, lo del BT, esta muy bien, y usar el SPI para conectarlo directamente a la base del Thrustmaster , es genial.

  5. #5
    Piloto de karting Avatar de Matusalen
    Registrado
    22/09/2016
    Edad
    44
    Vivo en
    Tarragona
    Mensajes
    35
    Pensé en hacerlo por wifi. Pero dependes de tener buena cobertura. Por eso opté por el bt que para enviar 3 bytes a 20hz es suficiente. Quiero hacer pruebas de rendimiento a ver cuanto puedo mandar sin ralentizar la conexión y tal vez, en la v2, ponga un oled mayor o incluso un tft. Aunque del tft me preocupa el peso... ya veremos ;)

  6. #6
    Piloto de karting Avatar de Matusalen
    Registrado
    22/09/2016
    Edad
    44
    Vivo en
    Tarragona
    Mensajes
    35
    Actualizo con un par de fotos con el resultado final. El aro es un QSP de 300 mm.



  7. #7
    Dueño de una escudería Avatar de antmerino
    Registrado
    01/04/2015
    Edad
    46
    Vivo en
    Murcia
    Mensajes
    2,956
    Me gusta mucho el resultado, pero creo que podias hacer tanto el tema de los led como el de las marchas y los botones con una sola teensy, lo único es que no funcionaria el bluethoot. Ahorrarías en costes.
    Por el resto de 10. Ponle un vinilo y te va a quedar de lujo.

    Yo he preparado esto que es un display con leds para pegarlo a la base.




  8. #8
    Piloto de karting Avatar de Matusalen
    Registrado
    22/09/2016
    Edad
    44
    Vivo en
    Tarragona
    Mensajes
    35
    Gracias por tu comentario.

    Me estuve mirando el teensy, pero como el sketch para conectar los botones a la base era para arduino tire por ahi.

    Hay varias cosas que mejorar, pero la verdad es que estoy bastante contento.

    En cuanto a costes, no se si ahorraria algo. Los ardu valen nada y menos. El problema es el espacio. La segunda version ya tiene forma en mi cabeza y voy a integrarlo todo en una placa para ahorrarme cables.

    Posiblemente descarte el bt y me pase al tradicional cable usb. Ya veremos.

    Eso si, el tft de 3" no se va a escapar...

    Un saludo!

  9. #9
    Piloto de karting Avatar de pina
    Registrado
    23/05/2016
    Mensajes
    8
    Esta muy chulo si señor yo estoy haciendo un audi dtm mas facil..
    Me pasarias los.archivos para imprimir esas piezas??
    Me encantaria hacerme uno a si :)))

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •