Table des matières:

Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade : 6 étapes
Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade : 6 étapes

Vidéo: Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade : 6 étapes

Vidéo: Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade : 6 étapes
Vidéo: Wi-Fi Hacking: Program an Arduino to scream when NASA employees are nearby 2024, Novembre
Anonim
Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade
Jammarduino DUE - Interface DIY PC vers Jamma pour armoires d'arcade

Cette instructable vous montrera comment créer un bouclier simple pour Arduino DUE pour interfacer une véritable machine d'arcade avec un connecteur CRT et jamma basse résolution à votre PC.

Les principaux objectifs du bouclier sont:

- pour amplifier le signal vidéo provenant de la carte vidéo (tension trop faible pour un véritable moniteur CRT Arcade)

- pour protéger votre moniteur CRT basse résolution des signaux de synchronisation horizontale trop haute fréquence

- pour "traduire" les pressions sur les boutons du panneau de commande d'arcade en quelque chose que le PC peut gérer

Je vais vous montrer comment étendre l'utilisation de l'interface pour contrôler les roues et les spinners Arcade Racing.

Remarque: le shield NE force PAS le signal de synchronisation vidéo vers les basses fréquences: vous avez besoin d'un logiciel spécifique pour cela. Je vous suggère d'utiliser des emudrivers CRT ou Soft15KHz.

Étape 1: Matériel

Je suppose que vous avez une station de soudure et de l'étain à la main et que vous savez comment les utiliser. Étant donné que l'amplificateur vidéo est un SMD avec un pas de 0,65 mm, je vous suggère d'acheter du flux de soudure pour aider à souder ce microbe. J'ai utilisé un stylo Rosing Mildly Activated (RMA) "sans nettoyage" bon marché avec d'excellents résultats.

L'interface est composée de:

- 1x carte microcontrôleur Arduino DUE

- 1x amplificateur vidéo THS7374

- 1x adaptateur TSSOP14 vers DIP14

- 1x amplificateur audio

- 1x touche jamma

- 1x planche prototype 5x7 cm, double face

- 1x diode 1N4148

- 7x résistances 1Kohm

- 1x résistance 820 ohms

- 3 résistances 220 ohms

- 1x strip line, pas de 2,54 mm

- 1x câble VGA

- 1x câble audio

Étape 2: Schémas

Schémas
Schémas

Voici un schéma coloré de l'ensemble du projet. Pas si orthodoxe, mais plus facile à suivre, je l'espère.

Les câblages sont aussi simples qu'ils en ont l'air:

- les lignes de couleur partent du connecteur PC VGA vers l'amplificateur vidéo; une résistance de 1Kohm à la terre abaisse le courant à l'entrée de l'amplificateur vidéo. Du côté de la sortie, une résistance série abaisse le courant vers le tube cathodique d'arcade.

- la ligne de synchronisation est en quelque sorte plus "complexe": la synchronisation séparée du VGA est d'abord composée, puis abaissée par un diviseur de tension pour respecter les spécifications Arduino DUE (logique 3.3V). Le diviseur de tension est calculé en supposant un signal de synchronisation de 5 V.

- l'amplificateur vidéo (THS7374) peut être alimenté à 3,3 V ou 5 V; étant donné que l'alimentation à 5V permet une plus large gamme de tensions/signaux d'entrée et que le THS7374 peut être contrôlé par 3,3V même s'il est alimenté à 5V, j'ai opté pour le 5V.

- la masse vidéo, la masse arduino DUE, la masse THS7374 et la masse du connecteur jamma sont court-circuitées.

- Les lignes Arduino DUE 5V et Jamma 5V NE DOIVENT PAS ÊTRE EN COURT-CIRCUIT.

- NE PAS extraire l'ampli audio du câble USB: vous avez besoin d'une source externe pour cela en raison des limites de courant (c'est-à-dire le PC ATX PSU). En faisant cela, vous endommagerez votre port USB ou même votre PC.

Connecteur VGA: un mot d'avertissement

J'ai récemment eu l'occasion de mettre à jour le PC utilisé avec mon jammarduino DUE. Même si je l'avais déjà testé avec deux PC différents, ils utilisaient tous les deux des cartes ATI de la même famille (ATI 9250 et 9550). Le nouveau PC était équipé d'un HD5750 avec une seule sortie analogique DVI (pas de VGA). Cela m'a obligé à utiliser un adaptateur (passif) DVI vers VGA. Eh bien, après quelques difficultés, j'ai remarqué que le câble VGA connecté à l'adaptateur DOIT avoir uniquement la terre connectée à la broche 5 du connecteur VGA pour fonctionner, pas les broches 6 à 10 comme indiqué dans la plupart des schémas sur le Web. Gardez cela à l'esprit au cas où vous ne pourriez voir aucun signal de synchronisation de votre carte vidéo.

Étape 3: Esquisse/Code

Esquisse/Code
Esquisse/Code

Vous devez d'abord installer Arduino IDE; vous devez également installer le SAM Cortex M3 Core (non présent par défaut). Enfin et surtout, installez les pilotes Arduino DUE. Reportez-vous au didacticiel officiel "Mise en route avec Arduino Due" pour obtenir les informations les plus récentes.

Le croquis que vous devez télécharger sur votre Arduino DUE est joint ici. Décompressez et chargez "jammarduinoDUE.ino" dans votre IDE Arduino, puis téléchargez-le sur arduino DUE via le port de "programmation". Une fois le croquis téléchargé avec succès, déconnectez le câble USB du port "programmation" et connectez Arduino DUE via le port "USB natif", sinon la partie d'entrée du code ne fonctionnera pas.

Fondamentalement, Arduino DUE mesure la fréquence de synchronisation et désactive l'amplificateur vidéo lorsque la synchronisation est trop élevée pour un tube cathodique basse résolution. Arduino DUE gère également les entrées provenant du panneau de commande, en envoyant les clés MAME par défaut à la pression d'un bouton spécifique. Une fonction shift (activée en maintenant le bouton P1 START enfoncé) est également incluse, à l'instar des interfaces commerciales.

Dans le tableau, le keymap par défaut. Vous pouvez modifier la carte de touches par défaut ou ajouter des boutons à votre guise directement sur le croquis facilement.

Par exemple, si vous souhaitez attribuer des touches de contrôle du volume à votre émulateur, vous devez d'abord définir ces touches (disons le clavier "+" pour augmenter le volume et le clavier "-" pour diminuer le volume) dans votre menu de touches emu; puis ajoutez la touche décalée aux boutons auxquels vous souhaitez affecter l'augmentation ou la diminution du volume. Disons que je veux augmenter le volume en appuyant sur la touche Shift et le bouton Player 1 3. Je vais modifier la ligne

{26, HAUT, 0, 180, 180}, //espace - P1 B3

à

{26, HAUT, 0, 180, 223}, //espace - P1 B3 (+)

Ce "223" est le code de caractère ASCII pour le clavier "+".

Je vous laisse découvrir comment attribuer le "-" (ou ce que vous préférez) à la fonction "volume bas" comme exercice (Indice: code ASCII 222):)

Veuillez garder à l'esprit que dans MAME, vous ne pouvez affecter que le volume du mode de service, pas le volume d'émulation général; cela signifie que si la carte émulée ne permet pas le contrôle du volume logiciel, le volume ne sera pas affecté.

Étape 4: Qu'en est-il du décalage d'entrée ?

J'ai fait quelques tests pour voir combien de lag le code pouvait introduire; eh bien, en envoyant 3 boutons pressés en même temps, une boucle complète prend environ 4 ms pour être exécutée, donc bien moins que les 33 ms qu'une trame dure à 30 FPS.

Étape 5: Qu'en est-il des armoires Jamma Racing ?

Qu'en est-il des armoires Jamma Racing ?
Qu'en est-il des armoires Jamma Racing ?

Roue de potentiomètre

Si votre armoire est une armoire de course, il est très probable que la roue soit à base de potentiomètre (vous pouvez voir un potentiomètre de 5Kohm à l'arrière du panneau de commande).

Tout d'abord, téléchargez et installez la bibliothèque Joystick (à la date d'aujourd'hui, seule la version 1 de la bibliothèque serait compatible avec arduino DUE, mais cela reste une très bonne bibliothèque).

Ensuite, ajoutez les quelques lignes qui suivent au croquis de l'étape 4 pour manipuler facilement la roue (où placer les lignes vous est laissé en exercice…)

#comprendre

int deadZone = 0;

void setup() {

Joystick.begin();}

boucle vide() {

int readPot = analogRead(A3);

int wheelPos = map(readPot, 0, 1023, -127, 127);

if(wheelPos>deadZone || wheelPos<-deadZone){ Joystick.setXAxis(wheelPos);}

else {Joystick.setXAxis(0);}

}

Comme vous pouvez le voir, vous pouvez définir une zone morte si nécessaire (dans une bonne roue d'arcade qui fonctionne, il est préférable de la mettre à zéro).

Le câblage d'un potentiomètre à Arduino DUE est simple: les broches latérales du potentiomètre vont à +3,3 V et GND, la broche d'essuie-glace à un port analogique arduino DUE (voir la photo pour référence). J'ai défini ici la broche analogique 3 (A3) comme entrée pour l'essuie-glace du potentiomètre de roue, mais vous pouvez définir la broche analogique qui correspond le mieux à vos besoins.

PS: savez-vous que les pédales dans les armoires de course sont souvent contrôlées par un potentiomètre, alors que techniquement les roues et les pédales sont le même appareil avec une forme différente ? Cela signifie que le code ici pourrait également être utilisé pour contrôler de véritables pédales d'arcade;)

Roue optique

Si votre roue est optique, elle peut également être facilement manipulée, encore une fois, avec une petite modification du croquis de départ.

Un brochage très courant pour les encodeurs optiques Arcade (tourneurs Taito, encodeurs de roues Atari, etc.) est:

1. SORTIE OptoA

2. +5V

3. GND

4. SORTIE OptoB

Connectez 2. et 3. à Arduino DUE 5V et GND, et 1. et 4. à n'importe quelle broche numérique que vous aimez en faisant attention qu'un diviseur de tension est nécessaire pour abaisser la sortie 5V de l'encodeur optique à l'arduino DUE 3,3V peut gérer. N'envoyez pas de sorties OptoA et/ou OptoB 5V directement aux broches d'entrée de votre arduino DUE ou vous ferez probablement frire ces entrées ou même toute la carte. Tu étais prévenu.

Dans l'exemple de croquis ici, j'utiliserai la broche numérique 2 et la broche numérique 3 comme sortie optique A et sortie optique B.

#comprendre

booléen optA_state = HAUT;

int xMovAxe = 2;

void setup() {

pinMode (2, INPUT_PULLUP); //OptA

pinMode (3, INPUT_PULLUP); //OptB

Souris.begin();

}

boucle vide() {

if (optA_state == HAUT && digitalRead(2) == BAS){

optA_state=!optA_state;

if(digitalRead(3) == HIGH){ Mouse.move(xAxisMov, 0, 0);} else{Mouse.move(-xAxisMov, 0, 0);} } }//fin de boucle

Il s'agit d'un codage optique à faible résolution 1X Counting. C'est plus que suffisant pour les applications Arcade, mais vous pouvez facilement augmenter la résolution en ajoutant une ligne de code.

PS: savez-vous que les roues d'arcade optiques et les spinners d'arcade sont techniquement le même appareil avec une forme différente ? Savez-vous que les trackballs sont techniquement un spinner à 2 axes ? Cela signifie que le code ici pourrait être utilisé pour contrôler de véritables spinners d'arcade et, avec peu de modifications faciles, également des trackballs;)

Étape 6: Une photo, ou ça ne s'est pas produit

Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !
Une photo, ou ça ne s'est pas produit !

Voici quelques photos du bouclier que j'ai fait. Ce n'est pas un travail de haut niveau (je parie que je ne suis pas un pro), mais c'est 100% rock dans mon jamma Arcade Cabinet !

Conseillé: