L'histoire de la création de l'interprète en langue des signes

Contexte


Au début de cette année scolaire (17-18), l'administration de notre bien-aimé lycée nous a dit: «A la fin de l'année, chacun de vous doit protéger un projet individuel. Ceux qui ne protègent pas le projet auront un académicien. dette et gosy (GIA-9), ils ne seront pas autorisés. " Il s'avère quelque chose comme une thèse (en 9e année, juste super). De septembre à décembre, mon ami Kirill ( kkirra ) et moi avons décidé du type de projet que nous allions faire: je voulais quelque chose de pas très difficile à exécuter, mais en même temps quelque chose de spectaculaire et d'original. En fin de compte, nous avons décidé: nous avons décidé de faire un modèle d'une main humaine, et même tel qu'il exécutait un appareil Android (cette année, Cyril et moi sommes entrés accidentellement dans l'école informatique Samsung basée sur notre lycée, nous avons donc voulu utiliser les connaissances acquises dans le projet) elle a traduit le texte saisi en langue des signes.

Partie logiciel


Application Android


Environ un mois avant la date limite, nous avons commencé à travailler sur le projet. La première étape du travail a été le développement d'une application Android.

Pour être honnête, la mise en page de l'application a été et reste la plus difficile pour moi: j'ai des problèmes avec ces mises en page et leurs types (je suis encore en neuf et même en physique et mathématiques). Il est également assez difficile de rendre l'application aussi belle sur tous les appareils.

Une autre tâche difficile, en plus du balisage, était de visser le bluetooth à l'application (nous avons décidé de mettre en œuvre la connexion entre l'appareil Android et le modèle via bluetooth): nous ne l'avons pas appris dans les cours de l'école Samsung, mais il n'y a pas beaucoup d'informations à ce sujet sur Internet ( Je veux dire des informations sur la mise en œuvre de la connexion entre l'appareil Android et l'arduino, qui était contrôlée par le modèle).

Maintenant, un peu sur le code lui-même (lien vers GitHub à la toute fin de l'article). Le programme se compose de quatre activités: l'écran de démarrage et une activité pour chaque mode de contrôle.

  • Le premier mode de contrôle est le mode de saisie de texte, lorsque l'utilisateur entre le texte manuellement
  • La seconde - à l'aide de la voix, l'application reconnaît le discours de l'utilisateur.
  • Le troisième est le mode manuel. L'utilisateur peut modifier manuellement la position des doigts pour représenter des gestes non fournis par le programme.

Pour être honnête, j'ai très honte de mon code: il semble inachevé. Le fait est que j'ai pu encapsuler la connexion Bluetooth dans une classe distincte, créer la méthode de connexion, envoyer des données, déconnecter, etc., mais à la place, dans chaque activité, j'ai à nouveau enregistré tout ce qui précède, car l'encapsulation a conduit à certains (pas très gros) problèmes. Néanmoins, pour les résoudre, il fallait passer un peu de temps à étudier le travail du bluetooth, et moi, comme, j'étais pressé d'écrire le code pour qu'il y ait du temps pour développer et implémenter le matériel.

Programmation Arduino


Dans le processus de mise en œuvre de la partie logicielle, il était nécessaire de programmer le microcontrôleur Arduino, qui recevait les données d'un smartphone et contrôlait le manipulateur. Une bibliothèque a été écrite qui contenait des données sur la connexion des servos à Arduino (avec quels contacts connecter les servos) et les méthodes de traduction du texte en langue des signes. La partie principale de la bibliothèque est une matrice, qui contient des informations sur la position de chaque doigt, les lettres correspondantes de l'alphabet russe et diverses méthodes pour simplifier le code. La matrice est donnée ci-dessous.

const int navigate [Hand::n][Hand::m]= { {224, 180, 180, 180, 180, 180},// {225, 90, 0, 180, 180, 180},// {226, 0, 0, 0, 0, 0},// {227, 0, 90, 180, 180, 180},// {228, 180, 0, 0,180, 180},// {229, 90, 180, 180, 90, 90},// {230, 90, 180, 180, 90, 90},// {231, 180, 0, 180, 180, 180},// {232, 180, 180, 180, 0, 0},// {233, 180, 180, 180, 0, 0},// {234, 180, 0, 0,180, 180},// {235, 180, 90, 90, 180, 180},// {236, 180, 90, 90, 90, 180},// {237, 180, 0, 0, 180, 0},// {238, 90, 180, 0, 0, 0},// {239, 180, 90, 90, 180, 180},// {240, 180, 0, 180, 0, 0},// {241, 90, 90, 90, 90, 90},// {242, 180, 90, 90, 90, 180},// {243, 0, 180, 180, 180, 0},// {244, 0, 90, 90, 90, 90},// {245, 0, 0, 180, 180, 180},// {246, 180, 0, 0, 180, 180},// {247, 0, 90, 180, 180, 180},// {248, 180, 0, 0, 0, 180},// {249, 180, 0, 0, 0, 180},// {250, 0, 0, 180, 180, 180},// {251, 0, 90, 180, 180, 90},// {252, 0, 0, 180, 180, 180},// {253, 90, 90, 180, 180, 180},// {254, 0, 90, 90, 90, 0},// {255, 90, 90, 90, 180, 180}};// 

«Hand» est un fichier d'en-tête de bibliothèque (avec l'extension «.h») contenant des prototypes de fonctions et de constantes.

Maintenant, quelques mots sur les méthodes de traduction. La méthode de traduction des caractères reçoit le codage des lettres à l'entrée, recherche la ligne souhaitée (le premier élément de chaque ligne de la matrice est le code de symbole) et définit les servos en fonction des degrés de rotation indiqués dans la ligne (les codes de symboles sont placés dans le tableau afin que le codage puisse être modifié si vous le souhaitez) , sans changer tout le code) puis il attend quelques secondes pour que les gestes puissent être lus et qu'ils ne se suivent pas. La méthode de traduction de phrases divise la phrase en caractères et utilise la méthode de traduction de caractères.

La méthode de traduction des caractères:

 void Hand :: SymbolTranslate(unsigned char a){ //    int str=-1; int i; for(i=0; i<n; i++){ if(navigate[i][0]==(int)(a)){ str=i; break; } } if(str==-1){ return; } else{ First.write(navigate[str][1]); //     Second.write(navigate[str][2]); Third.write(navigate[str][3]); Fourth.write(navigate[str][4]); Fifth.write(navigate[str][5]); delay(200); Serial.println(str); Serial.println("Succsessfull"); } } 

Méthode de traduction de la proposition:

 void Hand :: SentenceTranslate(char* s){ //    unsigned char a; for(int i=0; i< strlen(s); i++){ a=s[i]; SymbolTranslate(a); delay(2000); } } 

Les méthodes enregistrent également les messages avec le texte accepté et le résultat de la traduction (imprimé «Succsessfull»), ce qui nous a beaucoup aidés lors du débogage d'un code Arduino inactif .

Matériel informatique


La mise en œuvre de cette phase du projet a été réalisée par la kkirra susmentionnée. Avant de commencer le travail, il semblait que développer des dessins du manipulateur et l'assembler serait une tâche très simple, mais ce n'est pas du tout le cas.

Initialement, nous voulions imprimer les détails du manipulateur sur une imprimante 3D, nous avons pris les plans d'une banque de projets française ouverte (nous avons également dessiné les nôtres, mais nous avons décidé par la suite qu'il valait mieux les obtenir en open source), mais après avoir envoyé les plans pour l'impression, nous avons appris que pour l'impression nos pièces prendront plusieurs semaines, ce que nous n'avions pas à l'époque. Ensuite, nous avons décidé d'assembler un manipulateur à partir de matériaux improvisés: un avant-bras en plaques métalliques, des doigts en contreplaqué. Les doigts pliés à cause de servos sous le contrôle du microcontrôleur Arduino. Un exemple de dessin est présenté ci-dessous.

image

  • Couleur rouge - l'axe de rotation des doigts, si vous regardez les doigts des gens - ce sont des articulations
  • Vert - petites bandes élastiques qui ramènent les doigts à leur position d'origine (c.-à-d. Tendon)

Conclusion


Pour résumer. Nous avons assemblé et programmé un interprète en langue des signes (nous l'appelons brièvement «moignon» pour son apparence). Notre projet permet aux personnes qui ne connaissent pas la langue des signes de communiquer avec des personnes malentendantes en utilisant l'alphabet des signes russe. La mise en œuvre du logiciel vous permet de changer rapidement le code et, sans rien casser, d'y ajouter d'autres langues des signes (par exemple, l'anglais).
À l'avenir, nous prévoyons d'imprimer le modèle précédemment sélectionné sur une imprimante 3D et de l'assembler (nous allons le faire lorsque nous prendrons une pause dans les examens et autres absurdités).

En général, cela s'est avéré assez bon, mais pas très beau en termes de firmware et d'apparence, mais l'essentiel est un projet de travail. Nous avons beaucoup appris en travaillant sur ce projet (par exemple, le fait que nous devons commencer à travailler sur un projet conçu pour toute l'année, au début de l'année, et pas quelques semaines avant la livraison) et pour cela, nous sommes très reconnaissants envers les enseignants qui nous ont aidés et en particulier envers Damir Muratovich, notre scientifique, qui nous a aidés à résoudre la plupart des problèmes liés au projet.

Merci d'avoir lu jusqu'au bout!

Si cela vous a intéressé, tous les documents du projet (y compris le texte de l'ouvrage, les présentations, etc.) sont accessibles au public ici .

Merci encore pour votre attention!

Source: https://habr.com/ru/post/fr415681/


All Articles