« SE3 PSE Binome2023-8 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(42 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Fichier:Schematic manette p1 0311.png|vignette]]
=Préambule=
[[Fichier:Schematic manette cikad p2 0311.png|vignette]]
 
[[Fichier:Routage manette kicad 0311.png|vignette]]Projet KiCAD : [[Fichier:SE3-man-TEPELI-WACQUET.7z]]
Ce projet consiste à réaliser une manette de jeu, pour cela nous allons utiliser un micro-contrôleur : L'Atmega16u4.
 
Pour y parvenir, nous devons :
 
- Concevoir un PCB qui servira de manette
 
- Souder les différents composants
 
- Créer un programme qui envoie des données depuis la manette au PC (pour jouer)
 
- Créer un programme qui envoie des données depuis le PC à la manette (en l'occurrence, allumer les LEDs en fonction du nombre de vies restantes)
 
 
Lien de l'archive GiT: [https://archives.plil.fr/itepeli/Manette_1er_SystE.git Archive GIT]
 
=Partie KICAD=
 
 
Projet KiCAD : [[Fichier:SE3-man-TEPELI-WACQUET.zip]]
 
Nous avons pour cela à disposition une archive Kicad à compléter.
 
Nous avions à disposition des connecteurs ISP pour pouvoir bootloader le micro-contrôleur, un connecteur ISP pour pouvoir téléverser nos codes et alimenter la carte, des boutons de Reset et HWB pour pouvoir réinitialiser la carte et permettre de téléverser de nouveaux programmes, ainsi que des boutons et des LEDs pour jouer au jeu.
 
Schématique KICAD :
[[Fichier:Schematic manette cikad p2 0311.png|vignette|Capture d'écran du schématique de l'ATMega.|500x500px|gauche]]
[[Fichier:Schematic manette p1 0311.png|vignette|Capture d'écran du schématique des autres composants.|centré|815x815px]]
Routage KICAD et Fichier SVG :
 
[[Fichier:Routage manette kicad 0311.png|vignette|Capture d'écran du routage de la carte.|435x435px|gauche]]
[[Fichier:MANROUT0904.svg|vignette|Fichier SVG du routage de la carte.|543x543px|centré]]
 
 
=Soudure =
On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.
 
On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.
 
Ensuite le port USB et on a vérifié si l'Atmega est alimenté.
 
Suite à cela, on a soudé les boutons HWB et RESET pour pouvoir se mettre en mode DFU.
 
Enfin, les LEDs et les boutons de jeu.
 
Photographie lors de la soudure :
[[Fichier:ABBD5287-E8A9-42DC-AECC-35DDBC979780.jpg|vignette|Photo prise durant la soudure des composants.|500x500px|centré]]
[[Fichier:Photo carte soudé .jpg|vignette|¨Photo de la carte soudée]]
 
= Intégration dans le jeu =
==Bootloading==
Avoir de pouvoir téléverser de codes, nous avons dû bootloader la carte via le connecteur ISP et une carte Arduino.
 
==Implémentation des boutons==
Ensuite grâce au dossier ressource "Joystick", nous avons pu contrôler le vaisseau de SpaceInvaders.
 
Pour que notre carte soit considérée comme un Joystick, il faut qu'elle comporte 2 axes de déplacement, les boutons ne sont pas obligatoires.
 
Notre carte ne comporte que 4 boutons, nous avons décidé d'en utiliser 2 en tant que boutons et 2 en tant qu'axe X, l'axe Y existe mais n'est pas implémentée, nous avons complétement supprimé l'axe Z.
 
Nous avons seulement eu besoin de modifier le Makefile pour pouvoir cibler la carte bootloadée et les conditions de modification des valeurs des axes et des boutons.
[[Fichier:Screenshot from 2024-06-10 18-05-04.png|centré|vignette|Capture d'écran du code d'implémentation du Joystick|611x611px]]
 
Lors de notre conception, nous avons relié les boutons au ground, nous avons donc programmer en inverse pour utiliser correctement nos boutons.
 
Nous avons testé ce code grâce à l'outil : jstest-gtk, qui nous montre de façon visuel l'état des axes et des boutons.
[[Fichier:VID 20240610 175557.mp4|centré|vignette|Vidéo des tests des boutons avec jstest-gtk]]
 
 
Nous avons ensuite modifié le code d'un de nos SpaceInvaders, grâce à un tutoriel, pour nous permettre d'utiliser la manette.[[Fichier:VID 20240607 143829.mp4|centré|vignette|Démonstration de l'utilisation de la manette]]
 
==Implémentation des LEDs==
Pour cette partie, nous avons utilisé et complété le dossier ressource "Minimal" et la libusb .
 
Nous avons d'abord essayer de piloter les LEDs directement avec les registres.
 
On positionne les pins connectés aux LEDs en Output :<syntaxhighlight>
DDRF &= 0b11001100;
</syntaxhighlight>Ensuite nous envoyons soit des 1 ou des 0 pour respectivement éteindre ou allumer les LEDs.
 
Lors de la conceptions, nous avons connectés nos LEDs au VCC, le pilotage des LEDs se fait aussi en inverse.
 
Par exemple :<syntaxhighlight lang="c">
PORTF &= 0b11001100;
_delay_ms(1000);
PORTF |= 0b00110011;
</syntaxhighlight>
 
Ce code allume les LEDs pendant 1 seconde puis les éteint , nous utilisons des masques pour ne pas influencer sur les autres éléments connectés au registre F.
 
 
 
Nos LEDs sont connectées au Registre F, ce registre pose problème pour contrôler nos LEDs, nous avons donc dû  utiliser le morceau de code suivant :<syntaxhighlight lang="c">
MCUSR &= ~(1 << WDRF);
MCUSR &= ~(1 << WDRF);
</syntaxhighlight>
 
 
 
 
==Fusion des implémentations boutons et LEDs==
Maintenant que nous avons implémenté les boutons et les LEDs séparement, nous allons les fusionner en un seul programme.
 
=Bilan du Projet=
Nous avons réussi à concevoir et jouer avec la manette au SpaceInvaders mais nous n'avons pas réussi à utiliser la libusb pour envoyer des données pour contrôler les LEDs.
Nous n'avons pas souder certaines LEDs et résistances, elles n'étaient pas très importantes car elles étaient pilotées directement par les boutons et non par le micro-contrôleur.

Version actuelle datée du 10 juin 2024 à 21:31

Préambule

Ce projet consiste à réaliser une manette de jeu, pour cela nous allons utiliser un micro-contrôleur : L'Atmega16u4.

Pour y parvenir, nous devons :

- Concevoir un PCB qui servira de manette

- Souder les différents composants

- Créer un programme qui envoie des données depuis la manette au PC (pour jouer)

- Créer un programme qui envoie des données depuis le PC à la manette (en l'occurrence, allumer les LEDs en fonction du nombre de vies restantes)


Lien de l'archive GiT: Archive GIT

Partie KICAD

Projet KiCAD : Fichier:SE3-man-TEPELI-WACQUET.zip

Nous avons pour cela à disposition une archive Kicad à compléter.

Nous avions à disposition des connecteurs ISP pour pouvoir bootloader le micro-contrôleur, un connecteur ISP pour pouvoir téléverser nos codes et alimenter la carte, des boutons de Reset et HWB pour pouvoir réinitialiser la carte et permettre de téléverser de nouveaux programmes, ainsi que des boutons et des LEDs pour jouer au jeu.

Schématique KICAD :

Capture d'écran du schématique de l'ATMega.
Capture d'écran du schématique des autres composants.

Routage KICAD et Fichier SVG :

Capture d'écran du routage de la carte.
Fichier SVG du routage de la carte.


Soudure

On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.

On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.

Ensuite le port USB et on a vérifié si l'Atmega est alimenté.

Suite à cela, on a soudé les boutons HWB et RESET pour pouvoir se mettre en mode DFU.

Enfin, les LEDs et les boutons de jeu.

Photographie lors de la soudure :

Photo prise durant la soudure des composants.
¨Photo de la carte soudée

Intégration dans le jeu

Bootloading

Avoir de pouvoir téléverser de codes, nous avons dû bootloader la carte via le connecteur ISP et une carte Arduino.

Implémentation des boutons

Ensuite grâce au dossier ressource "Joystick", nous avons pu contrôler le vaisseau de SpaceInvaders.

Pour que notre carte soit considérée comme un Joystick, il faut qu'elle comporte 2 axes de déplacement, les boutons ne sont pas obligatoires.

Notre carte ne comporte que 4 boutons, nous avons décidé d'en utiliser 2 en tant que boutons et 2 en tant qu'axe X, l'axe Y existe mais n'est pas implémentée, nous avons complétement supprimé l'axe Z.

Nous avons seulement eu besoin de modifier le Makefile pour pouvoir cibler la carte bootloadée et les conditions de modification des valeurs des axes et des boutons.

Capture d'écran du code d'implémentation du Joystick

Lors de notre conception, nous avons relié les boutons au ground, nous avons donc programmer en inverse pour utiliser correctement nos boutons.

Nous avons testé ce code grâce à l'outil : jstest-gtk, qui nous montre de façon visuel l'état des axes et des boutons.

Vidéo des tests des boutons avec jstest-gtk


Nous avons ensuite modifié le code d'un de nos SpaceInvaders, grâce à un tutoriel, pour nous permettre d'utiliser la manette.

Démonstration de l'utilisation de la manette

Implémentation des LEDs

Pour cette partie, nous avons utilisé et complété le dossier ressource "Minimal" et la libusb .

Nous avons d'abord essayer de piloter les LEDs directement avec les registres.

On positionne les pins connectés aux LEDs en Output :

DDRF &= 0b11001100;

Ensuite nous envoyons soit des 1 ou des 0 pour respectivement éteindre ou allumer les LEDs.

Lors de la conceptions, nous avons connectés nos LEDs au VCC, le pilotage des LEDs se fait aussi en inverse.

Par exemple :

PORTF &= 0b11001100;
_delay_ms(1000);
PORTF |= 0b00110011;

Ce code allume les LEDs pendant 1 seconde puis les éteint , nous utilisons des masques pour ne pas influencer sur les autres éléments connectés au registre F.


Nos LEDs sont connectées au Registre F, ce registre pose problème pour contrôler nos LEDs, nous avons donc dû utiliser le morceau de code suivant :

 MCUSR &= ~(1 << WDRF);
 MCUSR &= ~(1 << WDRF);



Fusion des implémentations boutons et LEDs

Maintenant que nous avons implémenté les boutons et les LEDs séparement, nous allons les fusionner en un seul programme.

Bilan du Projet

Nous avons réussi à concevoir et jouer avec la manette au SpaceInvaders mais nous n'avons pas réussi à utiliser la libusb pour envoyer des données pour contrôler les LEDs. Nous n'avons pas souder certaines LEDs et résistances, elles n'étaient pas très importantes car elles étaient pilotées directement par les boutons et non par le micro-contrôleur.