Développement d’une borne d’arcade

Envoyé par le 27 Juin 2019

Bonjour à tous !

Nous avons aujourd’hui le plaisir de vous présenter la construction d’une borne d’arcade. C’est un projet que nous avons mené dans le cadre du Codev (projet Conception et Développement) en 1ère année du cursus ingénieur d’IMT Atlantique.

Commençons par regarder cette petite vidéo qui en quelques secondes vous montre le système en pleine utilisation par un des groupes d’enfants de l’Amicale Laïque de Plouzané à qui nous avons fait la démonstration.

Si cela vous intéresse d’en savoir un petit peu plus sur la construction de cette borne d’arcade, poursuivez votre lecture.

 

Résumé :

Alors que fait cette borne ? Et bien en plus de la structure et des jeux qu’elle fait fonctionner, nous voulions lui apporter des caractéristiques supplémentaires et ainsi créer un objet original et divertissant.

La première fonctionnalité qui la rend unique est la détection de badge. Le joueur peut avec n’importe quel badge RFID se connecter à la borne d’arcade et avoir son propre compte ! Nous pouvons donc nous connecter avec le badge de l’école. La seconde fonctionnalité découle alors de la première : avoir un compte personnel oui, mais où vont nos données ? Nous avons décidé de stocker toutes les données des joueurs sur une base de données SQL. Ainsi dès qu’un jeu se termine, les scores sont directement envoyés, les classements se mettent à jour, les statistiques s’affinent. Et pour voir tout cela, nous avons finalement développé un site internet via HTML, CSS et PHP. Nous avons eu la chance d’être hébergés par le RESEL (Réseau des Elèves). Nous pouvions alors en nous connectant via shh et avec un FTP comme Filezilla créer le site où tous les joueurs se retrouveraient pour découvrir leurs performances ainsi que celles de leurs camarades. A l’heure actuelle, vous pouvez encore vous connecter sur https://arcade.codev.resel.fr/ nous espérons que cela restera encore possible pour les années futures. Le cas échéant, merci d’apporter une modification à ce papier afin d’adresser correctement notre site.

 

Commençons par vous donner quelques photos de la conception purement matérielle de la borne :

Tout d’abord, voyons le plan que nous avons dessiné pour conceptualiser le système :

 

Voyons maintenant quelques étapes de la construction :

Lors du découpage, certaines problématiques se sont présentées à nous. La principale étant le biseautage nécessaire pour un assemblage harmonieux et solide de l’ensemble. Pour ce faire, nous avons utilisé la
possibilité de mettre un angle sur le plan de travail de la scie à chantourner. Cela nous a permis d’obtenir de bon résultats à quelques précisions près qui ont pu être absorbées par le ponçage.
Par ailleurs, l’assemblage a pu être fait essentiellement grâce à des vis et des anglettes métalliques pour renforcer la structure en bois.

Et le résultat est là comme vous avez pu le constater sur la vidéo de présentation.

Pour les plus curieux, on poursuit avec la partie électronique à l’intérieur de la borne !

 

On y retrouve de nombreux éléments :

  • Les deux cartes qui centralisent les connections des 2 joysticks et des 15 boutons
  • Un hub USB pour gérer tous nos périphériques
  • Deux cartes Arduino, une pour executer les codes de RFID… et l’autre pour le côté esthétique avec les nombreuses animations lumineuses qu’elle contient.
  • Une carte mère et un écran, récupérés sur un ordinateur qui devait finir à la casse !

 

Finissons par aborder la communication entre les différents éléments de la borne. Voyons tout d’abord quel est le petit diagramme SQL que nous utilisons pour structurer notre base de données :

 

Le but final est donc qu’à chaque nouveau passage de badge, si ce dernier n’a jamais été passé, une nouvelle instance de joueur est créée. Sa clef primaire est déduite de son UID sur son badge IMT (qui est logiquement unique et propre à chacun). Ensuite, le joueur a la possibilité de rentrer son pseudonyme qui servira ensuite à l’affichage sur notre plateforme de statistiques.
Après cela, le joueur réalise une partie et une instance de partie est créée à l’aide de la classe ’Jeu’ où sont référencés tous les jeux de la borne, puis de la classe ’Score’ où les scores qui viennent d’être établis ont été stockés à la fin de la partie, et finalement le joueur est associé à la partie grâce à la classe ’Joueur’ où sont stockés tous les UID des personnes ayant déjà joué aux jeux.
Afin d’assurer la communication entre le lecteur RFID et la base de données, nous utilisons un programme python disponible à la fin de cet article que nous vous recommandons de lire en même temps que la suite pour comprendre les fonctions dont nous allons dorénavant parler.
Lorsqu’un joueur passe son badge devant le lecteur celui-ci envoie une chaîne de caractères via le port série au PC, la fonction ser.readline() récupère alors cette chaîne de caractères. Pour s’assurer qu’il n’y a pas
eu de problème lors du transfert serial, on vérifie que la chaîne de caractères est à la bonne longueur. Dans le cas contraire on rappelle la fonction ser.readline() jusqu’à obtention d’une chaîne correcte.
On envoie ensuite une requête à la base de données pour savoir si le badge est déjà connu, si oui on récupère le pseudo du joueur puis on charge ses scores et on lance l’émulateur de jeux d’arcade. Sinon, on demande à l’utilisateur un pseudo qu’il peut rentrer en actionnant le joystick, on insère ce nouveau pseudo dans la base de données et on démarre l’émulateur Attract/MAME.
Ainsi à chaque début de partie on fait communiquer la technologie RFID avec la base de données pour récupérer les informations relatives à l’identité du joueur. Par suite, durant la partie il s’agit de traiter les données relatives à la partie de ce joueur, c’est donc la communication entre l’ordinateur et la base de données qui intervient.
Lorsqu’une partie se termine sur la borne, notre script python détecte la fermeture de l’émulateur grâce à la fonction system() qui permet d’appeler la commande SHELL Ubuntu ’pgrep’. Ensuite, le script cherche quel fichier de score a changé depuis la dernière partie, il dispose pour cela de fichiers txt qui contienne les CRC, identifiants uniques calculés grâce à des opérations binaires, des fichiers en question : si le nouveau CRC est différent de l’ancien, alors il faut traduire le fichier de score en un fichier texte grâce au programme
externe ’hi2txt’. Le script python parcours ensuite le fichier texte et traduit chaque score en une requête MySQL.
Lorsque tout cela est fait, on copie tout les fichiers de scores du joueur dans un dossier personnel pour les sauvegarder.

 

Conclusion : Voilà, la présentation de notre borne d’arcade touche à sa fin, nous espérons que vous aurez pu comprendre son fonctionnement. Comme promis, vous pouvez retrouver tous les codes utilisés, notre rapport détaillé et quelques vidéos de démonstration sur notre espace cloud dont le lien de téléchargement est le suivant : https://cloud.imt-atlantique.fr/index.php/s/8jxarR2xwoFzRgT/download

Allez ensuite dans le dossier Telefab et trouvez votre bonheur 🙂

Merci d’avoir pris le temps de nous lire.

Thomas Claudet pour l’équipe Codev (Julien Aboudaram, Matthias Prevost, Julien Lantrin, Thomas Claudet).

 

Laisser une réponse

Votre adresse e-mail ne sera pas publiée.