Contrôle d’un compteur de voiture : Comment faire bouger les aiguilles avec des micro servos ?

Contrôle d’un compteur de voiture : Comment faire bouger les aiguilles avec des micro servos ?

Bonjour à tous,

Avez-vous déjà entendu parler du logiciel xsim ? Il permet de simuler une voiture et de collecter les données de télémétrie via un port série. Mon projet actuel consiste à créer un simulateur automobile complet avec un siège dynamique, un tableau de bord et bien d’autres fonctionnalités.

Cependant, j’ai rencontré un petit problème concernant le compteur de vitesse. Il ne s’agit pas d’un problème de programmation, mais plutôt d’un défi mécanique. J’aimerais utiliser des micro servos, similaires à ceux fournis dans les kits de démarrage Arduino, pour déplacer les aiguilles du compteur de voiture. Les micro servos sont faciles à programmer et économiques.

Le seul inconvénient est que ces moteurs sont limités à une rotation de 180°. Or, les compteurs de voiture n’utilisent pas d’aiguilles qui se déplacent sur une plage de 180°, à l’exception peut-être des 2CV (mais leur design ne correspond pas vraiment à mes critères !).

Donc ma question est la suivante : existe-t-il des micro servos capables de réaliser une rotation à 360°, voire 280°, ce qui serait suffisant pour mon projet ? Je ne souhaite pas utiliser des moteurs pas à pas car je suis limité en termes de nombre d’entrées/sorties. Les micro servos m’intéressent donc particulièrement. De plus, investir dans des moteurs pas à pas juste pour agiter des aiguilles me semble un peu exagéré…

Je sais que ma question n’est pas directement liée à Arduino, mais j’espère que quelqu’un pourra m’aider !

Si cela vous intéresse, voici deux courtes vidéos montrant le compteur de vitesse et le compte-tours en action. Veuillez excuser la qualité, j’ai fait ça rapidement hier soir.

Voici également un extrait de code pour faire fonctionner le servo via xsim :

#include <Servo.h>
Servo myservo;
int DataValueT = 0;

void setup()
{
  Serial.begin(115200);
  myservo.attach(11);
}

void loop()
{
  readSerialData();
  myservo.write(DataValueT);
}

void readSerialData()
{
  byte Data[3] = {'0', '0', '0'};
  if (Serial.available() > 2)
  {
    Data[0] = Serial.read();
    if (Data[0] == 'T')
    {
      Data[1] = Serial.read();
      Data[2] = Serial.read();
      DataValueT = NormalizeData(Data);
    }
  }
  if (Serial.available() > 16)
    Serial.flush();
}

int NormalizeData(byte x[3])
{
  int result;
  if (x[2] == 13)
  {
    x[2] = x[1];
    x[1] = '0';
  }
  for (int i = 1; i < 3; i++)
  {
    if (x[i] > 47 && x[i] < 58)
    {
      x[i] = x[i] - 48;
    }
    if (x[i] > 64 && x[i] < 71)
    {
      x[i] = x[i] - 55;
    }
  }
  result = map((x[1] * 16 + x[2]), 160, 255, 179, 0);
  return result;
}

Pour information, xsim envoie un signal de 0 à 255 en hexadécimal, précédé d’une lettre pour l’identification (par exemple, T7F), qui est récupéré par la fonction “readSerialData”. La fonction “NormalizeData” ajuste simplement la valeur pour que le micro servo puisse la traiter. Ensuite, le servo est déplacé à la position voulue, mais malheureusement, il est limité à 180°.

Voilà, si quelqu’un a une idée ou des conseils, je suis preneur ! Merci d’avance pour votre aide.

N’hésitez pas à partager vos réflexions et suggestions dans les commentaires !

Image: Compteur de voiture

Image: Fonctionnement du servo