Logiciel



Code Arduino

Le langage Arduino est un mélange de fonctions venant du C et C++ pouvant être appelées dans notre code. C'est ensuite passé dans un compilateur C/C++ (avr_g++).

Pour programmer la carte Arduino nous utiliserons l'IDE Arduino disponible gratuitement en téléchargement sur le site officiel Arduino.cc

Avant tout nous devons déclarer les différentes variables.

    Explications,
  • Ligne 1: Entrées utilisées par les capteurs de flexion.
  • Ligne 2: Entrées utilisées par les microinterrupteurs.
  • Ligne 3: Variables qui vont contenir la "résistance" des capteurs de flexion.
  • Ligne 4: Variables qui vont contenir l'état des interrupteurs.
  • Ligne 5: Variables intermédiaires pour les opérations effectuées.
  • Ligne 6: Variables qui vont contenir l'état final de tous les doigts.

Maintenant procédons à l'initialisation.

    Explications,
  • Ligne 8: Fonction d'initialisation.
  • Ligne 9: Initialisation de la communication série.
  • Ligne 10: Création d'une boucle, 5 répétitions, 5 doigts.
  • Ligne 11: Initialisation de toutes les entrées des capteurs de flexion.
  • Ligne 12: Initialisation de toutes les entrées des interrupteurs.

Nous utiliserons des boucles dans le programme afin de le clarifier, car toutes les tâches sont répétées 5 fois. Maintenant nous pouvons passer au coeur du projet.

    Explications,
  • Ligne 16: Fonction de boucle principale.
  • Ligne 17: Boucle pour les 5 répétitions.
  • Ligne 18: Acquisition de la "résistance" des capteurs de flexion.
  • Ligne 19: Acquisition de l'état des interrupteurs.
  • Ligne 21: Mapping du mot binaire reçu pour le ramener à un multiple de 3.
  • Ligne 22: Récupération de valeurs volatiles aux bornes.
  • Ligne 24: Mise à 0 de la variable état final.
  • Ligne 26: Test: si mot binaire > 0 alors le capteur connecté.
  • Ligne 27: Test doigt plié.
  • Ligne 28: Si le doigt est plié son état est 3.
  • Ligne 29: Test doigt tendu.
  • Ligne 30: Si le doigt est tendu son état est 1.
  • Ligne 31: Test doigt à moitié plié.
  • Ligne 32: Si le doigt est à moitié plié son état est 2.
  • Ligne 34: Test interrupteur.
  • Ligne 35: Si l'interrupteur est activé, 3 est additionné à l'état du doigt.
  • Ligne 38: Envoie des valeurs dans le port série.
  • Ligne 40: Saut de ligne après chaque séquence de traitement afin d'avoir des séquences de 5 caractères.
  • Ligne 41: Pause système en millisecondes.

Notez que le mot binaire est codé sur 10 bits. Les mesures peuvent être affinées pour améliorer la fonction mapping à la ligne 21. Le code complet est disponible sur notre GitHub.

Scripts Python

Dans cette partie nous présenterons les principales fonctionnalités des scripts python développées pour le projet. Pour en savoir plus sur le fonctionnement du logiciel, ainsi que son utilisation nous vous invitons à lire la dernière partie "SimaSLI".
Au lancement du programme nous aimerions lire un fichier de configuration et récupérer les paramètres de lancement.

Les paramètres de lancement possibles sont "-n" et "-v" qui vont définir l'état de 2 variables que la fonction GetArgs renvoie.
Pour ce qui est de la fonction GetConfig elle lit un fichier "config.cfg" que l'utilisateur peut modifier, et remplit des variables qu'elle renvoie. La commande "try" permet de gérer les différentes erreurs qui peuvent survenir à l'ouverture du ficher de configuration.

Le coeur du script est basé sur l'acquisition des valeurs envoyées par la carte Arduino. Nous allons donc nous voir en détails les fonctions d'interprétation.
Pour que l'interprétation fonctionne, il faut avant tout récupérer les valeurs de la carte, puis récupérer les valeurs de la base de données, et enfin tester si il y a une corrélation entre les deux.

Dans ce code les différentes fonctions interviennent toutes dans l'interprétation. La fonction GetCode lit le fichier base de données et récupère le "code" de chaque ligne. Les fonctions GetFr et GetEn font de même, mais récupèrent les mots en français et en anglais. Par exemple, si la première ligne de la base de données est "11411;bonjour;hello", GetCode va renvoyer "11411", GetFr "bonjour", et GetEn "hello".

Ensuite intervient la fonction GetArduinoCode. Là c'est le code envoyé par la carte qui est récupéré. Si la fonction détecte une erreur elle signale que le gant n'est pas connecté, sinon elle renvoie le code reçu.

Et enfin les fonctions interpreter_fr et interpreter_en sont les deux fonctions qui vont comparer le code reçu aux codes de la base de données. Si le code reçu est "11411", interpreter_fr va renvoyer "bonjour", et interpreter_en "hello".

Voilà tout pour les principales fonctions. Il y en a une quinzaine pour l'interprétation, l'apprentissage et les tests, mais toutes sont similaires et basées sur le même principe. Seulement le mode Apprentissage ne va pas tester la base de données mais va écrire une nouvelle ligne avec le code reçu.

Notez que tout le code de SimaSLI, ainsi que celui de tous les modules développés pour, est disponible sur notre GitHub.

SimaSLI

Maintenant que les fonctions principales sont développées et fonctionnelles il est temps de commencer un logiciel utilisable et distribuable. C'est pourquoi a été développé SimaSLI. Dans sa version finale il regroupe tous nos modules, et scripts développés pour le projet, comme SimaGUI et SimaCLI qui sont deux outils similaires mais l'un en lignes de commandes et l'autre avec une interface graphique. SimaVoice est un module ajoutant une option de synthèse vocale des mots interprétés. Et SimaDirect est un module qui prendra en charge toutes les fonctionnalités en ligne, telles que la mise à jour automatique ou une base de données en ligne.

Maintenant que les fonctions principales sont développées et fonctionnelles il est temps de commencer un logiciel utilisable et distribuable. C'est pourquoi a été développé SimaSLI. Dans sa version finale il regroupe tous nos modules, et scripts développés pour le projet, comme SimaGUI et SimaCLI qui sont deux outils similaires mais l'un en lignes de commandes et l'autre avec une interface graphique. SimaVoice est un module ajoutant une option de synthèse vocale des mots interprétés. Et SimaDirect est un module qui prendra en charge toutes les fonctionnalités en ligne, telles que la mise à jour automatique ou une base de données en ligne.

Pour utiliser cet outil vous aurez besoin de Windows ou Linux (MacOs ne supporte pas bien Pygame). Télécharger la dernière version sur notre GitHub ou depuis la page téléchargements. Notez que sur GitHub SimaSLI correspond à la branche V4.X, tandis que les V2.X et V3.X correspondent aux anciennes versions SimaCLI et SimaGUI. Si vous utilisez le code source vous aurez besoin de modules pour votre installation de python 2.7.X, dans une console entrez "pip install colorama", "pip install pyserial", et "pip install pygame". Si vous utilisez l'application compilée nous n'avez qu'à éxecuter le fichier "main.exe". Que vous utilisiez ou la version compilée ou le code source, vous pouvez modifier la configuration dans le fichier "config.cfg", et définir des paramètres de lancement: "python main.py --nogui" permet, par exemple, de lancer le script depuis le code source en mode console, "main.exe -n -v" permet de lancer l'application compilée (sur Windows) en désactivant l'interface graphique, et en activant la synthèse vocale.

Si vous utilisez un Mac, préférez l'ancienne version SimaCLI, qui ne nécessite pas de Pygame, mais qui n'est plus mis à jour.

SimaVoice est un module permettant la synthèse vocale des mots interprétés. Un mode "semi-hors-ligne" y est incorporé. C'est à dire que vous pouvez précharger des mots qui resteront dans une base de données locale, (le mode persistance peut être désactivé dans les paramètres). Ensuite si vous n'avez pas de connexion internet le module utilisera les mots déjà téléchargés si ils existent. Pour cela nous utilisons le module gTTS de Python, qui génère des fichiers mp3 avec l'API de voix virtuelle de Google. Ces fichiers sont ensuite stockés dans une base de données. Pour limiter les erreurs dûes aux accents les mots sont cryptés en MD5, et les fichiers prennent ce cryptage en nom.

Par exemple si le mot est "bonjour", donc "hello". Les fichiers générés seront stockés comme cela:

SimaSLI/
├── en-uk/
│├── 5d41402abc4b2a76b9719d911017c592.mp3
├── fr/
│└── f02368945726d5fc2a14eb576f7276c0.mp3

SimaDirect est le module qui prend en charge toutes les fonctionnalités en ligne, telles que la vérification de mise à jour automatique, ou la possibilité de se connecter à une base de données collaborative. Ce module n'est qu'en phase de développement.