Volante Maclaren 650S GT3 [DIY]

Tema en 'Hardware & software & mercadillo' comenzado por Fox 85, 29 de Julio de 2018.

  1. Fox 85

    Fox 85 Piloto Oficial Licencia A Sub 7' Club

    Se incorporó:
    24 de Octubre de 2016
    Mensajes:
    270
    Me gusta recibidos:
    113
    Hoy comparto con todos un proyecto que he estado trabajando en los últimos meses. Mi replica del Volante Maclaren 650S GT3.
    El volante al ser 100% impreso en 3D, recomiendo imprimir la base y las empuñaduras con un mínimo del 45% de relleno, para que tenga resistencia. Todas las piezas fueran impresas con el filamento PLA Ingeo ™ 3D870 que tiene prácticamente la misma resistencia y flexibilidad que el ABS.

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]


    Materiales necesarios para el ensamblaje

    8 Tornillos hexagonal M3x18mm

    12 Tornillos hexagonal avellanado M5x 35 ( 6 para las empuñaduras y 6 para el QR)

    12 turcas M5

    Las empuñaduras llevan una pequeña hendidura para que se pueda hacer un corte perfecto en la piel.

    [​IMG]

    https://pielparaartesanos.com/ante/11727-color-amarillo-cuero-de-ante.html

    Eletronica

    La electrónica podéis usar un Arduino Pro micro

    [​IMG]

    Código:
    //BUTTON BOX
    //USE w ProMicro
    
    
    #include <Keypad.h>
    #include <Joystick.h>
    
    
    #define ENABLE_PULLUPS
    #define NUMROTARIES 4
    #define NUMBUTTONS 24
    #define NUMROWS 5
    #define NUMCOLS 5
    
    
    
    
    byte buttons[NUMROWS][NUMCOLS] = {
      {0,1,2,3,4},
      {5,6,7,8,9},
      {10,11,12,13,14},
      {15,16,17,18,19},
      {20,21,22,23},
    };
    
    
    struct rotariesdef {
      byte pin1;
      byte pin2;
      int ccwchar;
      int cwchar;
      volatile unsigned char state;
    };
    
    
    rotariesdef rotaries[NUMROTARIES] {
      {0,1,24,25,0},
      {2,3,26,27,0},
      {4,5,28,29,0},
      {6,7,30,31,0},
    };
    
    
    #define DIR_CCW 0x10
    #define DIR_CW 0x20
    #define R_START 0x0
    
    
    #ifdef HALF_STEP
    #define R_CCW_BEGIN 0x1
    #define R_CW_BEGIN 0x2
    #define R_START_M 0x3
    #define R_CW_BEGIN_M 0x4
    #define R_CCW_BEGIN_M 0x5
    const unsigned char ttable[6][4] = {
      // R_START (00)
      {R_START_M,            R_CW_BEGIN,     R_CCW_BEGIN,  R_START},
      // R_CCW_BEGIN
      {R_START_M | DIR_CCW, R_START,        R_CCW_BEGIN,  R_START},
      // R_CW_BEGIN
      {R_START_M | DIR_CW,  R_CW_BEGIN,     R_START,      R_START},
      // R_START_M (11)
      {R_START_M,            R_CCW_BEGIN_M,  R_CW_BEGIN_M, R_START},
      // R_CW_BEGIN_M
      {R_START_M,            R_START_M,      R_CW_BEGIN_M, R_START | DIR_CW},
      // R_CCW_BEGIN_M
      {R_START_M,            R_CCW_BEGIN_M,  R_START_M,    R_START | DIR_CCW},
    };
    #else
    #define R_CW_FINAL 0x1
    #define R_CW_BEGIN 0x2
    #define R_CW_NEXT 0x3
    #define R_CCW_BEGIN 0x4
    #define R_CCW_FINAL 0x5
    #define R_CCW_NEXT 0x6
    
    
    const unsigned char ttable[7][4] = {
      // R_START
      {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},
      // R_CW_FINAL
      {R_CW_NEXT,  R_START,     R_CW_FINAL,  R_START | DIR_CW},
      // R_CW_BEGIN
      {R_CW_NEXT,  R_CW_BEGIN,  R_START,     R_START},
      // R_CW_NEXT
      {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},
      // R_CCW_BEGIN
      {R_CCW_NEXT, R_START,     R_CCW_BEGIN, R_START},
      // R_CCW_FINAL
      {R_CCW_NEXT, R_CCW_FINAL, R_START,     R_START | DIR_CCW},
      // R_CCW_NEXT
      {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
    };
    #endif
    
    
    byte rowPins[NUMROWS] = {21,20,19,18,15};
    byte colPins[NUMCOLS] = {14,16,10,9,8};
    
    
    Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
    
    
    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
      JOYSTICK_TYPE_JOYSTICK, 32, 0,
      false, false, false, false, false, false,
      false, false, false, false, false);
    
    
    void setup() {
      Joystick.begin();
      rotary_init();}
    
    
    void loop() {
    
    
      CheckAllEncoders();
    
    
      CheckAllButtons();
    
    
    }
    
    
    void CheckAllButtons(void) {
          if (buttbx.getKeys())
        {
           for (int i=0; i<LIST_MAX; i++)
            {
               if ( buttbx.key[i].stateChanged )
                {
                switch (buttbx.key[i].kstate) {
                        case PRESSED:
                        case HOLD:
                                  Joystick.setButton(buttbx.key[i].kchar, 1);
                                  break;
                        case RELEASED:
                        case IDLE:
                                  Joystick.setButton(buttbx.key[i].kchar, 0);
                                  break;
                }
               }
             }
         }
    }
    
    
    
    
    void rotary_init() {
      for (int i=0;i<NUMROTARIES;i++) {
        pinMode(rotaries[i].pin1, INPUT);
        pinMode(rotaries[i].pin2, INPUT);
        #ifdef ENABLE_PULLUPS
          digitalWrite(rotaries[i].pin1, HIGH);
          digitalWrite(rotaries[i].pin2, HIGH);
        #endif
      }
    }
    
    
    
    
    unsigned char rotary_process(int _i) {
       unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
      rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
      return (rotaries[_i].state & 0x30);
    }
    
    
    void CheckAllEncoders(void) {
      for (int i=0;i<NUMROTARIES;i++) {
        unsigned char result = rotary_process(i);
        if (result == DIR_CCW) {
          Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
        };
        if (result == DIR_CW) {
          Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
        };
      }
    }
    https://www.xsimulator.net/community/threads/diy-arduino-buttonbox.8302/


    10 pulsadores 6.5mm/7mm

    http://www.cetronic.es/sqlcommerce/...&idTienda=93&codProducto=352162011&cPath=1177

    2 pulsadores de palanca 6.5mm/7mm

    http://www.cetronic.es/sqlcommerce/...&idTienda=93&codProducto=999019229&cPath=1177
    2 protectores de puldador de palanca

    http://www.cetronic.es/sqlcommerce/...=&idTienda=93&codProducto=352140005&cPath=514
    http://www.cetronic.es/sqlcommerce/...=&idTienda=93&codProducto=999019228&cPath=514

    4 rotarys encoder con puldador

    https://www.ebay.es/itm/1-x-CODIFIC...652273?hash=item28205ceb31:g:2J8AAOSwAuZX2RAi

    Para la pegatina del 650S deja las medidas

    2.jpg

    Sin título-1.png

    Lo tenéis publicado el thingiverse

    https://www.thingiverse.com/thing:3025648
     
    Última modificación: 10 de Agosto de 2018
    • like like x 3
    • like a sir like a sir x 1
  2. DannyKiiro

    DannyKiiro Piloto Oficial Licencia C

    Se incorporó:
    20 de Abril de 2017
    Mensajes:
    105
    Me gusta recibidos:
    22
    Tremendo Fox!!! Menudo curro :) Enhorabuena por pedazo volante
     
  3. Gio

    Gio Piloto Oficial

    Se incorporó:
    21 de Abril de 2017
    Mensajes:
    32
    Me gusta recibidos:
    7
    VAya preciosidad, para quitarse el sombrero.

    Muchisimas felicidades y ahora disfrutadolo.
     
  4. Nano

    Nano Piloto Oficial

    Se incorporó:
    27 de Febrero de 2017
    Mensajes:
    123
    Me gusta recibidos:
    41
    Tremendo volante, te ha quedado espectacular. Gracias y gracias por compartirlo en thingiverse, soy un manazas para estas cosas, pero lo voy a intentar.
     
    • like like x 1
  5. Canuti

    Canuti Rookie Amateur

    Se incorporó:
    22 de Marzo de 2018
    Mensajes:
    37
    Me gusta recibidos:
    9
    Nobeee volanton con mayusculas ,madguiber a tu bera es un papafritas.MAKINAAAA
     
    • me parto me parto x 1
  6. FGNQ

    FGNQ Rookie

    Se incorporó:
    29 de Junio de 2019
    Mensajes:
    5
    Me gusta recibidos:
    0
    Hola fieras, simplemente dar las gracias por este tremendo trabajo y compartirlo de esta forma, me ayudo mucho en mi inmersion en arduino y gracias a ello hice algunas botoneras que ya publicare, si aun tiene interes.

    Muchas gracias de corazon, Fox 85.

    Saludos.