Table des matières
Sujets de rattrapage Informatique Industrielle BASE 2024
Chaque étudiant se voit attribuer un sujet aléatoirement. Le travail consiste à réaliser un projet qui devrait nécessiter approximativement 5 heures. Le projet est décrit avec un fonctionnement de base et plusieurs ajouts plus ou moins indépendants. Faites au mieux de vos capacités et vous devrez faire une démonstration à l'enseignant le 27 novembre entre 12h30 et 13h30 pendant un créneau de 15 minutes attribué dans le tableau suivant. Vous devrez être capable d'expliquer votre programme et de justifier vos choix ainsi que de répondre aux questions de l'enseignant. Vous pourrez, pendant la réalisation du projet, demander de l'aide (raisonnablement) ou des compléments d'information à l'enseignant plutôt que de rester bloqués. Utilisez le mail suivant sans espaces: b e r t r a n d . v a n d e p o r t a e l e (at) i u t - t l s e 3 . f r
Sauver votre projet régulièrement sur votre compte Google et en faire différentes versions (save as) pour pouvoir montrer à l'enseignant une version fonctionnelle mais non complète même si vous avez tenté sans succès de répondre aux dernières questions!
nom étudiant | projet | heure de passage |
---|---|---|
ARAUD Clément | 2 | 12h30 |
GAUTIER Paul | 3 | 12h45 |
LAUNAY Mathis | 1 | 13h00 |
RACHDI Wassim | 4 | 13h15 |
Votre travail doit être réalisé individuellement et devra être gardé secret!
Projet 1: mini piano
Partir du projet https://wokwi.com/projects/291958456169005577
Alors que le projet fourni est un simple piano, vous devez le modifier pour ajouter la fonction d'enregistrement et de rejeu de partition.
Ajouter 2 boutons à la maquette (1 pour lancer/arrêter l'enregistrement, 1 pour lancer/arrêter le rejeu)
Créer les variables nécessaires pour gérer l'enregistrement d'une partition d'au maximum 100 notes, codant pour chaque note: la tonalité, la date de départ et la date de fin (choisir les types adaptés et utiliser un tableau de variables de type structure).
Initialiser cette partition avec une partition simple d'une dizaine de notes pour faciliter le développement et permettre le test de la fonction de rejeu sans devoir enregistrer à chaque fois.
Ajouter 1 LED VERTE connectée à A5 et l'allumer pendant le rejeu.
Ajouter 1 LED ROUGE connectée à A4 et l'allumer pendant l'enregistrement.
Ajout d'une fonction de modulation de la vitesse de rejeu de la partition
Ajouter un potentiomètre linéaire connecté à l'entrée A0 de la maquette et faire en sorte qu'il permette de régler une vitesse de rejeu de la partition comprise entre 0.5x et 2x pour les positions extrémales du potentiomètre. La vitesse doit pouvoir être modifiée pendant le rejeu de la partition.
Ajout d'une fonction de modulation des notes de rejeu de la partition
Ajouter un potentiomètre linéaire connecté à l'entrée A1 de la maquette et faire en sorte qu'il permette de changer la tonalité des notes par un facteur compris entre 0.5x et 2x pour les positions extrémales du potentiomètre. La tonalité doit pouvoir être modifiée pendant le rejeu de la partition.
Projet 2: système d'alarme
partir du projet https://wokwi.com/projects/291958456169005577
Le projet consiste à réaliser un système d'accès codé permettant de piloter une gâche de porte et une alarme.
Ajouter 1 LED VERTE connectée à A5 et l'allumer pour simuler l'ouverture de la gâche.
Ajouter 1 LED ROUGE connectée à A4 et l'allumer pendant 2 secondes pour indiquer la saisie d'un mauvais code.
Définir la séquence d'appui de boutons permettant l'ouverture: JAUNE, BLEU CLAIR, VIOLET, ORANGE
Le bouton rouge de gauche doit permettre de redémarrer la saisie du code en cas d'erreur de saisie avant la quatrième pression d'une touche sans que cela ne soit comptabilisé comme une erreur de code.
En cas d'erreur du code, continuer la saisie (il ne faut pas que l'utilisateur sache quelle touche est erronée) et après l'appui sur le quatrième bouton, allumer la LED ROUGE pendant 2 secondes.
En cas de saisie du bon code, réinitialiser le compteur d'erreurs de code.
Au bout de 3 erreurs de code successives, déclencher l'alarme. L'alarme ne peut être arrêtée qu'en appuyant 3 fois sur le bouton rouge de gauche puis en saisissant le bon code.
Il est conseillé d'implémenter le système en utilisant une machine à états comme vu en TD.
L'alarme doit produire la séquence de son suivante: bouton vert pendant 1 seconde, 1/2 seconde de pause, bouton orange pendant 1 seconde, 1/2 seconde de pause, et répéter tant que nécessaire,
Ajout d'une fonction de mesure de temps pour la saisie du code
Ajouter le nécessaire pour vérifier que les boutons sont bien pressés pendant 0.5 à 2 secondes. Un appui trop long doit conduire à l'incrémentation du compteur d'erreurs.
Ajouter le nécessaire pour vérifier que les pause entres les pressions des boutons soient comprises entre 0.5 et 2 secondes. Une pause trop longue doit conduire à l'incrémentation du compteur d'erreurs.
Projet 3: Odométrie simplifiée pour robot mobile
Utiliser le projet du TD2 cesitd2 et modifier la schématique pour avoir deux encodeurs en quadrature au lieu d'un.
Considérer que ces deux encodeurs sont montés sur les roues motrices d'un robot mobile. Votre projet doit permettre d'utiliser ces deux encodeurs pour suivre les déplacements du robot.
On considère que les deux roues peuvent tourner dans les deux sens. Dans le cas où les roues tournent à la même vitesse mais en sens opposé, le robot pivote autour du centre du segment reliant les 2 roues (ce qu’on appellera le centre du robot).
Définir les variables permettant de régler:
- dr : distance (écart) entre les roues
- dl : distance linéaire parcourue par la roue pour 1 pas du codeur
Valeurs initiales pour ces variables: dr=50mm , dl=0.5mm
La pose (position et orientation) du robot est représentée par:
- xr et yr : position cartésienne du centre du robot exprimé dans le repère monde Oxy
- thetar : angle en degré entre la direction d'avance du robot et l'axe x du repère monde
Position initiale du robot xr,yr,thetar=0,0,0
Réaliser un dessin et mettre en équations le problème pour indiquer comment une variation de pose peut être calculée à partir d'une paire de mesures (chacune pouvant être positive ou négative) de nombre de pas sur les encodeurs. Faire valider à l'enseignant.
Créer une classe CStateMachineRotary2 qui hérite de la classe CStateMachineRotary réalisée en TD. Pour CStateMachineRotary2, réimplémenter getPosition() pour qu'en plus de retourner l'attribut position, elle le réinitialise à 0 (le déplacement mesuré est “consommé” lors de la mesure).
Créer 2 instances de CStateMachineRotary2 (une pour chaque roue du robot).
Réaliser une tâche cadencée à 10Hz qui vient consommer les déplacements mesurés par les deux encodeurs, les traduit en changement de pose et met à jour xr, yr et thetar. En cas de déplacement, cette tâche affiche la nouvelle pose via la liaison série.
Mise sous forme objet de l'odométrie
Créer une classe COdometrie permettant de réaliser le fonctionnement décrit. Cette classe doit notamment avoir comme attributs les deux instances de CStateMachineRotary. Les broches utilisées par les différents encodeurs, ainsi que les paramètres dr et dl doivent être paramétrables par le constructeur de la classe.
Ajout de la fonctionnalité de mesure de vitesses
Ajouter à la classe COdometrie la capacité à fournir la vitesse linéaire (variation de xr,yr) et la vitesse de rotation (variation de thetar) du robot,
Projet 4: Jeu de vitesse
Partir du projet https://wokwi.com/projects/291958456169005577
Ajouter à la schématique 8 LED à positionner aux dessus des 8 boutons et faire en sorte de pouvoir les piloter avec les broches disponibles (A0 à A5)
Vous devez mettre en place un jeu de vitesse: la machine allume une LED et le joueur doit rapidement appuyer sur le bouton correspondant dans un laps de temps contraint. Puis la machine éteint cette LED et passe à l'allumage de la LED suivante dans la séquence du niveau de jeu. Un niveau du jeu est défini par une séquence de 10 allumages de LED/appuis de bouton successifs stockés dans un tableau (vous pouvez l'initialiser avec une liste de valeurs numériques constantes pour commencer).
La machine doit émettre un son aigu court lorsque le joueur a bien appuyé sur le bon bouton dans le laps de temps.
La machine doit émettre un son grave court lorsque le joueur a bien appuyé sur le bon bouton mais sans respecter le laps de temps.
La machine doit émettre une séquence de 3 sons graves lorsque le joueur a appuyé sur le mauvais bouton.
La machine doit émettre une séquence de 3 sons aigus lorsque le joueur a correctement réalisé la séquence de 10 appuis en ayant respecté le laps de temps pour tous les appuis.
La machine doit émettre une séquence de 2 sons aigus lorsque le joueur a correctement réalisé la séquence de 10 appuis mais sans avoir respecté le laps de temps pour au moins un appui.
Le laps de temps entre l'allumage et l'appui sur le bouton correspondant doit être de 2 secondes maximum pour commencer.
Ajout de niveaux définis aléatoirement
Au lancement de l'application, attendre que le joueur appuie sur un des boutons pour lancer le jeu. Utiliser le nombre de millisecondes écoulées depuis le démarrage du programme pour initialiser un générateur de nombres aléatoires (chercher sur internet comment faire cela en C++). Ensuite utiliser ce générateur pour remplir le tableau du niveau avec une séquence différente à chaque fois.
Ajout de niveaux de difficulté variable
Ajouter une variable pour gérer le niveau de difficulté. Après avoir réalisé avec succès un niveau (en respectant le laps de temps pour tous les appuis), le jeu passe au niveau suivant, sinon il recommence au même niveau.
La difficulté d'un niveau est due au fait que le joueur doit réagir de plus en plus vite en fonction du niveau, comme indiqué dans le tableau suivant:
niveau | laps de temps à respecter |
---|---|
1 | 2 secondes |
2 | 1.5 secondes |
3 | 1 secondes |
4 | 0.5 secondes |
Si le joueur arrive à terminer le niveau 4, lui jouer une petite séquence sonore de 6 notes puis redémarrer au niveau 1.
Ajout de délais variables entre les allumages de LED
Faire en sorte qu'après l'appui d'un bouton par le joueur, l'allumage de la LED suivante se fasse après un délai aléatoire compris entre 0 et 3 secondes, différent à chaque fois.