UNOJOY, l’ami des Arduino et des arcades ?

J’avais depuis quelques temps une borne Sega Rally qui trainait dans un coin (oui le gros truc avec les sièges et volant). Après de multiples tentatives de réparation j’ai opté pour une solution simple mais efficace, vider le tout et mettre un PC avec des émulateurs et des jeux.

sega-rally-twin-sit-down-racing-arcade-machine

Avantages :

  • Alléger le tout
  • Pouvoir jouer à plein de jeux

Inconvénients :

  • Perte du retour de force
  • Beaucoup de travail
  • Se faire huer par les puristes

J’ai donc commencé par tout désosser, remplacé les écrans par des écrans LCD, refait les parties bois, tout repeint … Vient alors le moment de remonter la borne et de tout câbler. Pendant toutes ces étapes une question restait alors sans réponse… que faire pour le volant. J’ai pensé utiliser un volant du marché mais souhaitant conserver au maximum le design de la borne cela n’allait pas, et un jour je suis tombé sur UNOJOY.

UNOJOY permet de transformer son Arduino en Joystick en utilisant les entrées analogiques et numériques, ceci est tout simplement génial.

UNOJOY fonctionne sur Arduino Uno, Mega et Leonardo; en gros ça reprogramme l’atmega 8U2 ou 16U2 (suivant la carte utilisée) pour faire reconnaître l’Arduino comme un joystick par le PC (mais apparement aussi la ps3).

windows

Avant cette étape il faut bien sûr câbler le tout et vérifier que ça fonctionne, pour cela un petit outil Processing permet de voir en live si les contrôles fonctionnent bien.

processing

En cas de contrôles un peu plus complexe (comme la boîte de vitesse sur ma borne) il est possible d’adapter le code (UnoJoyArduinoSample.ino) afin de gérer ces contrôles.

vitesses

Voici le petit hack pour utiliser mon levier à 4 vitesses avec trois Switchs qui sont connectés sur les pins numérique 2, 3 et 4 :

controllerData.triangleOn = LOW;

controllerData.circleOn = LOW;

controllerData.squareOn = LOW;

controllerData.crossOn = LOW;

  

//  operator to invert the readings from the pins

if (!digitalRead(2)&& digitalRead(3))

  controllerData.triangleOn=HIGH;

else if (!digitalRead(3) && !digitalRead(4))

  controllerData.circleOn=HIGH;

else if (!digitalRead(3))

  controllerData.squareOn=HIGH;

else if (!digitalRead(4))

   controllerData.crossOn=HIGH;  

On envoie ensuite le code sur l’Arduino, puis on lance le petit bat qui le transforme en périphérique de jeux et le tour est joué. Il est bien sûr possible de transformer à nouveau sa carte en Arduino avec un autre bat.

Je vous ferai découvrir très prochainement une réalisation utilisant UnoJoy, « stay tuned » comme on dit !

Le code de UnoJoy : https://github.com/AlanChatham/UnoJoy