まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Rétrogaming

Fil des billets - Fil des commentaires

samedi, 22 novembre 2025

Joystick Arcade pour Nintendo GameCube

La borne est en travaux !
En plus du PC « mame » je souhaite lui installer deux autres systèmes de jeux, dont l'un est la console GameCube.
Motivation ? Jouer à Ikaruga et SoulCalibur sur la borne avec les sticks arcade.
Sauf que ! Comment faire pour connecter ces derniers à la console ?

Avant de réinventer la roue, j'ai traîné sur le web à la recherche d'une proposition de circuit électronique.
J'ai eu un peu de mal à trouver ce que je cherchai, visiblement ça n'intéresse pas trop les foules… L'occasion de constater au passage que la manette GameCube n'était pas aussi électroniquement simple que ses aînées, et qu'il faudrait un circuit programmable pour faire le travail.

J'ai fini par trouver cette page, qui décrit comment construire un contrôleur maison, avec un Arduino, et surtout l’existence de la bibliothèque logicielle adéquate : https://github.com/NicoHood/Nintendo (que je joins en annexe à ce billet)

  • Le code C++ est vraiment très simple à adapter grâce aux exemples donnés, et j'ai alors pu assigner les numéros de broches d'un Arduino Pro Mini 5V aux boutons d'une manette GameCube et établir le schéma de câblage suivant :


Une fois un câble de manette de remplacement acheté, restait alors le plus long à faire, câbler les broches sur le joystick.

  • Ici le brochage est réalisé à l'aide de connecteurs « maisons », qui permettront d'interchanger le joystick entre plusieurs systèmes de jeu (USB ou GameCube pour le moment).


  • Le brochage du câble de la manette est le suivant :
Couleur  −   Usage 

Jaune    −   5V
Blanc    −   GND
Vert     −   GND
Noir     −   GND
Bleu     −   3,3V
Rouge    −   DATA
  • Voici le Scketch à inscrire sur l'Arduino, en ayant pris soins de charger la librairie de NicoHood :

https://github.com/makotoworkshop/Joystick_Arcade_GameCube

#include <Nintendo.h>

// Variables
#define Bouton_A  A1
#define Bouton_B  9
#define Bouton_X  A2
#define Bouton_Y  3
#define Bouton_START  A3
#define Bouton_L  7
#define Bouton_R  8
#define Bouton_Z  2
#define Direction_UP  6
#define Direction_DOWN  5
#define Direction_LEFT  A0
#define Direction_RIGHT  4

// Broche de communication vers la console GameCube
CGamecubeConsole gc_console(10);

// Structure de données de la manette
Gamecube_Data_t gc_data = defaultGamecubeData;


void setup() {
//  Serial.begin(115200);
  // Configuration des boutons en entrée avec résistance pull-up
  pinMode(Bouton_A, INPUT_PULLUP);
  pinMode(Bouton_B, INPUT_PULLUP);
  pinMode(Bouton_X, INPUT_PULLUP);
  pinMode(Bouton_Y, INPUT_PULLUP);
  pinMode(Bouton_START, INPUT_PULLUP);
  pinMode(Bouton_L, INPUT_PULLUP);
  pinMode(Bouton_R, INPUT_PULLUP);
  pinMode(Bouton_Z, INPUT_PULLUP);
  pinMode(Direction_UP, INPUT_PULLUP);
  pinMode(Direction_DOWN, INPUT_PULLUP);
  pinMode(Direction_LEFT, INPUT_PULLUP);
  pinMode(Direction_RIGHT, INPUT_PULLUP);
  delay(100);
}

void loop() {
  // Lecture des boutons
  gc_data.report.a      = !digitalRead(Bouton_A);
  gc_data.report.b      = !digitalRead(Bouton_B);
  gc_data.report.x      = !digitalRead(Bouton_X);
  gc_data.report.y      = !digitalRead(Bouton_Y);
  gc_data.report.start  = !digitalRead(Bouton_START);
  gc_data.report.z      = !digitalRead(Bouton_Z);
  gc_data.report.l      = !digitalRead(Bouton_L);
  gc_data.report.r      = !digitalRead(Bouton_R);

  gc_data.report.dup    = !digitalRead(Direction_UP);
  gc_data.report.ddown  = !digitalRead(Direction_DOWN);
  gc_data.report.dleft  = !digitalRead(Direction_LEFT);
  gc_data.report.dright = !digitalRead(Direction_RIGHT);

  // Stick analogique centré
  gc_data.report.xAxis = 128;
  gc_data.report.yAxis = 128;

  // Stick C centré
  gc_data.report.cxAxis = 128;
  gc_data.report.cyAxis = 128;

  // Gâchettes analogiques à 0
  gc_data.report.left = 0;
  gc_data.report.right = 0;

  // Envoi du rapport à la console de jeux
  gc_console.write(gc_data);

//  Serial.print("bouton Y = ");
//  Serial.println(gc_data.report.y);
  
}

mardi, 9 septembre 2025

RecalStick -1-

Aujourd'hui on va fabriquer un RecalStick !… Un stick avec RecalBox dedans.
Je dispose en effet d'un écran cathodique qui ne demande qu'à afficher de belles images, et d'un Raspberry Pi 4 sur lequel j'ai enfin testé la distribution Recalbox, boite à émulateurs permettant d'exécuter des jeux vidéos d’antan, et je voulais une solution pour faire fonctionner ça joliment.


  • L'émulation sur ce genre de plate-forme étant enfin à peu prés potable, par la puissance maintenant correcte du Rpi – le 4 c'est bien, le 5 je pense qu'on ne fera pas mieux – pour émuler des jeux d'Arcade, et le rendu graphique excellent notamment grâce au module VGA666 compatible avec Recalbox.

On le trouve pour moins de 5€, il suffit de l'enficher sur le Rpi, d'y connecter un câble VGA,

  • alors on pourra brancher ça sur la vieille télé en intercalant un adaptateur VGA vers Péritel câblé comme ceci :
      Prise VGA                —        Prise Péritel

Pin N°1: Vidéo Rouge           —     Pin N°15: Rouge
Pin N°2: Vidéo Vert            —     Pin N°11: Vert
Pin N°3: Vidéo Bleu            —     Pin N°7:  Bleu
Pin N°6: Retour rouge          —     Pin N°13: Masse Rouge
Pin N°7: Retour vert           —     Pin N°9:  Masse Verte
Pin N°8: Retour bleu           —     Pin N°5:  Masse Bleue
Pin N°9: +5 V                  —     Pin N°8:  SWITCH
Pin N°10: Masse                —     Pin N°17: Masse Synchro
Pin N°13: HSync et N°14: VSync —     Pin N°20: Synchro.

Ajouter une résistance de 75 Ohms entre la Pin 8 et 16 de la prise péritel, permet, grâce au 5V en provenance de la carte vidéo, de basculer le TV en RVB sur l'entrée AV.
dsc07537.jpg dsc07535.jpg

Ok, donc on a le micro-ordinateur pour faire tourner des jeux branchés à la TV, il manque la manette et une boite pour l'ordinateur.
Et bien on va combiner les deux pour donc fabriquer (encore !) une sorte de TV Game.


Les plans :

Disponibles en annexe à ce billet, j'ai dessiné le modèle 3D en fonction de plusieurs facteurs importants :
– Je souhaitais que le stick arcade ressemble au Hori Real Arcade Pro VX
– Qu'on puisse l'utiliser posé sur ses genoux
– Qu'il intègre donc le Rpi4
– Qu'on puisse brancher directement les câbles VGA, audio, et alimentation sur le boîtier du stick
– Et aussi un HDMI, comme ça on ne se limite pas aux écrans cathodiques
– Que l'on puisse brancher le câble USB du stick sur évidement le Rpi, mais aussi sur un autre ordinateur
– Qu'on puisse brancher jusqu'à trois autres manettes sur le Rpi Recalbox
– Qu'un bouton permette de basculer le joystick d'un quart de tour pour permettre de jouer aux jeux verticaux à l'horizontale dans le cas où l'on ne peux pas basculer l'écran d'un quart de tour.


Nous avons donc de gauche à droite, sur la façade arrière, l'emplacement du bouton de bascule ¼ de tour, la prise HDMI, la lamelle métallique VGA (qui intégrera la prise audio et la prise alimentation jack), et l'emplacement du Rpi qui laisse l'accès aux 4 prises USB. Il manque pour le moment le trou pour faire sortir le câble USB du circuit manette.

Le matériel :

  • Cette fois je n'ai pas investi dans des fournitures arcade onéreuses Sanwa ou Seimitsu, car l'usage en sera occasionnel.

– J'ai opté pour le célèbre Zippy et des boutons « no-name »
– On dispose aussi d'un câble de déport VGA (une mini-ralonge en somme)
– Un déport mini-HDMI vers HDMI qui intègre aussi un déport USB-C
– Une prise jack femelle audio stéréo
– Une prise jack femelle d'alimentation
– Un énorme dissipateur thermique ventilé qui enserre le Raspberry
– 4 bouts de bois de récupération, préparés à dimensions, constituant le cadre du boîtier
– Un circuit de manette USB qui vient avec ses câbles et ses cosses serties
Ce qui sera au final tellement plus pratique que de tout fabriquer comme je l'ai fait à l'époque

Des lattes de volets, un montant de porte, et une chute non-identifiée.


Lire la suite...

dimanche, 11 juin 2023

Réparation d'une borne Française - Nouveau Panel

Suite de l'épisode précédent :

Il y a 10 ans donc… La borne avait été remise en service pour être fonctionnelle.
Cependant, chaque fois que je la voyais, je me disais qu'elle méritait mieux, notamment pour son panel, ce qui coïncidait avec mon envie de faire des petits trous dans du métal.
Allez, je vais « outer » le truc :P : J'adore la perceuse à colonne, et voici une occasion de m'en servir !


Préparatifs :

  • Premier truc à faire, aller prendre des mesures sur place, et tenter de comprendre comment reposait et était fixé le panel d'origine.


  • Après avoir dessiné un petit plan et réalisé une maquette en carton, j'ai pu confronter la chose afin de vérifier l'exactitude de l'ensemble.



Découpe du métal :

Nous avons pu trouver une plaque d'acier (que je soupçonne galvanisée) qui traînait, de 2 mm d'épaisseur, pile ce qui est requis pour optimiser la rigidité de l'ouvrage !

  • Avec la technique habituelle et une bonne lame de scie, découpe de la plaque pour une largeur de 54,3 cm. On découpera le reste plus tard.





Pliage du métal :

  • Afin de faciliter et guider le pliage artisanal qui va suivre, il faut retirer un peu de matière en pratiquant une rainure, suivant les traits de pliage qui ont étés marqués. Pour ce faire cette mini-tronçonneuse s’avéra très pratique !



Lire la suite...

samedi, 11 mars 2023

IR « Light » Gun avec Arduino (version aboutie) -3-

Suite et fin de l'épisode précédent :

  • Une petite galerie pour commencer, avec un flingue refermé et opérationnel :






La barre infrarouge :

Ou plutôt cette fois-ci, les barres !

  • L'occasion de rappeler que ce ne sont pas deux mais bien de quatre sources de lumière infrarouge dont le système a besoin pour se repérer dans l'espace.

On peut bien entendu utiliser deux Wii Sensors Bar officielles, ou non.
Ou bien partir sur quelque chose d'un peu plus « sur mesure ».
Et devinez-quoi…
Wé on fait ça !

  • On utilise 3 leds IR à souder en série avec une résistance de 10Ω afin de former une des quatre source IR suffisamment puissante :


On obtient ce circuit en calculant à l'aide de cet outil en ligne, ou cet autre pour les caractéristiques de ces leds qui sont : 1,35V @100mA.
J'ai décidé d'alimenter le circuit avec 5V, ici provenant d'un convertisseur DC/DC depuis le 12V, vu qu'une alimentation est prévue pour les solénoïdes des pistolets, autant en profiter.
Mais on pourrait très bien utiliser l'USB d'un ordinateur vu que ce montage ne consomme que 400 mA.

  • La barre est réalisé dans une lamelle de carte plastique de 2 mm d'épais, percé de trous de Ø 5 mm pour accueillir les leds. Ensuite les fils sont soigneusement collés sur la lamelle :


Lire la suite...

- page 1 de 37