Projet IHM - Simulateur logique

circuit logique simple

Objectif : réalisation d'une application de simulation de circuits logiques

Ce projet est avant tout un projet d'IHM. Vous devez donc vous focaliser sur cet aspect en priorité puisque l'évaluation de votre travail reposera dessus : respectez les principes ergonomiques, réfléchissez aux interactions possibles, à l'aspect didactique, à l'homogénéité du style graphique, etc. Un fonctionnement complet de l'application n'est pas demandé.

Le but de ce projet est la conception et la réalisation d'une application d'initiation aux circuits logiques dans un environnement ludique puisqu'il s'agit de permettre à un petit robot de faire le trajet d'un point A à un point B dans différentes configurations.

L'application doit permettre :

  • de construire le robot,
  • de créer l'environnement (et de le sauvegarder),
  • de lancer la simulation (et de la suspendre),
  • d'afficher diverses informations.

En pratique, l'implantation de cette application se fera en Python et s'appuiera sur la bibliothèque tkinter (ainsi que la bibliothèque PIL dans une moindre mesure) :

La bibliothèque PIL permet d'afficher dans un canvas des images issues de nombreux formats de fichiers (tiff, jpeg, png, etc.).

from PIL import ImageTk, Image

im = Image.open(fph)
canv.image = ImageTk.PhotoImage(im)
canv.create_image(0, 0, image=canv.image, anchor='nw', tags='clic')

Présentation générale

Ce projet doit permettre de s'initier à la conception de circuits logiques répondant à des impératifs dictés par la résolution d'un parcours.

Les composants qui constituent ces circuits sont de trois types :


circuits logiques combinatoires

Les noeuds permettent de dédoubler un signal. Ils sont utilisés pour activer deux fonctions à la fois. Les bascules ont la particularité de maintenir l'état de leurs sorties même après disparition du signal de commande. Dans le cas présent, la bascule active une sortie ou l'autre selon qu'elle reçoit un signal sur l'une ou l'autre entrée. Elles sont très utiles pour envoyer deux signaux, l'un après l'autre.

(en option) Il est possible d'intégrer dans une puce électronique (ou circuit intégré numérique) le résultat du cablâge de plusieurs composants, rendant le circuit facile à mettre en œuvre. Un circuit intégré se présente sous la forme d'un boîtier rectangulaire, noir, équipé sur deux côtés de 4 'pattes' (appelées aussi broches ou pins) permettant d'établir les connexions électriques avec l'extérieur du boîtier.

circuit logique

Les circuits sont intégrés au sein d'un robot évoluant dans le plan de la simulation et comportant pour cela plusieurs types de périphériques :

  • 4 réacteurs lui permettant, s'ils recoivent un signal haut, de se mouvoir vers le haut, le bas, la droite ou la gauche (bien entendu, le robot bouge dans la direction opposée à la position relative d'un réacteur donné),
  • 4 radars de collision, en direction de chaque point cardinal, générant un signal haut quand ils détectent un obstacle et dont le rôle est fondamental pour activer les réacteurs,
  • (en option) 1 antenne bidirectionnelle, qui peut recevoir et émettre des signaux d'un autre robot, cela permet de résoudre certains niveaux difficiles grâce à la collaboration de plusieurs robots,
  • (en option) 1 pince pour attraper des objets (et le signaler), elle permet d'élaborer des niveaux avec des buts intermédiaires, elle est souvent utilisée en association avec les senseurs,
  • (en option) 3 types de senseur : de contact (émission d'un signal haut en cas de contact du robot avec un objet), de présence (émission d'un signal haut en cas de présence d'un ou plusieurs objets dans le contexte d'un niveau comportant plusieurs 'salles') ou directionnel (émission d'un signal haut correspondant à la position relative d'un objet par rapport au robot, ce senseur comporte donc 4 sorties).

Pour câbler le robot, on doit connecter chaque composants et chaque périphériques utilisés, chacun d'entre eux comportant des 'pattes' d'entrée et/ou de sortie clairement identifiées. Lorsque le courant est établi, celui-ci suit le sens indiqué par les pattes.

Un pointeur est nécessaire pour établir ou supprimer des connections entre les sorties et les entrées (les connections entre sorties ou entre entrées ne sont pas autorisées). Les connections ne peuvent se faire qu'à l'intérieur du robot.

La réalisation d'un niveau se fait par l'intermédiaire d'un éditeur adapté. Chaque parcours est décomposé en carrés de taille identique (correspondant au carré englobant du robot). Chaque carré correspond à une case libre ou occupée par un mur. L'une des cases libres doit être identifiée comme la case de départ D du robot, une seconde case libre doit être identifiée comme la case d'arrivée A.

Exemples de niveau

image1

La simulation doit se faire de manière discrétisée : à chaque pas de la simulation, le robot évolue a priori de case en case et prend connaissance de l'environnement de la nouvelle case dans laquelle il entre (i.e de la présence, ou non, de murs à la frontière de la case). Cette simulation doit pouvoir être suspendue à tout instant (ceci correspond à la désactivation du robot).


Cahier des charges

Une phase de conception, qui repose sur des diagrammes UML de "cas d'utilisation" et/ou sur une conception dirigée par les buts (avec archétypes, scénarios et décomposition associée), doit être réalisée préalablement et donnée lieu à la rédaction d'un rapport (qui sera remis, par voie électronique, au format PDF).

Dans le cadre du module IHM, on s'attachera à la conception d'une interface intuitive. Les fonctionnalités demandées, volontairement approximatives, sont :

  • utilisation de l'application suivant plusieurs niveaux d'apprentissage (par exemple débutant, confirmé, expert),
  • création d'un niveau, modification, sauvegarde et chargement,
  • création d'un robot, modification, sauvegarde et chargement,
  • choix d'un niveau, choix d'un robot et lancement de la simulation (avec détection d'un succès ou d'un échec),
  • personnalisation de l'interface et de la simulation.

Notation

La notation de ce projet prendra en compte le rapport, le respect du cahier des charges, la qualité de la programmation (robustesse, lisibilité et modularité du code, présence de tests unitaires) ainsi que les aspects propres à une IHM que sont : cohérence, concision (limitation du nombre d’interventions de l’utilisateur), structuration des activités (décomposition d’une tâche complexe), flexibilité (application personnalisable), retour d’informations et gestion des erreurs, toutes choses qui garantissent une interface ergonomique et intuitive et qui n’apparaissent pas explicitement dans cette présentation.