{"id":4078,"date":"2019-06-27T14:15:28","date_gmt":"2019-06-27T13:15:28","guid":{"rendered":"https:\/\/telefab.fr\/?p=4078"},"modified":"2026-04-30T17:33:59","modified_gmt":"2026-04-30T15:33:59","slug":"developpement-dune-borne-darcade","status":"publish","type":"projet","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/projet\/developpement-dune-borne-darcade\/","title":{"rendered":"D\u00e9veloppement d&rsquo;une borne d&rsquo;arcade"},"content":{"rendered":"<p>Bonjour \u00e0 tous !<\/p>\n<p>Nous avons aujourd&apos;hui le plaisir de vous pr\u00e9senter la construction d&apos;une borne d&apos;arcade. C&apos;est un projet que nous avons men\u00e9 dans le cadre du Codev (projet Conception et D\u00e9veloppement) en 1\u00e8re ann\u00e9e du cursus ing\u00e9nieur d&apos;IMT Atlantique.<\/p>\n<p>Commen\u00e7ons par regarder cette petite vid\u00e9o qui en quelques secondes vous montre le syst\u00e8me en pleine utilisation par un des groupes d&apos;enfants de l&apos;Amicale La\u00efque de Plouzan\u00e9 \u00e0 qui nous avons fait la d\u00e9monstration.<\/p>\n\n<p>Si cela vous int\u00e9resse d&apos;en savoir un petit peu plus sur la construction de cette borne d&apos;arcade, poursuivez votre lecture.<\/p>\n<p>\u00a0<\/p>\n<p><span style=\"text-decoration: underline;\">R\u00e9sum\u00e9 :<\/span><\/p>\n<p>Alors que fait cette borne ? Et bien en plus de la structure et des jeux qu&rsquo;elle fait fonctionner, nous voulions lui apporter des caract\u00e9ristiques suppl\u00e9mentaires et ainsi cr\u00e9er un objet original et divertissant.<\/p>\n<p>La premi\u00e8re fonctionnalit\u00e9 qui la rend unique est la d\u00e9tection de badge. Le joueur peut avec n&rsquo;importe quel badge RFID se connecter \u00e0 la borne d&rsquo;arcade et avoir son propre compte ! Nous pouvons donc nous connecter avec le badge de l&rsquo;\u00e9cole. La seconde fonctionnalit\u00e9 d\u00e9coule alors de la premi\u00e8re : avoir un compte personnel oui, mais o\u00f9 vont nos donn\u00e9es ? Nous avons d\u00e9cid\u00e9 de stocker toutes les donn\u00e9es des joueurs sur une base de donn\u00e9es SQL. Ainsi d\u00e8s qu&rsquo;un jeu se termine, les scores sont directement envoy\u00e9s, les classements se mettent \u00e0 jour, les statistiques s&rsquo;affinent. Et pour voir tout cela, nous avons finalement d\u00e9velopp\u00e9 un site internet via HTML, CSS et PHP. Nous avons eu la chance d&rsquo;\u00eatre h\u00e9berg\u00e9s par le RESEL (R\u00e9seau des El\u00e8ves). Nous pouvions alors en nous connectant via shh et avec un FTP comme Filezilla cr\u00e9er le site o\u00f9 tous les joueurs se retrouveraient pour d\u00e9couvrir leurs performances ainsi que celles de leurs camarades. A l&rsquo;heure actuelle, vous pouvez encore vous connecter sur\u00a0<a href=\"https:\/\/arcade.codev.resel.fr\/\">https:\/\/arcade.codev.resel.fr\/<\/a> nous esp\u00e9rons que cela restera encore possible pour les ann\u00e9es futures. Le cas \u00e9ch\u00e9ant, merci d&rsquo;apporter une modification \u00e0 ce papier afin d&rsquo;adresser correctement notre site.<\/p>\n<p>&nbsp;<\/p>\n<p>Commen\u00e7ons par vous donner quelques photos de la conception purement mat\u00e9rielle de la borne :<\/p>\n<p>Tout d&rsquo;abord, voyons le plan que nous avons dessin\u00e9 pour conceptualiser le syst\u00e8me :<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/plan_borne.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-4082 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/plan_borne-300x230.jpg\" alt=\"\" width=\"443\" height=\"340\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Voyons maintenant quelques \u00e9tapes de la construction :<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/conception_materiell_borne.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4081\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/conception_materiell_borne-300x154.jpg\" alt=\"\" width=\"497\" height=\"255\" \/><\/a><\/p>\n<div>Lors du d\u00e9coupage, certaines probl\u00e9matiques se sont pr\u00e9sent\u00e9es \u00e0 nous. La principale \u00e9tant le biseautage n\u00e9cessaire pour un assemblage harmonieux et solide de l\u2019ensemble. Pour ce faire, nous avons utilis\u00e9 la<\/div>\n<div>possibilit\u00e9 de mettre un angle sur le plan de travail de la scie \u00e0 chantourner. Cela nous a permis d\u2019obtenir de bon r\u00e9sultats \u00e0 quelques pr\u00e9cisions pr\u00e8s qui ont pu \u00eatre absorb\u00e9es par le pon\u00e7age.<\/div>\n<div>Par ailleurs, l\u2019assemblage a pu \u00eatre fait essentiellement gr\u00e2ce \u00e0 des vis et des anglettes m\u00e9talliques pour renforcer la structure en bois.<\/div>\n<p>Et le r\u00e9sultat est l\u00e0 comme vous avez pu le constater sur la vid\u00e9o de pr\u00e9sentation.<\/p>\n<p>Pour les plus curieux, on poursuit avec la\u00a0partie \u00e9lectronique \u00e0 l&rsquo;int\u00e9rieur de la borne !<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/62237575_309721139909553_3101626077508796416_n.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4080 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/62237575_309721139909553_3101626077508796416_n-145x300.jpg\" alt=\"\" width=\"253\" height=\"523\" \/><\/a><\/p>\n<p>On y retrouve de nombreux \u00e9l\u00e9ments :<\/p>\n<ul>\n<li>Les deux cartes qui centralisent les connections des 2 joysticks et des 15 boutons<\/li>\n<li>Un hub USB pour g\u00e9rer tous nos p\u00e9riph\u00e9riques<\/li>\n<li>Deux cartes Arduino, une pour executer les codes de RFID&#8230; et l&rsquo;autre pour le c\u00f4t\u00e9 esth\u00e9tique avec les nombreuses animations lumineuses qu&rsquo;elle contient.<\/li>\n<li>Une carte m\u00e8re et un \u00e9cran, r\u00e9cup\u00e9r\u00e9s sur un ordinateur qui devait finir \u00e0 la casse !<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Finissons par aborder la communication entre les diff\u00e9rents \u00e9l\u00e9ments de la borne. Voyons tout d&rsquo;abord quel est le petit diagramme SQL que nous utilisons pour structurer notre base de donn\u00e9es :<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/sql.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4083\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/06\/sql-300x203.jpg\" alt=\"\" width=\"491\" height=\"332\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"page\">\n<div class=\"textLayer\">\n<div>Le but final est donc qu\u2019\u00e0 chaque nouveau passage de badge, si ce dernier n\u2019a jamais \u00e9t\u00e9 pass\u00e9, une nouvelle instance de joueur est cr\u00e9\u00e9e. Sa clef primaire est d\u00e9duite de son UID sur son badge IMT (qui est logiquement unique et propre \u00e0 chacun). Ensuite, le joueur a la possibilit\u00e9 de rentrer son pseudonyme qui servira ensuite \u00e0 l\u2019affichage sur notre\u00a0plateforme de statistiques.<\/div>\n<div>Apr\u00e8s cela, le joueur r\u00e9alise une partie et une instance de partie est cr\u00e9\u00e9e \u00e0 l\u2019aide de la classe \u2019Jeu\u2019 o\u00f9 sont r\u00e9f\u00e9renc\u00e9s tous les jeux de la borne, puis de la classe \u2019Score\u2019 o\u00f9 les scores qui viennent d\u2019\u00eatre \u00e9tablis ont \u00e9t\u00e9 stock\u00e9s \u00e0 la fin de la partie, et finalement le joueur est associ\u00e9 \u00e0 la partie gr\u00e2ce \u00e0 la classe \u2019Joueur\u2019 o\u00f9 sont stock\u00e9s tous les UID des personnes ayant d\u00e9j\u00e0 jou\u00e9 aux jeux.<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div>\n<div>Afin d\u2019assurer la communication entre le lecteur RFID et la base de donn\u00e9es, nous utilisons un\u00a0programme python disponible \u00e0 la fin de cet article que nous vous recommandons de lire en m\u00eame temps que la suite pour comprendre les fonctions dont nous allons dor\u00e9navant parler.<\/div>\n<div>Lorsqu\u2019un joueur passe son badge devant le lecteur celui-ci envoie une cha\u00eene de caract\u00e8res via le port s\u00e9rie au PC, la fonction ser.readline() r\u00e9cup\u00e8re alors cette cha\u00eene de caract\u00e8res. Pour s\u2019assurer qu\u2019il n\u2019y a pas<\/div>\n<div>eu de probl\u00e8me lors du transfert serial, on v\u00e9rifie que la cha\u00eene de caract\u00e8res est \u00e0 la bonne longueur. Dans le cas contraire on rappelle la fonction ser.readline() jusqu\u2019\u00e0 obtention d\u2019une cha\u00eene correcte.<\/div>\n<div>On envoie ensuite une requ\u00eate \u00e0 la base de donn\u00e9es pour savoir si le badge est d\u00e9j\u00e0 connu, si oui on r\u00e9cup\u00e8re le pseudo du joueur puis on charge ses scores et on lance l\u2019\u00e9mulateur de jeux d\u2019arcade. Sinon, on demande \u00e0 l\u2019utilisateur un pseudo qu\u2019il peut rentrer en actionnant le joystick, on ins\u00e8re ce nouveau pseudo dans la base de donn\u00e9es et on d\u00e9marre l\u2019\u00e9mulateur Attract\/MAME.<\/div>\n<div>Ainsi \u00e0 chaque d\u00e9but de partie on fait communiquer la technologie RFID avec la base de donn\u00e9es pour r\u00e9cup\u00e9rer les informations relatives \u00e0 l\u2019identit\u00e9 du joueur. Par suite, durant la partie il s\u2019agit de traiter les donn\u00e9es relatives \u00e0 la partie de ce joueur, c\u2019est donc la communication entre l\u2019ordinateur et la base de donn\u00e9es qui intervient.<\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>Lorsqu\u2019une partie se termine sur la borne, notre script python d\u00e9tecte la fermeture de l\u2019\u00e9mulateur gr\u00e2ce \u00e0 la fonction system() qui permet d\u2019appeler la commande SHELL Ubuntu \u2019pgrep\u2019. Ensuite, le script cherche quel fichier de score a chang\u00e9 depuis la derni\u00e8re partie, il dispose pour cela de fichiers txt qui contienne les CRC, identifiants uniques calcul\u00e9s gr\u00e2ce \u00e0 des op\u00e9rations binaires, des fichiers en question : si le nouveau CRC est diff\u00e9rent de l\u2019ancien, alors il faut traduire le fichier de score en un fichier texte gr\u00e2ce au programme<\/div>\n<div>externe \u2019hi2txt\u2019. Le script python parcours ensuite le fichier texte et traduit chaque score en une requ\u00eate MySQL.<\/div>\n<div>Lorsque tout cela est fait, on copie tout les fichiers de scores du joueur dans un dossier personnel pour les sauvegarder.<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Conclusion :<\/span> Voil\u00e0, la pr\u00e9sentation de notre borne d&rsquo;arcade touche \u00e0 sa fin, nous esp\u00e9rons que vous aurez pu comprendre son fonctionnement. Comme promis, vous pouvez retrouver tous les codes utilis\u00e9s, notre rapport d\u00e9taill\u00e9 et quelques vid\u00e9os de d\u00e9monstration sur notre espace cloud dont le lien de t\u00e9l\u00e9chargement est le suivant :\u00a0<a href=\"https:\/\/cloud.imt-atlantique.fr\/index.php\/s\/8jxarR2xwoFzRgT\/download\">https:\/\/cloud.imt-atlantique.fr\/index.php\/s\/8jxarR2xwoFzRgT\/download<\/a><\/p>\n<p>Allez ensuite dans le dossier Telefab et trouvez votre bonheur \ud83d\ude42<\/p>\n<p>Merci d&rsquo;avoir pris le temps de nous lire.<\/p>\n<p>Thomas Claudet pour l&rsquo;\u00e9quipe Codev (Julien Aboudaram, Matthias Prevost, Julien Lantrin, Thomas Claudet).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":4088,"parent":0,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"categories":[15,20],"type_projet":[],"class_list":["post-4078","projet","type-projet","status-publish","has-post-thumbnail","hentry","category-formation","category-projets"],"acf":{"objectifs":"","categorie":false,"fichiers_associes":null},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/4078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/projet"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/4078\/revisions"}],"predecessor-version":[{"id":10483,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/4078\/revisions\/10483"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=4078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=4078"},{"taxonomy":"type_projet","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/type_projet?post=4078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}