Présentation de l'interface homme-machine » Historique » Version 1
Anonyme, 31/03/2021 09:21
1 | 1 | Anonyme | h1. Présentation de l'interface homme-machine |
---|---|---|---|
2 | |||
3 | L’interface homme – machine est celle qui commande toutes les fonctionnalités de la lanterne. En effet elle permet de commander l’arduino via une communication USB série. |
||
4 | Selon le cahier des charges, l’interface homme – machine est une tablette tactile sous Windows ou iOs, étant donné le coût, nous avons opté pour une tablette hybride Windows. |
||
5 | L’interface homme – machine utilisera une application créé avec Qt. L’installation de cette application et son utilisation est expliqué dans le fichier : |
||
6 | |||
7 | h2. +1) Commandes principales+ |
||
8 | |||
9 | |||
10 | Les différentes commandes possibles ont au préalable été définies dans un code implémenté dans le microcontrôleur de l’arduino. |
||
11 | En effet, en fonction du caractère envoyé, on définit la commande du moteur de positionnement de la roue ainsi que pour chaque lumière la commande de couleur d'éclairage. |
||
12 | |||
13 | h3. Commande moteur |
||
14 | |||
15 | La commande moteur permet de définir l’ouverture et donc la taille de la tâche projetée. |
||
16 | Cette commande se fait grâce à la fonction _commandeMoteur()_ suivante : |
||
17 | |||
18 | |||
19 | @void FenetrePrincipale::commandeMoteur(int ouv)@ |
||
20 | @{@ |
||
21 | @ port->open(QIODevice::ReadWrite);@ |
||
22 | @ switch(ouv)@ |
||
23 | @ {@ |
||
24 | @ case 1 :@ |
||
25 | @ port->write("1"); // Commande ouverture taille 1@ |
||
26 | @ break;@ |
||
27 | @ case 2 :@ |
||
28 | @ port->write("2"); // Commande ouverture taille 2@ |
||
29 | @ break;@ |
||
30 | @ case 3 :@ |
||
31 | @ port->write("3"); // Commande ouverture taille 3@ |
||
32 | @ break;@ |
||
33 | @ case 4 :@ |
||
34 | @ port->write("4"); // Commande ouverture taille 4@ |
||
35 | @ break;@ |
||
36 | @ case 5 :@ |
||
37 | @ port->write("5"); // Commande ouverture taille 5@ |
||
38 | @ break;@ |
||
39 | @ case 6 :@ |
||
40 | @ port->write("6"); // Commande ouverture taille 6@ |
||
41 | @ break;@ |
||
42 | @ }@ |
||
43 | @}@ |
||
44 | |||
45 | h3. Commande d'éclairage |
||
46 | |||
47 | La commande des diodes électroluminescentes (DEL ou LED en anglais) est plus complexe que celle du moteur. |
||
48 | En effet, les lumières doivent s’allumer en suivant les contraintes de scénario soit : |
||
49 | |||
50 | > * En fonction du type de test : |
||
51 | >> +Type confusion :+ Pour les couleurs rouge ou verte il est possible d’allumer en même temps un lumière de confusion rouge, verte ou blanche en fonction de la lumière de référence. |
||
52 | >> Ce type de test permet de vérifier qu'il n'y a pas de confusion entre les couleurs les plus critiques. |
||
53 | >> |
||
54 | >> +Type DEL unique :+ Dans ce test seule la lumière centrale s'allume quelque soit le corps d'armée. |
||
55 | >> Ce type de test permet de vérifier le daltonisme par détection de couleur seule. |
||
56 | >> |
||
57 | > * En fonction du corps d’armée du candidat : |
||
58 | >> +Marine :+ Les lumières sont positionnées l’une à côté de l’autre. |
||
59 | >> +Aviation :+ Les lumières sont positionnés l’une au dessus de l’autre. |
||
60 | > |
||
61 | |||
62 | C’est pour cela que j’ai choisi de créer une classe lumière associée à l’élément lumière. |
||
63 | Cette classe possède différentes fonctions (voir code du header de la classe Lumiere) permettant de réaliser les commandes en lumière unique |
||
64 | ou en lumière verticale ou horizontale en fonction du corps d’armée. |
||
65 | |||
66 | @#ifndef LUMIERE_H@ |
||
67 | @#define LUMIERE_H |
||
68 | @#include "librairies.h" |
||
69 | @class Lumiere |
||
70 | @{ |
||
71 | @public: |
||
72 | @ Lumiere(QSerialPort *&port, QLabel *&image, QLabel *&image2); |
||
73 | @ |
||
74 | @ QSerialPort *port_en_cours; |
||
75 | @ QLabel *image_Centrale, *image_AviationMarine; |
||
76 | @ QString couleurDemandee = ""; |
||
77 | @ |
||
78 | @ // Variables des adresses des images de lumière à afficher |
||
79 | @ QString addRouge; |
||
80 | @ QString addBlanc; |
||
81 | @ QString addVert; |
||
82 | @ QString addBleu; |
||
83 | @ QString addOrange; |
||
84 | @ |
||
85 | @ // Commande Del par Del |
||
86 | @ void commandeLedCentrale(QString couleur); |
||
87 | @ void commandeLedAviation(QString couleur2); |
||
88 | @ void commandeLedMarine(QString couleur2); |
||
89 | @ |
||
90 | @ // Commande globale |
||
91 | @ void commandeOff(); |
||
92 | @ void commande(int cpt); // Test DEL unique complet |
||
93 | @ void commandeConfusion(QString typeArmee, int cpt); // Test de confusion complet |
||
94 | @ |
||
95 | @ void setCouleur(QString nouvelleCouleur); |
||
96 | @ QString getCouleur(); |
||
97 | @private: |
||
98 | @ // Compteur de couleurs car chaque lumière s'allume trois fois par scénario |
||
99 | @ int cptRouge = 0; |
||
100 | @ int cptVert = 0; |
||
101 | @ int cptBleu = 0; |
||
102 | @ int cptOrange = 0; |
||
103 | @ int cptBlanc = 0; |
||
104 | @ |
||
105 | @ int coul = 0, coul2 = 0, prec = 0, prec2 = 0; |
||
106 | @ int tempsOff, tempsOn; |
||
107 | @}; |
||
108 | @#endif // LUMIERE_H@ |
||
109 | |||
110 | |||
111 | Les fonctions _commandeLed--(QString couleur)_ sont similaires et servent à allumer la lumière défini grâce aux valeurs définies dans le code arduino. |
||
112 | |||
113 | !https://forge.clermont-universite.fr/attachments/download/11984/couleur_code.JPG! |
||
114 | _+Figure 3.1 :+_ Caractère associé aux commandes de couleur |
||
115 | |||
116 | h2. +2) Les données+ |
||
117 | |||
118 | Enfin l’interface doit aussi permettre l’enregistrement des données de chaque examen dans un fichier tableur. |
||
119 | N’ayant pas de contrainte, le choix de tableur est un fichier _corpsArmee_nom-prenom.csv_ qui est plus facile pour le traitement. |
||
120 | Le fichier résultant est comme suit : |
||
121 | |||
122 | !https://forge.clermont-universite.fr/attachments/download/12007/fichierCSV.PNG! |
||
123 | _+Figure 3.2 :+_ Tableur CSV sauvergarde des données |
||
124 | |||
125 | Comme le montre la figure précédente, on peut séparer un fichier candidat en quatre parties : |
||
126 | |||
127 | >1. Date du jour de l'examen (Rouge) |
||
128 | >2. Zone de données personnelles du candidat (Bleu) |
||
129 | >3. Zone de données personnelles de l'examinateur (Violet) |
||
130 | >4. Zone de résultats du scénario (Orange) |
||
131 | |||
132 | Pour définir la date de l'examen il suffit d'utiliser la classe existante QDate. |
||
133 | |||
134 | Cependant, pour les trois points suivants, j'ai créé deux classes pour chaque élément pour faciliter et améliorer la lisibilité du code. |
||
135 | La première classe définit l'élément principal (le candidat, l'examinateur ou le test). |
||
136 | La deuxième classe définit la création d'une fenêtre pour la collection des données (voir le visuel en partie _3)_ ). |
||
137 | |||
138 | Les classes candidat, examinateur et fenêtre associé sont très similaire car les données nécessaires sont les mêmes à l'exception de la date de naissance. |
||
139 | Pour ce qui est du scénario, pour la classe test permet d'associer à chaque test du scénario les données d'ouverture, de temps d'exposition et d'extinction |
||
140 | des lumières ainsi que le type (confusion ou non). |
||
141 | |||
142 | Pour conserver les données de l'examinateur même en cas de fermeture de l'application, elles sont sauvegardées dans un fichier _examinateur.txt_ tel que : |
||
143 | |||
144 | !https://forge.clermont-universite.fr/attachments/download/11997/fichierExaminateur.PNG! |
||
145 | _+Figure 3.3 :+_ Fichier des données examinateur |
||
146 | |||
147 | On retrouve dans ce fichier les données de l'examinateur de la _figure3.2_. |
||
148 | > Examinateur : RYMLAND Solange, personnel navigant de l'aviation. |
||
149 | |||
150 | h2. +3) Le visuel+ |
||
151 | |||
152 | La fenêtre principale permettra le visuel de chaque scénario et sert de lien entre toutes les classes créées et utilisées. |
||
153 | |||
154 | h3. Aspect général |
||
155 | |||
156 | La fenêtre principale de l'application est composée d'une barre de menu séparée en cinq parties : |
||
157 | |||
158 | > * Maintenance (Permet d'effectuer une maintenance manuelle ou automatique) |
||
159 | > * Examinateur (Permet de gérer les données de l'examinateur) |
||
160 | > * Candidat (Permet de gérer les données du candidat) |
||
161 | > * Scénario (Permet de définir un scénario exécuter test par test ou chaque test aléatoirement) |
||
162 | > * Exporter données (Permet d'exporter les données dans le fichier vu figure 3.2) |
||
163 | |||
164 | !https://forge.clermont-universite.fr/attachments/download/12000/application.gif! |
||
165 | *_+Figure 3.4 :+_ Application visuel global* |
||
166 | |||
167 | h3. Maintenance |
||
168 | |||
169 | Le menu de maintenance permet de faire la maintenance des lumières en les allumant toutes de la couleur définie de façon manuelle |
||
170 | (cinq premiers choix du menu, couleur par couleur) ou de façon automatique en sélectionnant le mode automatique. |
||
171 | |||
172 | !https://forge.clermont-universite.fr/attachments/download/12003/maintenance.gif! |
||
173 | _+Figure 3.5 :+_ Phase de maintenance (automatique/manuelle) |
||
174 | |||
175 | > Dans le premier cas, l'écran affiche simplement une image centrale avec la couleur supposée des lumières en maintenances (Orange sur la _figure 3.5_). |
||
176 | > Dans le second cas, l'écran affiche en plus un message de vérification de la maintenance (Blanc sur la _figure 3.5_) |
||
177 | |||
178 | !https://forge.clermont-universite.fr/attachments/download/12008/resultatMaintenance.gif! |
||
179 | _+Figure 3.6 :+_ Résultat de la maintenance automatique |
||
180 | |||
181 | Lors du choix de la maintenance automatique, il y a deux résultats possibles : |
||
182 | |||
183 | > * Toutes les lumières sont fonctionnelles, la maintenance est terminée |
||
184 | > * Une des couleurs possèdent au moins une lumière non fonctionnelle, dans ces cas-là un message de demande de changement de lumière. |
||
185 | |||
186 | h3. Données |
||
187 | |||
188 | Pour définir/modifier les données concernant l'examinateur, le candidat ou bien les variables de test, |
||
189 | on utilise des fenêtres comme le montre la _figure3.7_. |
||
190 | |||
191 | !https://forge.clermont-universite.fr/attachments/download/12001/fenetres.gif! |
||
192 | _+figure 3.7 :+_ Fenêtres de collecte des données |
||
193 | |||
194 | Sur les fenêtres précédentes, on retrouve les données du fichier en _figure3.2_. En effet: |
||
195 | > Candidat : PROJET polytech, né le 6 mars 1992, personnel non navigant de l'aviation. |
||
196 | > Conditions du test 1 : Test de confusion avec un temps d'affichage 400 ms, un temps d'extinction 1000 ms et l'ouverture 1. |
||
197 | |||
198 | h3. Phase de test |
||
199 | |||
200 | En phase de test, il y a 4 affichages différents possibles. |
||
201 | > Boutons seuls : phase d'extinction des lumières, permet de sélectionner la réponse du candidat. |
||
202 | > Images superposées : phase de test de type confusion pour l'aviation. |
||
203 | > Images cote a cote : phase de test de type confusion pour la marine. |
||
204 | > Image seule : phase de test lumière unique ou test de confusion. |
||
205 | |||
206 | !https://forge.clermont-universite.fr/attachments/download/12009/test.gif! |
||
207 | _+figure 3.7 :+_ Exemple de tests |
||
208 | |||
209 | Pour les phases de test de type confusion : |
||
210 | > la lumière de référence est verte ou rouge. |
||
211 | > la lumière de confusion est verte, rouge ou blanche. |
||
212 | Pour les phases de test de type classique : |
||
213 | > la lumière de référence est verte, rouge, blanche, orangé ou bleu. |
||
214 | |||
215 | Quel que soit le type de test, il y a trois types d'erreurs: |
||
216 | > *erreur inacceptable :* pas de confusion autorisée entre le rouge et le vert |
||
217 | > *erreur critique :* confusion du rouge ou du vert avec une autre couleur |
||
218 | > *erreur acceptable :* toute confusion entre deux couleurs autre que rouge et vert |
||
219 | |||
220 | h2. +3) Ce qu'il reste à faire+ |
||
221 | |||
222 | Pour terminer le projet, il reste des améliorations à faire ainsi que quelques contraintes à respecter : |
||
223 | > * Sauvegarde de l'examinateur |
||
224 | >> Idée : Enregistrer dans un fichier texte les données de l'examinateur qui deviendront référence et resteront sauvegarder en cas de fermeture de l'application |
||
225 | >> Le fichier texte enregistrant les données de l'examinateur ne fonctionne pas lorsque le lien est relatif et non absolue. |
||
226 | >> Il faut donc trouver une solution à ce problème ou trouver un autre système de sauvegarde |
||
227 | |||
228 | > * Créer un scénario aléatoire |
||
229 | >> Idée : Sélectionner le nombre de tests choisis pour le scénario. |
||
230 | >> Afficher autant de fenêtre de sélection de donné des tests qu'il y a de test. |
||
231 | >> Réaliser aléatoirement chacun des tests définis. |
||
232 | |||
233 | > * Créer un scénario type |
||
234 | >> Idée : Ajouter dans le menu scénario une action _"scénario type"_. |
||
235 | >> Conserver les données dans un fichier texte pour pouvoir les conserver en cas de fermeture de l'application qui est lu par l'action précédente. |
||
236 | >> Ajouter dans le menu scénario une action _"modifier scénario type"_ qui permet d'enregistrer dans le fichier texte. |
||
237 | |||
238 | > * Définir les paramètres de la machine |
||
239 | >> Idée : Conserver les données dans un fichier à modifier que lors de changement lanterne. |
||
240 | >> Les paramètres sont : nom, numéro de série, lieu. |
||
241 | >> Il faut récupérer ces données dans le fichier en enregistrant. |
||
242 | |||
243 | > * Prendre en compte la maintenance |
||
244 | >> Idée : Il faut réaliser un test entre chaque candidat et donc mettre un message d'erreur si non réalisé. |
||
245 | >> Bien enregistrer sur le fichier candidat que la maintenance a été réalisé. |
||
246 | |||
247 | > * Prendre en compte la connexion USB |
||
248 | >> Idée : Détecter si le port est débrancher et arrêter le test dans ce cas-là. |
||
249 | >>Il faut aussi détecter avec quel port communiquer et le prendre en compte dans l’application. |
||
250 | >>Idée : Sélectionner le port de communication via l’interface |
||
251 | |||
252 | > * Visuel |
||
253 | >> Idée : Améliorer le rendu visuel. |
||
254 | |||
255 | > * Enregistrement |
||
256 | >> Idée : créer un fichier de plusieurs page ou revoir l'organisation des données pour une meilleure lisibilité. |
||
257 | |||
258 | > * Autres |
||
259 | >> Vérifier avec les clients si il n'y a pas de contraintes supplémentaires. |
||
260 | |||
261 | Les codes utilisés pour l'interface sont accessibles à ce lien : |
||
262 | https://forge.clermont-universite.fr/projects/p18ab08/repository/show/application_Lanterne-2 |
||
263 | L'utilisation de Qt est expliqué dans la note d'application à ce lien : |
||
264 | https://forge.clermont-universite.fr/documents/1162 |
||
265 | |||
266 | |||
267 | <<[[Choix Techniques]] / [[Conclusion]]>> |
||
268 | |||
269 | |||
270 | "couleur_code.JPG":https://forge.clermont-universite.fr/attachments/download/11984/couleur_code.JPG - Corresponde couleur _ valeur |
||
271 | |||
272 | "fichierExaminateur.PNG":https://forge.clermont-universite.fr/attachments/download/11997/fichierExaminateur.PNG - fichier examinateur associé |
||
273 | |||
274 | "application.gif":https://forge.clermont-universite.fr/attachments/download/12000/application.gif - application : visuel global |
||
275 | |||
276 | "fenetres.gif":https://forge.clermont-universite.fr/attachments/download/12001/fenetres.gif - Affichage des différentes fenêtres |
||
277 | |||
278 | "maintenance.gif":https://forge.clermont-universite.fr/attachments/download/12003/maintenance.gif - Phase de maintenance |
||
279 | |||
280 | "fichierCSV.PNG":https://forge.clermont-universite.fr/attachments/download/12007/fichierCSV.PNG - exemple fichier candidat |
||
281 | |||
282 | "resultatMaintenance.gif":https://forge.clermont-universite.fr/attachments/download/12008/resultatMaintenance.gif - résultat de maintenance |
||
283 | |||
284 | "test.gif":https://forge.clermont-universite.fr/attachments/download/12009/test.gif |