proyecto forcefeedback con ardu

hola gente. mucho tiempo sin publicar nuevos proyectos.
hoy les paso unos videos de dos prototipos que hice para un forcefeedback. esto seria aplicar fuerzas a un volante de pc para juegos. mediante la obtencion de datos con xsim....
el codigo es muyyyy simple queda mucho por mejorar... seguro aqui podran darme buenos consejos... al igual que en la electronica para disminuir ruido de motor y pwm.

bueno estos son los dos prototipos.
prototype1

prototype2

videos

en este video tengo algunas mejoras en configuracion del xsim. hay mejores respuesta a efectos.

les comento la mecanica
el prototipo 1. basicamente es una gran reduccion de una vieja maquina, a la cual al eje conducido lo transmito mediante una barilla al volante pero esta esta segmentada. entre segmentos utilizo un trozo de manguera ajustada a modo de embrague. el problema de este es el gran ruido de la reduccion metalica (sumado al motor) y la flexibilidad de la manquera, esto ultimo le quita velocidad de respuesta.....

el prototipo 2 esta armado con un rodillo de impresora de matriz...y a ambos lados de el tenemos dos ejes pasa hojas de otra impresoras. estos estan mediante reducciones movidas por un motor. la ventaja de este sistema es la proteccion al motor de contra giros... es decir si el motor gira a un lado y el volante a otro.. el rodillo patina (a modo de embrague) pero se sigue sintiendo la friccion o empuje de los ejes hacia el lado del motor.
otra ventaja es la rigidez del eje del volante, no es un volante blando como normalmente lo son. esto se asemeja mas a uno de verdad....
queda mucho por depurar todavia.... faltan respuestas.. falta perfeccionar el codigo ..... bueno pero estoy super conforme por ahora....
espero sus criticas...y sus recomendaciones... como por ejemplo para disminuir el ruido del motor...
P/D: el puente H que utilizo es el de 10A H-Bridge Motor Controller - Introduction | PyroElectro - News, Projects & Tutorials

el codigo

    int motor = 3;
int motor2 = 5;
    int giroi;
    int girod;
    int Gforce = 0;
    int Gforce1 = 0;
    int Gforce10 = 0;
    int Gforce100 = 0;

    char kind_of_data;

    void setup() {
                     
      
      Serial.begin(9600);
    }

    void loop() {

      
      while(Serial.available() > 0) {
       
        kind_of_data = Serial.read(); //para USO X~a01~ Y~a02~
        if(kind_of_data == 'X') {
          Read_Pos(kind_of_data);
        }
        if(kind_of_data == 'S') {
          Read_Pos(kind_of_data);
        }
      }
    }
       
    void Read_Pos(char motor_ffb){
      delay(2);
      int Gforce100 = Serial.read()- '0';
      delay(2);
      int Gforce10 = Serial.read()- '0';
      delay(2);
      int Gforce1 = Serial.read()- '0';
     
      
     //if (Gforce1 < 0) { Gforce = Gforce10 + 10*Gforce100; }
     // if (Gforce1 < 0 && Gforce10 < 0) { Gforce = Gforce100; }
    // if (Gforce100 < 0) { Gforce = 127; }
    //  if (Gforce1 >=0 && Gforce10 >= 0 && Gforce100 >= 0) { Gforce = 100 * Gforce100 + 10 * Gforce10 + Gforce1; }
Gforce = 100 * Gforce100 + 10 * Gforce10 + Gforce1;
      
      if (motor_ffb == 'X') {
        
        //Gforce = constrain ( Gforce, -255 , 255); 
        
        if (Gforce < -100) {
             giroi = Gforce ;    
       giroi = map(Gforce  ,-255 ,-100 , 100, 200);  
       giroi = constrain (giroi, 100 , 200);
        analogWrite(motor2,0);
        analogWrite(motor,giroi);
        
        delay(10);

      
        }
      if(Gforce > 100){
       girod = Gforce;
        girod = map (Gforce , 100, 255, 100 , 200 );
        girod = constrain (girod, 100 , 200);
        analogWrite(motor,0);
        analogWrite(motor2,girod );
        
        delay(10);

      }
     
      
  if (Gforce >= -80 && Gforce <= 80){
analogWrite(motor,0);
        analogWrite(motor2,0);
        delay (10);
      }
  
  }
      if (motor_ffb == 'S') { //para el stop
        analogWrite(motor,0);
        analogWrite(motor2,0);
    }
    }

hola de nuevo estimados compañeros.
espero que les haya gustado el proyecto.....
para los que vieron el video notaran mucho ruido del motor.
algunos me dijeron que se soluciona poniendo condensadores en paralelo NP
tambien lei por ahi de cambiar la frecuencia del pwm de ardu.. pero esto ultimo ni idea....
alguien podria darme alguna recomendación?