Choppe Lapin
Objectifs et Présentation
Le projet consiste principalement à développer un mini-jeu jouable sur un petit écran. Mon binôme et moi avons décidé de nous inspirer du jeu rétro Duck Hunt, sorti en 1984.
À partir d’un écran et d’un télémètre laser, l’objectif de ce jeu est d’attraper un lapin avant qu’il ne déguerpisse. La vitesse de la main est régie par l’état du lapin affiché à l’écran. Il peut être au repos, en état normal ou aux aguets (REST, STAY, WATCH).
Lorsqu’il est en état normal, le joueur peut avancer sa main vers le capteur. S’il avance trop vite, le lapin se méfie et passe en mode surveillance. Si le joueur continue à aller trop vite, la partie est perdue et le lapin s’enfuit.
À l’inverse, si le joueur avance trop lentement, le lapin devient inattentif, ce qui permet d’accélérer légèrement. Cependant, des mouvements trop brusques le réveillent immédiatement et provoquent sa fuite.
Travaux et Développement
Pour ce projet en C++, j’ai été chargé de la configuration, de l’initialisation et de l’exploitation du télémètre laser VL53L0X. Après une analyse des différentes solutions disponibles, j’ai sélectionné une bibliothèque open source compatible avec Arduino, offrant des fonctions fiables pour l’initialisation du capteur et la récupération des mesures de distance.
Le câblage a ensuite été réalisé entre la carte Arduino, l’écran d’affichage et le télémètre laser. Le capteur étant basé sur une communication I2C, nous avons connecté les lignes SDA et SCL aux broches correspondantes de la carte, ainsi que l’alimentation et la masse. Une plaque d’essai a été utilisée pour assurer un montage propre et modulable.
Après l’initialisation du capteur dans la fonction setup(), les mesures étaient acquises dans la boucle principale loop() à l’aide de la fonction getDistance(). Afin d’améliorer la stabilité des valeurs affichées, les mesures étaient stockées dans un tableau mis à jour en continu. La moyenne des valeurs enregistrées sur une durée d’une seconde était ensuite calculée, ce qui permettait de filtrer les parasites et les fluctuations.
Cette méthode de moyenne glissante a permis d’obtenir une distance plus représentative améliorant ainsi la précision perçue du système.
Erreurs et Amélioration
Le premier problème, et le plus important, concernait la précision du capteur télémétrique. Nous avons corrigé cela en effectuant un moyennage des mesures renvoyées par la fonction getDistance() provenant de la bibliothèque du capteur. De plus, nous avons arrondi les valeurs à la dizaine, car celles-ci variaient fortement à cause des tremblements de la main et de la luminosité de l’environnement.
Le second défaut concernait la vitesse d’affichage de l’image, qui pouvait perturber le joueur lorsque l’état du lapin changeait trop rapidement. Au départ, mon binôme et moi réaffichions l’image complète à chaque changement d’état. Or, comme les pixels étaient affichés un par un, malgré la vitesse de traitement de la carte Arduino, le rafraîchissement était trop lent.
Pour résoudre ce problème, nous avons affiché le fond une seule fois au début du jeu. Le lapin, que nous avons simplifié en une forme carrée, était ensuite affiché dans une zone spécifique actualisée dynamiquement selon son état.
