A história da criação do intérprete de linguagem gestual

Antecedentes


No início deste ano letivo (17-18), a administração de nosso amado liceu nos disse: “No final do ano, cada um de vocês deve proteger um projeto individual. Quem não proteger o projeto terá um acadêmico. dívida e gosy (GIA-9) eles não serão permitidos. " Acontece algo como uma tese (na 9ª série, apenas super). De setembro a dezembro, meu amigo Kirill ( kkirra ) e eu decidimos que tipo de projeto estaríamos realizando: queria algo não muito difícil de executar, mas ao mesmo tempo algo espetacular e original. No final, decidimos: decidimos fazer um modelo de uma mão humana, e até mesmo para que ele estivesse executando um dispositivo Android (este ano, Cyril e eu acidentalmente entramos na escola de TI da Samsung com base em nosso liceu, então queríamos usar o conhecimento adquirido no projeto) ela traduziu o texto inserido para a linguagem de sinais.

Parte do software


Aplicativo para Android


Cerca de um mês antes do prazo, começamos a trabalhar no projeto. A primeira etapa do trabalho foi o desenvolvimento de um aplicativo para Android.

Para ser honesto, o layout do aplicativo foi e continua sendo o mais difícil para mim: eu tenho problemas com esses layouts e seus tipos (ainda sou aluno de nove anos e até mesmo de física e matemática). Tornar o aplicativo igualmente bonito em todos os dispositivos também é bastante difícil.

Outra tarefa difícil, além da marcação, foi parafusar o bluetooth no aplicativo (decidimos implementar a conexão entre o dispositivo Android e o modelo via bluetooth): não aprendemos isso nos cursos da Samsung, mas não há muita informação sobre ele na Internet ( Quero dizer informações sobre a implementação da conexão entre o dispositivo Android e o Arduino, que foi controlado pelo modelo).

Agora, um pouco sobre o código em si (link para o GitHub no final deste artigo). O programa consiste em quatro atividades: a tela inicial e uma atividade para cada modo de controle.

  • O primeiro modo de controle é o modo de entrada de texto, quando o usuário digita o texto manualmente
  • O segundo - com a ajuda da voz, o aplicativo reconhece o discurso do usuário.
  • O terceiro é o modo manual. O usuário pode alterar manualmente a posição dos dedos para representar gestos não fornecidos pelo programa.

Para ser sincero, tenho muita vergonha do meu código: parece inacabado. O fato é que eu poderia encapsular a conexão bluetooth em uma classe separada, criando o método de conexão, enviar dados, desconectar etc. etc., mas, em cada atividade, registrei tudo isso acima novamente, porque o encapsulamento levou a algumas (não muito grandes) problemas. No entanto, para resolvê-los, foi necessário dedicar algum tempo a estudar o trabalho do bluetooth, e eu, com pressa, escrevi o código para que houvesse tempo para desenvolver e implementar o hardware.

Programação Arduino


No processo de implementação da parte do software, foi necessário programar o microcontrolador Arduino, que recebeu dados de um smartphone e controlou o manipulador. Foi criada uma biblioteca que continha dados sobre a conexão de servos ao Arduino (com os quais os contatos se conectam) e métodos para traduzir texto em linguagem de sinais. A parte principal da biblioteca é uma matriz, que contém informações sobre a posição de cada dedo, as letras correspondentes do alfabeto russo e vários métodos para simplificar o código. A matriz é dada abaixo.

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" é um arquivo de cabeçalho da biblioteca (com a extensão ".h") que contém protótipos de funções e constantes.

Agora, algumas palavras sobre métodos de tradução. O método de conversão de caracteres recebe a codificação de letras na entrada, procura a linha desejada (o primeiro elemento de cada linha da matriz é o código do símbolo) e define os servos de acordo com os graus de rotação indicados na linha (os códigos de símbolos são colocados na tabela para que a codificação possa ser alterada, se desejado sem alterar o código inteiro) e aguarda alguns segundos para que os gestos possam ser lidos e não sigam um após o outro. O método de tradução de frases divide a frase em caracteres e usa o método de tradução de caracteres.

O método de tradução dos caracteres:

 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étodo de tradução da proposta:

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

Os métodos também registram mensagens com o texto aceito e o resultado da tradução (“Succsessfull” é impresso), o que nos ajudou bastante ao depurar um código inativo do arduino.

Hardware


A implementação desta fase do projeto foi realizada pela kkirra acima mencionada. Antes de começar o trabalho, parecia que desenvolver desenhos do manipulador e montá-lo seria uma tarefa muito simples, mas esse não é o caso.

Inicialmente, queríamos imprimir os detalhes do manipulador em uma impressora 3D, pegamos as plantas de um banco de projetos francês aberto (também desenhámos as nossas, mas depois decidimos que era melhor obtê-las de código aberto), mas, depois de enviar as plantas para impressão, aprendemos isso para impressão nossas peças levarão várias semanas, o que não tínhamos na época. Decidimos montar um manipulador a partir de materiais improvisados: um antebraço de placas de metal, dedos de madeira compensada. Dedos dobrados devido a servos sob o controle do microcontrolador Arduino. Um desenho de amostra é apresentado abaixo.

imagem

  • Cor vermelha - o eixo de rotação dos dedos, se você olhar para os dedos das pessoas - são articulações
  • Verde - pequenas bandas elásticas que retornam os dedos à sua posição original (isto é, tendão)

Conclusão


Para resumir. Reunimos e programamos um intérprete de linguagem gestual (chamamos brevemente de “coto” por sua aparência). Nosso projeto permite que pessoas que não conhecem a linguagem de sinais se comuniquem com pessoas com deficiência auditiva usando o alfabeto russo. A implementação do software permite alterar rapidamente o código e, sem quebrar nada, adicionar outras linguagens de sinais a ele (por exemplo, inglês).
No futuro, planejamos imprimir o modelo selecionado anteriormente em uma impressora 3D e montá-lo (faremos isso quando fizermos uma pausa nos exames e outras bobagens).

Em geral, ficou muito bom, embora não muito bonito em termos de firmware e aparência, mas o principal é um rascunho. Aprendemos muito enquanto trabalhamos neste projeto (por exemplo, o fato de que precisamos começar a trabalhar em um projeto projetado para o ano todo, no início do ano e não duas semanas antes da entrega) e por isso somos muito gratos aos professores que nos ajudaram e, principalmente, a Damir Muratovich, nosso cientista científico, que nos ajudou a resolver a maioria dos problemas associados ao projeto.

Obrigado por ler até o fim!

Se isso se tornou interessante para você, todos os materiais do projeto (incluindo o texto do trabalho, apresentações etc.) estão disponíveis para acesso público aqui .

Mais uma vez obrigado pela atenção!

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


All Articles