DIY - Shifter + FAM

  • Adepte du DIY, j'ai déjà réalisé mon chassis (j'en suis a mon 2eme), conçu un dashboard en utilisant ce merveilleux logiciel qu'est Simhub, installé des bass shakers, créer le nécessaire pour adapter une roue à mon TS-PC en concervant les boutons, créé les palettes adaptées etc...... il me manquait FAM et shifter SEQ...

    Enfin nous y sommes :yes:

    Après plusieurs semaines à récolter des données / idées sur le forum et la toile voici mon combo Shifter séquentiel et FAM.

    IMG-20191001-132747-Convert-Image-Convert-Image.jpg

    IMG-20191001-135638-Convert-Image-Convert-Image.jpg

    Pour le FAM, j'ai dessiné et fait usiner la pièce pour accueillir la loadcell, suivant le même principe que les pédalier Fanatec CSPV1: avec un axe acier relié/vissé au FAM, un axe en élastomère intermédiaire, puis un nouvel axe en acier pour venir écraser la loadcell.

    Pour le shifter, je suis parti de photos de modèles commercialisés et ai redéfini toutes les cotes. Pour la partie tôlerie, c'est mon job, ca n'a pas été trop compliqué, par contre pour les pièces usinées... il a fallu un peu plus de réflexion et d'échanges. Mais le résultat est là! Je voulais qq chose de ferme et qui soit guidé, et je n'en suis pas trop loin.

    Le tout est raccordé à un arduino micro pro, le FAM via un amplificateur HX711 (pas très réactif, à voir pour passer sur un INA122) et le shifter via 2 contacteurs, dont je dois trouver d'autres modèles plus fiables. Là c'est un peu ghetto, il arrive que ca fasse un peu boite PSA parfois:hihihi:

    Il y a encore des modifs à apporter sur l'un et l'autre, pour l'instant on va parler de protos, et je vais surtout les mettre à rude épreuve afin de tester leur solidité et fiabilité.

    Voili voilou;)

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • Ça déchire je suis très fan ! L'épaisseur et la rigidité ont l'air top. Genre sur le fam fanatec une baffe sur le côté ou un coup de genou et j'y suis pour le retordre dans l'autre sens.

  • Sympa. Pour le frein à main, moi j'ai fait encore plus simple: un boulon vissé au bout de la chappe, un ressort, une plaque en delrin pour compressé le ressort et en avant.

    Pour l'électronique j'ai récupéré un capteur à effet hall que j'ai relié à mon pédalier fanatec. Bon j'avoue que je n'ai jamais fixé l'aimant, donc des fois je dois le remettre en place, et un vrai frein à main hydraulique doit avoir un autre feeling, mais ça fait le job et pour un tarif assez limité. Par contre je ne l'avais pas acheté sur ali et c'est vrai qu'il est moins beau que le tien.

    Belles réalisations, ça fait plaisir à voir.

  • Lachaussette 1 octobre 2019 à 16:46

    A changé le titre de la discussion du forum de “Shifter + FAM” à “DIY - Shifter + FAM”.
  • Les contacteurs plus fiables je serais tenté de dire pas forcément. T'as peut être des soucis normaux de rebonds / debounce. Tu peux mettre des petits condensateur pour améliorer la situation et où le gérer mieux côté software.

  • magnifique tout ça.

    Pour le hx711, par défaut en général ils sont en mode 10 Hz, il y a une soudure à changer pour le passer en mode 80 Hz.

    Pour l'anti-rebond, pas besoin de condensateur, ça peut se faire au niveau du code...

  • magnifique tout ça.

    Pour le hx711, par défaut en général ils sont en mode 12 Hz, il y a une soudure à changer pour le passer en mode 80 Hz.

    Pour l'anti-rebond, pas besoin de condensateur, ça peut se faire au niveau du code...

    C'est ce que j'ai fait mais tjs aussi lent...

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • Les contacteurs plus fiables je serais tenté de dire pas forcément. T'as peut être des soucis normaux de rebonds / debounce. Tu peux mettre des petits condensateur pour améliorer la situation et où le gérer mieux côté software.

    Plus fiable ds le sens où ils "cliquent" a tous les coups. Leur position actuelle fait que ce n'est pas systématiquement le cas.

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • Bizarre, normalement 80 Hz c'est déjà bien réactif pour un FAM. ça doit venir du code, ou alors tu es très exigent en terme de réactivité :B

    Possible que ca vienne du code, car je n'y comprends rien pour être franc... J'ai réussi à combiner le programme du HX711 avec l'exmaple du gamepad pour ajouter les 2 boutons du shifter en y allant à taton...

    Mais si tu as ca sous le coude je suis carrément preneur!

    Et je ne suis pas exigeant sur la réactivité car les roues sont encore bloquées au moment ou je relache qu'il me faut de la puissance ^^

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • Désolé je n'ai pas de code sous le coude, montre ton programme (en MP si tu veux le garder pour toi), je peux regarder si je vois un truc qui ne va pas.

    Sinon je peux te vendre une carte programmable avec Node Blue qui fera ce dont tu as besoin, mais ce n'était pas le but de mes interventions.

  • Non pas de soucis je suis pour le partage ;)

    Par contre j'ai remarqué dans le panel des contrôleurs de jeu, j'ai un phénomène étrange... lorsque je clique sur mon pédalier fanatec ca m'ouvre l'arduino... et aujourd'hui impossible de m'en servir la latence était juste abominable... jusqu'à plusieurs secondes sur l'intégralité de l'arduino, pas uniquement le FAM. Le pédalier lui RAS, même si je ne peux accéder à son panneau... J'ai mis les drivers à jour et toujours pareil.


    /*#include <HX711.h>

    #define calibration_factor -640.0 // Do your calibration first.

    #define DOUT 3

    #define CLK 2

    */

    #include <Joystick.h>

    #include "HX711-multi.h"

    // Pins to the load cell amp

    #define CLK 2 // clock pin to the load cell amp

    #define DOUT1 3 // data pin to the first lca

    #define DOUT2 4 // data pin to the second lca

    #define DOUT3 5 // data pin to the third lca

    #define TARE_TIMEOUT_SECONDS 4

    byte DOUTS[3] = {DOUT1, DOUT2, DOUT3};

    #define CHANNEL_COUNT sizeof(DOUTS)/sizeof(byte)

    long int results[CHANNEL_COUNT];

    HX711MULTI scales(CHANNEL_COUNT, DOUTS, CLK);


    // HX711 scale;

    /*


    For the true false flags, use this list. Its all in Joystick.h

    bool includeXAxis = true,

    bool includeYAxis = true,

    bool includeZAxis = true,

    bool includeRxAxis = true,

    bool includeRyAxis = true,

    bool includeRzAxis = true,

    bool includeRudder = true,

    bool includeThrottle = true,

    bool includeAccelerator = true,

    bool includeBrake = true,

    bool includeSteering = true);

    */

    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,

    JOYSTICK_TYPE_MULTI_AXIS, 4, 3,

    false, false, false, false, false, false,

    false, false, true, true, false);


    // Variable

    int throttle = 0;

    int brake = 0;

    int clutch = 0;


    // init joystick libary

    void setup() {

    // Ranges are 1023 by default

    // Joystick.setBrakeRange(-300, 10230);

    //Joystick.setThrottleRange(0, 1023);

    //Joystick.setZAxisRange(0, 255);

    Joystick.begin();

    Serial.begin(115200);

    Serial.flush();

    pinMode(11,OUTPUT);

    tare();

    // Initialize Button Pins

    pinMode(9, INPUT_PULLUP);

    pinMode(10, INPUT_PULLUP);

    pinMode(11, INPUT_PULLUP);

    pinMode(12, INPUT_PULLUP);

    // Initialize Joystick Library

    Joystick.begin();

    }

    // Constant that maps the phyical pin to the joystick button.

    const int pinToButtonMap = 9;

    // Last state of the button

    int lastButtonState[4] = {0,0,0,0};

    void tare() {

    bool tareSuccessful = false;

    unsigned long tareStartTime = millis();

    while (!tareSuccessful && millis()<(tareStartTime+TARE_TIMEOUT_SECONDS*1000)) {

    tareSuccessful = scales.tare(20,10000); //reject 'tare' if still ringing

    }

    }

    void sendRawData() {

    scales.read(results);

    for (int i=0; i<scales.get_count(); ++i) {;

    // Serial.print( -results[i]);

    // Serial.print( (i!=scales.get_count()-1)?"\t":"\n");

    }

    delay(10);

    }

    void loop() {

    sendRawData(); //this is for sending raw data, for where everything else is done in processing

    //on serial data (any data) re-tare

    if (Serial.available()>0) {

    while (Serial.available()) {

    Serial.read();

    }

    tare();

    }

    //throttle = results[0] / 8 ;

    Serial.println(throttle);

    //Joystick.setThrottle(digitalRead(throttle));

    //delay(1);

    throttle = -results[0] / 800 ;

    Joystick.setBrake(throttle); // why wont this register in the axis?

    delay(1);

    // Joystick.setZAxis(analogRead(clutch));

    // delay(1);

    // Read pin values

    for (int index = 0; index < 4; index++)

    {

    int currentButtonState = !digitalRead(index + pinToButtonMap);

    if (currentButtonState != lastButtonState[index])

    {

    Joystick.setButton(index, currentButtonState);

    lastButtonState[index] = currentButtonState;

    }

    }

    delay(50);

    }

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • 1) Tu as 2 fois Joystick.begin(); dans le Setup

    2) Tu as configuré la lib HX711 pour 3 load cell alors qu'à priori tu n'en utilise qu'une

    3) Tu as un delay(10) dans sendRawData(), function qui d'ailleurs n'envoie rien. Donc ça ne montera jamais au dessus de 100 Hz

    4) Tu as un delay(50) dans la loop(). Donc ça ne montera jamais au dessus de 16 Hz (10 ms + 50 ms = 60 ms)....

    5) Tu as un Serial.println(throttle); , on ne fait jamais ça dans un périf de jeu, sauf pour debugger

    6) Quand tu initialise Joystick.begin(); ça utilise le paramètre initAutoSendState = true, donc à chaque fois que tu fais Joystick.setButton(...) ça envoie un paquet HID, et à chaque fois que tu appelles Joystick.setBrake(...) aussi. Il faut que tu appelles Joystick.begin(false) dans le setup (une fois hein). Et à la fin de loop tu appelles Joystick.sendState();

    Et au passage, redémarre ton PC, ça pourrait résoudre ton phénomène étrange :hihihi:

  • J'avais prévenu que mon truc c'était la méca, pas la programmation ni l'électronique :hihihi:

    Je vais tenter de corriger selon tes indications.

    Par contre je peux déjà te répondre concernant les multiples loadcell, c'est la seule librairie fonctionnelle que j'ai trouvé. Il semblerait qu'il y ait eu une MAJ de la librairie HX711, et qu'une partie qui nous servait auparavant pour nos joujous ait disparu...

    Et pour le redémarrage j'avais déjà essayé, mais idem... sans succès...

    Merci pour ton aide précieuse!:+:

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • Voila j'ai corrigé selon tes infos, mais je ne sais pas si c'est bien (notamment les delay, ainsi que le paramètre initAutoSendState, j'ai pas tou saisi...)


    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

    Message modifié 1 fois, dernière modification par herve069 (3 octobre 2019 à 13:50).

  • C'est un peu illisible là avec toutes ces interlignes et la perte d'indentation, il y a une balise "code" qui te permet d'insérer du code dans ton message (c'est l'icone </>).

    Je vais aussi apprendre à me servir du forum :hihihi:

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

  • C'est encore pire lol, bref, voici une version épurée et lisible:

  • Je teste ca dès demain et je te fais un retour!

    Merci beaucoup ;)

    EDIT:

    Je viens de tester (pas encore en jeu) et ca semble bon!

    Je crois que celui qui foutait la merde était Simhub, car l'arduino était activé pour mon dash!

    Je te ferai un autre retour demain ingame.

    Gros gros merci!!

    803.png

    Chacun sa route, chacun son chemin, passe le virage au frein à main.

    MES SCREENSHOTS

    Message modifié 1 fois, dernière modification par herve069 (3 octobre 2019 à 18:15).