Présentation & cahier des charges
Contexte de la SAE, objectifs, cahier des charges, contraintes du microcontrôleur et organisation du projet en binôme.
Contexte du projet
Ce rapport présente une situation d'apprentissage et d'évaluation (SAE) menée au cours du deuxième semestre. L'objectif pédagogique d'une telle SAE est de confronter les étudiants à un projet technique complet, de la conception à la réalisation, en mobilisant simultanément les compétences acquises en électronique, en informatique embarquée et en conception assistée par ordinateur. Le travail a été réalisé en binôme par Emma Grosmaire et Dorian Sausse (groupe C).
Le système demandé est un système embarqué autonome intégrant trois grands ensembles : une interface utilisateur (écran graphique et manette), une carte son dédiée, et un microcontrôleur jouant le rôle d'unité centrale. Afin de donner un fil conducteur concret et motivant à l'ensemble des développements, le binôme a choisi de réaliser un jeu vidéo de type Asteroids comme support pédagogique. Ce choix n'est pas anodin : un jeu d'arcade impose des contraintes fortes et représentatives du génie embarqué, à savoir l'affichage graphique en temps réel, la lecture de capteurs (joystick, boutons), la génération sonore, et une boucle de traitement qui doit rester fluide malgré des ressources matérielles limitées.
Le principe du jeu est simple à énoncer mais riche à implémenter. Un vaisseau triangulaire reste fixé au centre de l'écran et pivote sur place pour viser, l'orientation étant commandée par le joystick analogique. Le joueur tire des projectiles à l'aide du bouton B. Des astéroïdes, représentés par des octogones, surgissent des bords de l'écran et foncent vers le centre. Détruire un astéroïde rapporte dix points au score ; en revanche, si un astéroïde atteint le vaisseau, la partie se termine. L'application est organisée autour de quatre écrans gérés par une machine à états : un menu d'accueil (ETAT_MENU), un écran de réglages décrivant les commandes (ETAT_REGLAGES), l'écran de jeu proprement dit (ETAT_JEU), et un écran de fin de partie ou game over (ETAT_GAMEOVER).
Objectifs
Le projet poursuit plusieurs objectifs imbriqués, qui couvrent l'ensemble de la chaîne de conception d'un système embarqué :
- Concevoir l'architecture matérielle globale : définir comment les différents sous-ensembles (calculateur, affichage, commandes, audio, alimentation) communiquent entre eux, et répartir les fonctions sur les broches du microcontrôleur.
- Développer une carte son dédiée : concevoir et fabriquer un amplificateur audio basse tension autour du circuit intégré LM386, depuis le schéma jusqu'au circuit imprimé.
- Mettre en œuvre le microcontrôleur PIC16F18877 : configurer ses périphériques (convertisseur analogique-numérique ADCC, bus de communication série SPI, oscillateur numériquement commandé NCO) et écrire le programme applicatif.
- Réaliser une interface utilisateur combinant un écran graphique couleur TFT et une manette dotée d'un joystick analogique et de boutons-poussoirs.
- Développer le logiciel embarqué : programmer la logique de jeu, le rendu graphique et la gestion du son dans un environnement contraint.
- Intégrer l'ensemble en un prototype fonctionnel, testé et démontrable, où matériel et logiciel coopèrent de façon fiable.
Ces objectifs traduisent la volonté de produire non pas une simple maquette de laboratoire, mais un système cohérent et utilisable, illustrant la démarche d'ingénierie : analyse du besoin, conception, réalisation, intégration et validation.
Cahier des charges et contraintes
Le cahier des charges peut se décliner en exigences fonctionnelles, matérielles et de contexte.
Exigences fonctionnelles
Le système doit offrir une jouabilité fluide : la rotation du vaisseau, le tir des projectiles et le déplacement des astéroïdes doivent réagir sans latence perceptible. L'interface doit être lisible (bande de score, ou HUD, en haut de l'écran, retours visuels et sonores) et la navigation entre les quatre écrans doit être intuitive, à l'aide de boutons-poussoirs dédiés (jouer, réglages, retour au menu).
Exigences matérielles
Le matériel est imposé et fixe le cadre technique du projet. L'unité centrale est un microcontrôleur PIC16F18877 de Microchip, en boîtier 40 broches PDIP, programmé sous MPLAB X avec le compilateur XC8 et l'outil de configuration MCC (MPLAB Code Configurator), qui génère l'initialisation des périphériques. L'affichage est confié à un écran TFT ILI9488 de 480 × 320 pixels en mode paysage, piloté par le bus SPI (MSSP1 en maître, mode 0) avec une couleur codée sur 18 bits. La commande est assurée par un joystick analogique deux axes lu par le convertisseur analogique-numérique ADCC sur 10 bits (valeurs de 0 à 1023), complété par des boutons-poussoirs actifs à l'état bas (résistance de tirage pull-up). Enfin, le son est produit par le périphérique NCO1 (oscillateur numériquement commandé) du PIC, dont le signal est amplifié par la carte son à base de LM386.
Contraintes liées au microcontrôleur
Ce sont elles qui structurent l'ensemble des choix logiciels et constituent le fil rouge du projet. Le PIC16F18877 est un cœur 8 bits cadencé par l'oscillateur interne HFINTOSC à FOSC = 32 MHz, soit un cycle d'instruction Tcy = FOSC/4 = 8 MHz (125 ns par cycle). Surtout, il ne dispose d'aucune unité de calcul en virgule flottante matérielle (pas de FPU) : toute opération sur des nombres réels (cosinus, sinus, racine carrée) est émulée par logiciel et donc lente. La mémoire vive disponible est par ailleurs réduite, ce qui motive l'emploi de types entiers de taille fixe (uint8_t, uint16_t) pour économiser la RAM. Ces deux limites - absence de FPU et peu de RAM - imposent une discipline de programmation rigoureuse, déclinée en quatre principes que l'on retrouvera tout au long du rapport : éviter au maximum les calculs flottants en cours de jeu (pas de atan2, cos ni sin en boucle, mais le vecteur normalisé du joystick et des constantes précalculées) ; ne jamais bloquer inutilement le déroulement du jeu ; comparer les distances au carré plutôt que de calculer des racines carrées ; et n'effectuer le rendu graphique que sur les éléments qui changent réellement, selon le cycle effacer / déplacer / redessiner.
Absence de FPU et RAM réduite : ces deux limites du PIC16F18877 dictent toute la stratégie logicielle - pas de flottant en boucle de jeu, jamais de blocage inutile, distances comparées au carré, et rendu limité aux seuls éléments qui changent (effacer / déplacer / redessiner).
Contraintes de coût, d'encombrement et de consommation
Le projet vise un coût matériel modéré, cohérent avec un projet de formation, et privilégie des composants traversants (THT) faciles à braser à la main. L'encombrement reste celui d'un prototype de paillasse, avec une carte son compacte conçue pour tenir sur un petit circuit imprimé double face de 45 mm × 45 mm. La consommation, alimentée en basse tension (le PIC est alimenté en +5 V), doit rester compatible avec une alimentation de laboratoire ou un bloc autonome simple.
Organisation du projet et répartition des tâches
Le projet a été conduit en binôme selon une méthode itérative : plutôt que de figer entièrement le système avant de commencer, le binôme a procédé par cycles courts (conception partielle, réalisation, test, correction), ce qui permet d'identifier tôt les difficultés - notamment celles liées aux performances du microcontrôleur - et d'ajuster les choix en conséquence.
La répartition des tâches s'est appuyée sur les affinités de chacun tout en maintenant une part importante de travail commun, en particulier sur l'intégration et la validation. Une répartition cohérente avec le déroulement du projet est la suivante (répartition indicative, à confirmer) :
- Conception mécanique et CAO (SolidWorks) : modélisation du support et de l'enveloppe accueillant l'écran, la manette et la carte son, vérification des dimensions et des dégagements (cotes exactes à confirmer).
- Conception électronique (KiCad) : schéma et routage de la carte son LM386 sous KiCad 9, génération des fichiers de fabrication (Gerbers : couches cuivre F_Cu et B_Cu, masques, sérigraphie, perçages), nomenclature des composants.
- Programmation (MPLAB X) : configuration des périphériques du PIC via MCC, développement de la logique de jeu, du rendu graphique et de la génération sonore.
- Intégration et tests : assemblage des sous-ensembles, câblage, contrôle visuel, recherche de courts-circuits et mesure de continuité sur la carte son, essais de jouabilité et corrections.
Dans la pratique, les phases de programmation et d'électronique ont été menées de front, le travail étant régulièrement mis en commun afin que chacun maîtrise l'ensemble du système. Les tâches d'intégration et de test, par nature transversales, ont été partagées entre Emma Grosmaire et Dorian Sausse.
Un mini-planning prévisionnel peut être décomposé en cinq phases successives, qui se recouvrent partiellement du fait de l'approche itérative :
- 1. Analyse et architecture : étude du besoin, choix de l'architecture matérielle et du brochage du PIC.
- 2. Conception électronique et mécanique : tracé de la carte son sous KiCad, modélisation du support sous SolidWorks.
- 3. Fabrication et câblage : brasage des composants traversants, assemblage de la manette, raccordement de l'écran et de la carte son.
- 4. Développement logiciel : mise en place des bibliothèques d'affichage (pilote bas niveau ILI9488 et bibliothèque graphique GFX), programmation de la boucle de jeu, intégration du son.
- 5. Intégration, tests et finalisation : validation du prototype complet, corrections, rédaction du présent rapport.
Cette organisation, couplée à la démarche itérative, a permis de faire converger progressivement les sous-ensembles vers un prototype fonctionnel, tout en gardant à l'esprit la contrainte centrale du projet : tirer le meilleur parti d'un microcontrôleur modeste pour obtenir un jeu réactif et agréable à jouer.