Projet IMA3 P6, 2017/2018, TD2, SEEGA

De Wiki de Projets IMA

Projet IMA3-SC 2017-2018 : Projet SEEGA

Projet informatique

Description du projet

Le projet consiste en un jeu de plateau connecté. Il permettrait à 2 personnes de jouer l'une contre l'autre (le joueur 1 sur le vrai plateau et le joueur 2 sur ordinateur).

Pour faire une partie de Seega, il faut un plateau de 5x5 cases, 12 pions pour le joueur 1, 12 pions pour le joueur 2. Le but du jeu est de capturer le maximum de pions de l'adversaire.

>Au début de la partie, chaque joueur dispose à tour de rôle 2 de ses pions sur le plateau sur les cases de son choix, sauf case centrale.
>Une fois les 24 pions placés, les joueurs bougent à tour de rôle un de leurs pions respectifs sur le plateau. Chaque pièce peut être déplacée verticalement ou horizontalement et obligatoirement sur une case contiguë.
>Un joueur capture un pion adverse lorsqu'il parvient à l'encadrer avec 2 de ses pions suite à un déplacement. Le pion est donc éliminé du plateau.
>La partie se termine quand l'un des joueurs n'a plus de pions ou lorsque les 2 séries de pions forment des barrières qui empêchent d'être capturés. Le gagnant est alors celui à qui il reste le plus de pièces sur le plateau.

Cahier des charges

Titre du sujet

Projet SEEGA

Description du système

Nous avons comme objectif de détecter les pions du joueur 1 grâce à un capteur de ligne (pour transmettre leurs positions à l'ordinateur) et de simuler les pions du joueur 2 par des leds sous le plateau en plexiglas, allumées aux cases en question.

Matériel nécessaire

  • 1 Arduino
  • 3 registres à décalage
  • 25 leds blanches
  • 25 capteurs de ligne
  • 1 plaque de plexiglass 30*30cm de 3mm d'épaisseur
  • 1 plaque de bois usinable pour la découpe du coffre du plateau et des pions
  • 12 pions noirs circulaires environ 4 cm de diamètre (découpeuse laser)
  • 12 gommettes réfléchissantes
  • 25 résistances 180 Ohm


Séance 1

Pendant cette première séance, nous avons choisi notre sujet et défini les besoins électroniques et informatiques. Nous nous sommes tout de suite mis d'accord pour réaliser un jeu de société entre un ordinateur et un plateau de jeu réel.
Nous avons alors séparé les tâches et partagé le travail à effectuer.

-Du côté informatique, nous avons commencé la configuration de la Raspberry Pi pour permettre la liaison série.

Schéma de l'exemple à réaliser sur Altium

-Du côté électronique, nous avons principalement dédié cette séance à la découverte du FPGA. Au travers d'un tutoriel, nous avons créé un compteur sur Altium et dont la valeur s'affiche sur des LED. Nous nous somme alors familiarisé avec cette carte électronique et avec son fonctionnement.


Durant la dernière heure, nous nous sommes intéressés à nos capteurs de ligne QRE1113 [1]:
Capteur de ligne QRE1113

N'ayant pas trouvé de suite la datasheet, nous avons alors effectué différents tests afin de déterminer les caractéristiques et le fonctionnement de ces modules. Chaque composant est alors alimenté sous une tension de 5V, une led infrarouge émet un rayonnement qui revient vers un capteur si une surface réfléchissante est présente. Le capteur peut alors renvoyer entre 0V et 5V: 0V quand il y a réflexion totale et 5V s'il n'y a aucun obstacle. Afin de maximiser l'efficacité du capteur il nous faut donc une surface la plus réfléchissante possible à disposer sous nos pions. La distance optimale entre récepteur et la surface réfléchissante est de 1mm. Il nous faudra donc un plexiglas peu épais.




Séance 2

Entre les deux premières séances, nous avons dessiné le circuit électronique et codé en Javascript le jeu de Seega, en y ajoutant un affichage graphique.

-Du côté informatique, nous avons continué et finalisé la configuration de la Raspberry Pi. On peut désormais s'y connecter via ssh, et même en wi-fi.

-Du côté électronique, dans un premier temps nous nous sommes intéressés à réaliser une matrice de led. Nous avons trouvé 2 solutions permettant de la concevoir:

Schéma solution 1 Matrice Leds

> La première solution nécessite 5 résistances, 25 leds et occupe 10 pins de l'arduino. 5 pins servent à contrôler chaque ligne (en rose sur l'image), et les 5 autres les colonnes (en bleu). Pour allumer une seule led, par exemple la première il suffit donc de mettre tous les pins "ligne" à l'état LOW sauf la celui de la première ligne en HIGH. A cette étape toute la ligne s'allume, pour palier à cela on laisse notre pin "colonne" correspondant à l'état LOW, et les autre en HIGH. Maintenant pour allumer plusieurs led, on utilisera la persistance rétinienne. C'est à dire que l'on va allumer et éteindre chaque led de manière très rapide. L’œil lui ne va pas percevoir ce clignotement et verra les leds allumées.


Schéma 74HC595

> La deuxième solution consiste à utiliser les registres à décalage 74HC595 qui n'occupent que 3 pis de l'arduino. Vcc : alimentation 6V Max.
QA à QH: sorties Shift Register.
QH': renvoie la même valeur que QH.
SER (Serial): entrée pour le prochain pin qui sera déplacé.
SRCLK (Serial Clock): déplace le registre d'un rang à droite lorsqu’il est mis à 1.
RCLK (Register Clock): mettre à 1 pour valider les modfications.
SRCLR (Serial Clear): le passage de 1 à 0 vide le registre.
OE (Output Enable): ce pin permet d’activer la sortie lorsqu’il est sur la masse et la désactive lorsqu’il est en High.

Schéma principe registre à décalage

Le composant 74HC595 dispose de 8 pins de sortie (Qa, Qb, Qc, Qd, Qe, Qf, Qg, Qh) qui peuvent soit avoir la valeur 0 (Low) soit la valeur 1 (High). Lorsque l’on met le pin SRCLK (Serial Clock) en valeur 1, alors les 8 pins de sorties se décalent vers la droite et le premier pin Qa prend la valeur appliquée à SER. La valeur anciennement appliquée à Qh est alors écrasée. Ainsi en 8 étapes nous pouvons enregistrer l'état des 8 leds à contrôler puis valider les modifications en passant RCLK à l'état HIGH.

Registres à décalages chainés

A présent nous voulons contrôler non pas 8 mais 16 led. Nous allons donc chaîner 2 registres à décalage. Pour cela il suffit de relier le QH' du premier 74HC595 au SER du second. Ainsi le dernier bit, au lieu d'être écrasé, est récupéré par le deuxième registre. Ainsi nous pouvons facilement chaîner plusieurs 74HC595 comme présenté sur l'image.


Nous retenons donc cette solutions moins gourmande en pins de l'arduino. 3 Shift Registers permettront de contrôler 3*8=24 leds. La 25ème led sera directement contrôlée par un 4ème pin.





Nous avons aussi commencé à réaliser la partie du montage électronique à faire sur Altium.

Séance 3

Schéma de la partie FPGA

Partie électronique:

  • FPGA:

Nous avons essayé de corriger certains problèmes concernant le schéma sur Altium. En effet, les ports de sortie et le multiplexeur empêchaient la compilation. Nous n'avons malheureusement pas réussi à les résoudre.

Schéma du circuit électronique sur Frizing
  • PCB:

Cette séance a été dédiée à la conception du circuit électronique du plateau de jeu afin de rendre les branchements plus faciles. Pour cela nous avons utilisé le logiciel frizing qui permet d'un côté de réaliser un schéma du montage, et d'un autre de dessiner la carte. La tâche s'est avérée plus complexe que nous ne le pensions au vu de la disposition et du nombre de composants en jeu. Il a fallu recommencer plusieurs fois et continuer le travail à la maison pour en arriver au résultat final et envoyer la carte électronique en fabrication.

Partie informatique:

Ajout du fichier html contenant le jeu sur la Raspberry Pi. On peut désormais y jouer via internet en se connectant en wifi à la Raspberry. Divers essais pour permettre la communication entre la Raspberry et l'Arduino mais sans réussite.

Logo de notre version du Seega

Partie maquette:

Avant la séance nous avons réfléchi et créé le logo pour notre projet. Nous avons alors réservé la découpeuse laser dans le but de graver et de fabriquer les jetons pour notre plateau.








Séances complémentaires

Afin de finaliser notre travail, nous nous sommes servis des machines du Fabricarium pour découper les pièces mais aussi le plateau de jeu en plexiglas. Nous avons également soudé nos capteurs de ligne et nos diodes qui indiquent les positions des pions du joueur sur ordinateur. Nous sommes revenus en salle informatique pour réussir à faire communiquer la Raspberry à l'Arduino en utilisant un serveur : le websocket. Après plusieurs heures, ils réussissent à s’échanger des signaux correctement et le jeu peut alors prendre forme.

Bilan

Activité électronique