SE3 PSE Binome2023-2

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

Sujet : Manette de jeu

Cahier des charges

Concevoir une manette de jeu vidéo, afin de pouvoir jouer à Space Invader, codé en informatique. Utilisation d'au moins 3 boutons poussoirs, 2 pour les déplacements à gauche, à droite, et 1 pour pouvoir tirer des missiles sur les monstres. Utilisation de LEDs afin de savoir le nombre de vies restant à l'utilisateur.

Lien GIT

https://archives.plil.fr/sdeparis/projet_manette_sd_ah.git

Partie électronique

Kicad

Schématique et routage

Schématique manette
Routage PCB

Lors du routage, n'ayant jamais réalisé de carte auparavant, nous n'avions pas conscience des faibles dimensions de cette dernière. Par conséquent, les boutons sont très rapprochés, ce qui ne facilite pas leur utilisation.

Nous avons également ajouté des vias afin d'uniformiser le plan de masse.

Fichier Gerber

Visualisation du PCB

Soudure

PCB sans composants

Carte PCB

Soudure des principaux composants

Principaux composants soudés sur la carte
Principaux composants soudés sur la carte

De plus, nous avons soudé les boutons poussoirs sur le dessus de la carte, sans tenir compte du fait qu'ils étaient traversants.

Partie programmation

Implémentation d'un programme en C pour allumer les LEDs d'un PCB

Dans cette partie nous avons tester notre programme visant à faire clignoter les leds sur une carte des étudiants de l'année dernière.

#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>

int main(){   
  CLKSEL0 = 0b00010101;   // sélection de l'horloge externe
  CLKSEL1 = 0b00001111;   // minimum de 8Mhz
  CLKPR = 0b10000000;     // modification du diviseur d'horloge (CLKPCE=1)
  CLKPR = 0;              // 0 pour pas de diviseur (diviseur de 1)
  DDRD |=0x03;            // car on souhaite déclarer en sortie les ports 0 et 1 ce qui correspond à 3 en hexa
  while(1){
    PORTD ^=0x03;       // le xor permet d'allumer et éteindre les leds successivement
    _delay_ms(1000);    // tps en ms
  }
  return 0; 
}

Détection du mode DFU sur notre carte

Utilisation de la carte Arduino Uno afin de détecter le mode DFU

Utilisation arduino
Utilisation arduino pour détecter le mode dfu
mode dfu détecté

Initialisation de notre carte

Programmation des leds

programme leds

Programmation des boutons

programmation boutons
programmation boutons

LUFA

Modification de la LUFA téléchargée en version low level, qui est la bibliothèque USB permettant de communiquer entre le PC et la manette.

En premier lieu, nous avons modifié les fichiers minimal.c et descriptor.c afin que la manette soit détectée en mode DFU.

Pour tester les programmes sur notre carte, on vérifie d'abord que la carte est bien en mode DFU à l'aide de la commande lsusb puis on exécute ensuite le programme à l'aide de la commande make.

Joystick

Afin de pouvoir déplacer notre vaisseau sur le jeu Space invaders, nous avons besoin des déplacements en x à gauche et à droite de l'écran. Pour se déplacer à gauche, on utilise le premier bouton SW1 et pour aller à droite, on utilise le dernier bouton SW4.

Pour tirer des missiles sur les monstres, nous avons besoin besoin d'appuyer sur le deuxième bouton poussoir SW2.


Nous avons modifié le fichier descriptor.c afin de permettre à la carte d'être détectée en tant que joystick.Afin que les boutons soient détectés comme étant des joysticks, on déclare les boutons en tant qu'entrées puis on attribue à chaque boutons sa fonction (déplacement ou tir).

Déclaration boutons en sorties
Déclaration boutons en sorties
Fonctions des boutons
Fonctions des boutons