Índice:

Um semáforo de padrão tipo Braille controlado por voz: 4 etapas (com imagens)
Um semáforo de padrão tipo Braille controlado por voz: 4 etapas (com imagens)

Vídeo: Um semáforo de padrão tipo Braille controlado por voz: 4 etapas (com imagens)

Vídeo: Um semáforo de padrão tipo Braille controlado por voz: 4 etapas (com imagens)
Vídeo: ATPC de 05 a 09 de Setembro de 2022 2024, Julho
Anonim
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz
Um semáforo de padrão tipo Braille controlado por voz

"Lorde Vetinari estava em sua janela observando a torre do semáforo do outro lado do rio. Todas as oito grandes venezianas voltadas para ele piscavam furiosamente - preto, branco, preto, branco, preto, branco … Informações voavam pelo ar. Vinte milhas atrás dele, em outra torre em Sto Lat, alguém estava olhando através de um telescópio e gritando números. Quão rápido o futuro vem sobre nós, ele pensou. " T. Pratchett, o quinto elefante

Depois de construir um jump jack controlado por voz baseado no kit de voz AIY, tive a ideia de construir um semáforo controlado por voz, reunindo o que há de mais recente em tecnologia de TI com o início das telecomunicações e transferência de dados.

A princípio, tive a ideia de replicar o sistema de semáforo francês da Chappe, o primeiro sistema conhecido para telecomunicações em todo o país usando um sistema de semáforo. Mas acabou sendo um pouco complicado demais para ser realizado usando servos padrão em um dia. Meu próximo alvo era algo semelhante ao sistema de clacks descrito por Terry Pratchett, por exemplo, em "Going Postal", como um sistema de semáforo do obturador 2x4 (não como a matriz 4x4 retratada no filme). Infelizmente não consegui encontrar muitos detalhes técnicos disponíveis neste sistema. Então acabei com o sistema de semáforo de matriz 2x3 desenvolvido por Lord Murray, que já era usado pela Marinha Britânica há algum tempo. Além disso, um sistema de seis obturadores / bit se encaixa bem nos seis conectores servo disponíveis no HAT de voz AIY. Mas, como não tinha seis servos disponíveis ao longo dos anos, finalmente decidi construir primeiro um simulador feito de LEDs.

Em relação ao código exibido, pode-se usar o sistema Murray, mas novamente as informações que eu tinha disponível nele são bastante limitadas, não permitindo a exibição de quaisquer números e símbolos. Então cheguei ao ponto de usar o sistema Braille, que também usa uma matriz 2x3 para exibir letras, números e outros sinais. O sistema Braille é o padrão internacional para imprimir textos legíveis para cegos. É também uma linguagem de marcação, que usa um indicador de número para definir que os números serão exibidos a seguir e indicadores para definir que uma ou várias das letras a seguir são escritas em maiúsculas. Portanto, decidi configurar um sistema ligeiramente simplificado, com números e alguns sinais definidos pela extensão Nemeth do sistema Braille, e usar apenas letras maiúsculas, pelo menos no início. Isso permite ter padrões únicos para cada letra, número ou sinal a ser exibido em meu aplicativo especial e omitir a análise de texto necessária para o Braille real.

O dispositivo final permite falar uma palavra ou frase no sistema de reconhecimento de voz AIY, então os dados do padrão de voz são enviados via WLAN e internet para algum servidor do Google nos EUA, são decodificados lá e, pelo menos no meu caso, os os dados são enviados de volta para a Europa, onde finalmente consigo a frase reconhecida exibida como uma string de texto. Essa sequência de texto é então dividida pelo script Python em letras individuais e, agora, por comparação com um dicionário que define os padrões correspondentes, as informações do padrão são recuperadas e os padrões são exibidos em uma matriz de LED 2x3. Por favor, dê uma olhada no vídeo que acompanha.

Eu defini a taxa de exibição para um caractere por segundo, que deve ser longo o suficiente para uma pessoa treinada identificar e traduzir o padrão. Um possível próximo passo seria usar um dispositivo de reconhecimento de padrões como o AIY vision HAT (até agora não disponível na Europa) para ler e interpretar os padrões automaticamente, para fechar o círculo.

Outros conceitos para melhorias, alguns com mais relevância no mundo real, são discutidos na parte 'perspectiva' deste instrutível.

Etapa 1: Materiais Usados

Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados

Raspberry Pi 3

AIY voice HAT

Oito LEDs brancos, 5 mm de diâmetro. Eles funcionam com 3 V, portanto, um resistor é necessário.

Resistor de 100kOhm. Talvez não fosse a solução perfeita, mas estava à mão.

Cabos jumper

Um pequeno pedaço de arame

Placa de ensaio, opcional para testar a configuração.

Uma caixa de plástico para cartões de visita.

Duas peças de espuma plástica de 4 mm, algumas sobras de lixo.

Algum pedaço de membrana plástica, como difusor, como acima.

Ferro de soldar e solda, uma faca.

Etapa 2: configuração e uso

Configuração e uso
Configuração e uso
Configuração e uso
Configuração e uso
Configuração e uso
Configuração e uso

Configure o Raspberry Pi e o AIY HAT conforme indicado no manual do AIY voice HAT. Eu recomendaria soldar os conectores pelo menos às portas do servo antes de montar Pi e HAT, pois isso permite que você conecte facilmente servos, uma placa de ensaio ou LEDs.

A caixa de exibição foi construída a partir da tampa de uma caixa de plástico para cartões de visita, duas peças de espuma encaixadas na caixa e uma peça de tamanho semelhante de uma membrana de embalagem como difusor. Em uma das partes de espuma, seis buracos foram empurrados e os LEDs colocados neles. Os pés mais curtos (lado do solo) dos LEDs foram conectados uns aos outros por um pedaço de cabo, então um resistor foi adicionado e um cabo jumper foi soldado ao último. Aos outros pés (lado positivo) dos LEDs foram soldados cabos jumper.

Em seguida, eles foram conectados às portas servo no HAT de voz AIY por meio de cabos de alongamento, o lado positivo para os pinos "P in" (externos) e o conector negativo para um dos pinos de aterramento / negativos (internos). Por favor, dê uma olhada no esquema em anexo.

Eu recomendo fortemente testar a configuração em uma placa de ensaio antes de soldar.

Agora a membrana, a placa de LED e a camada de vedação foram colocadas na caixa de plástico.

Coloque o script Braille_LED_1.py na pasta src. Nesse caso, pode ser necessário tornar o script executável primeiro.

Agora, usando o terminal Dev (!), O programa Braille_LED_1.py é iniciado. Digite 'src / Braille_LED_1.py' e pressione 'Enter'.

Agora você será solicitado a pressionar o botão da caixa AIY e dizer sua palavra ou frase. Com algum atraso, o sistema repetirá o que foi compreendido e exibirá na tela e também, letra por letra, no display de seis leds.

Se você fornecer a palavra-chave "Adeus" em vez de uma frase, o sistema dirá Adeus e o programa será encerrado.

Etapa 3: O Código

O código
O código

Abaixo você encontra o código que permite que você fale com o dispositivo de voz AIY e tenha a frase reconhecida exibida letra por letra em um pequeno 'semáforo' LED 2x3 ou matriz do tipo Braille.

O código é um derivado do script que usei para um projeto anterior usando o AIY voice HAT, sendo um derivado do exemplo servo_demo.py descrito no manual do AIY voice HAT.

Você também pode encontrar um dicionário com a parte do código Murray que encontrei na internet, como arquivo texto. Ele não contém números e omite algumas letras, o que seria um problema aqui.

Uma limitação do programa em seu estado atual é que, se um sinal não incluído no dicionário, ele travaria o programa. Além disso, não é uma representação do Código Braille completo como uma linguagem de marcação. Como você pode ver no script abaixo, o código Nemeth para números é redundante com alguns sinais em Braille padrão, mas isso não deve ser um problema para nossa aplicação específica.

#! / usr / bin / env python3

# Este script é uma adaptação do script servo_demo.py para o AIY Voice HAT, # otimizado para a exibição do símbolo do tipo Baille baseado em AIY import aiy.audio import aiy.cloudspeech import aiy.voicehat from gpiozero import LED #from gpiozero import Button from time import sleep # Dicionário: um alfabeto Braille modificado artificialmente, # números e alguns símbolos retirados da extensão Nemeth do Braille Braille_6A = {"": "123456", # espaço "A": "1", "B": "12 "," C ":" 14 "," D ":" 145 "," E ":" 15 "," F ":" 124 "," G ":" 1245 "," H ":" 125 ", "I": "24", "J": "245", "K": "13", "L": "123", "M": "134", "N": "1345", "O ":" 135 "," P ":" 1234 "," Q ":" 12345 "," R ":" 1235 "," S ":" 234 "," T ":" 2345 "," U ": "136", "V": "1236", "X": "1346", "Y": "13456", "Z": "1356", "W": "2456", "#": "3456 ", # Prefixo do número, ou seja, os próximos sinais são números", ":" 2 ",". ": "256", # Ponto final, fim da frase (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # A próxima letra está em maiúsculas; Número de parada? "": "", # Código Nemeth Braille é uma expansão matemática para Braille de 6 pontos # veja: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Código Nemeth '1', Braille 'vírgula' "2": "23", "3": "25", "4": "256", "5": "26", "6": "235", # Nemeth '6', Braille '!' "7": "2356", "8": "236", # Nemeth '8', Braille '?' "9": "35", "0": "356", "+": "346", "-": "36", "/": "34", "(": "12356", ") ":" 23456 "," * ":" 1346 "# '*' é um símbolo de dois padrões em Nemeth, aqui substituído por um 'x' para omitir travamentos}" "" por razões de simplicidade, os padrões de número Braille padrão fornecidos abaixo foram substituídos pelos códigos Nemeth correspondentes "1": "1", "2": "12", "3": "14", "4": "145", "5": "15", " 6 ":" 124 "," 8 ":" 1245 "," 9 ":" 24 "," 0 ":" 245 "," "" #Text = "rbhTZkl 9t64 + 34 #!" # Sampletext, para fins de depuração def main (): reconhecizer = aiy.cloudspeech.get_recognizer () reconhecizer.expect_phrase ('adeus') # palavra-chave, termina o botão do programa = aiy.voicehat.get_button () # AIY Status do botão led = aiy.voicehat.get_led () # Status do LED do botão AIY aiy.audio.get_recorder (). start () led_1 = LED (26) # 1º conector, servo0, GPIO 26 # led superior esquerdo_2 = LED (6) # 2º conector, servo1, GPIO 06 # meio esquerdo led_3 = LED (13) # 3º conector, servo2, GPIO 13 # inferior esquerdo led_4 = LED (5) # 4º conector, servo3, GPIO 05 # superior direito led_5 = LED (12) # 5º conector, servo4, GPIO 12 # meio direito led_6 = LED (24) # 4º conector, servo3, GPIO 13 # inferior direito # distância = Botão (5) # sensor de distância conectado ao servo3 / GPIO 05, não usado aqui aiy.audio.say ("Olá!",) Aiy.audio.say ("Para começar, carregue no botão",) aiy.audio.say ("Se me disser adeus, encerrarei o programa",) enquanto Verdadeiro: # inicia loop led.set_state (aiy.voicehat. LED. BLINK) print ("Para ativar o reconhecimento de voz n, pressione o botão azul e fale ") print () button.wait_for_press () print ('Ouvindo…') aiy.audio.say (" Estou ouvindo ",) led.set_state (aiy.voicehat. LED. BLINK_3) text = reconhecizer.recognize () # string de texto da frase reconhecida led.set_state (aiy.voicehat. LED. OFF) se o texto for Nenhum: aiy.audio.say ('Desculpe, não ouvi você.',) elif 'adeus' no texto: aiy.audio.say ("Adeus",) aiy.audio.say ('Arrivederci',) aiy.audio.say ('Auf Wiedersehen',) sleep (3) print ('bye! ') break # pára o loop e termina o programa else: print (' Você disse "', texto,'" ') # Permite que você verifique a interpretação do sistema, incluindo a captialização aiy.audio.say (' Acho que você disse ',) aiy.audio.say (text,) # acustic verification Text_up = text.upper () # transfere tudo para letras maiúsculas (Text_up) Text_Len = len (Text_up) print (Text_Len) para i no intervalo (Text_Len): Lett = Text_up # Escolhe uma única letra, começando com a primeira, ou seja, [0] print ("Letter =", Lett) Lett_B = Braille_6A [Lett] # Escolhe o código correspondente do dicionário. Um sinal faltando quebrará o código! print (Lett_B) if ("1" em Lett_B): print ("LED 1") led_1.on () # ativa o LED no servo0 "se" 2 "em Lett_B: print (" LED 2 ") led_2.on () if "3" em Lett_B: print ("LED 3") led_3.on () if "4" em Lett_B: print ("LED 4") led_4.on () if "5" em Lett_B: print ("LED 5 ") led_5.on () if" 6 "em Lett_B: print (" LED 6 ") led_6.on () sleep (1) # padrão de exibição para uma segunda impressão () led_1.off () # inativar todos os LEDs nos servos0 -5n led_2.off () led_3.off () led_4.off () led_5.off () led_6.off () sleep (0.3) # um pequeno intervalo escuro, para indicar o final da letra se _name_ == '_main_ ': a Principal()

Etapa 4: Outlook e comentários

Então, o que poderia ser a seguir?

Além dessa meta-piada de TI com o kit de vídeo AIY ou outro sistema de reconhecimento de imagem automatizado mencionado na introdução, pode haver outras opções para expandir o conceito descrito neste instrutível. Alguns deles podem até ser úteis no mundo real. Podem ser:

- programação melhorada, para que o texto seja transferido para o código Braille padrão, com todas as marcações e compressões. Isso não deve representar muito esforço para um programador Python habilidoso. O que eu não sou, então qualquer ajuda seria bem-vinda.

- expandir o sistema para uma matriz 2x4. Também deveria ser possível e ajudaria a usar os códigos Braille de 8 pontos correspondentes, como são usados por displays Braille eletrônicos. Acima disso, seria um pouco mais próximo do sistema de clacks Dearheart.

- construir um display Braille 2x3 ou 2x4 real. Deve ser possível usar uma série de servos ou uma série de minissolenóides de 5V. O principal desafio seria que a distância padrão entre os pontos táteis é 2,45 mm, ou 1/10 polegada, em monitores eletrônicos, portanto, algumas engrenagens e mecanismos podem ser necessários. O outro desafio pode ser regular com precisão o comprimento do impulso.

Uma solução tão simples e barata pode ser do interesse de um público mais amplo, já que os monitores Braille comerciais são muito caros. Pode haver uma vantagem para os alunos de Braille que usam esse sistema controlado por voz. Como eles podem inserir verbalmente uma frase (em inglês) de sua escolha e obter o texto, as letras e os sinais exibidos na (s) ponta (s) de seus dedos.

- construir um sistema de obturador mecânico semelhante aos sistemas Murray ou Dearheart. Usando servos, isso não deve ser muito complicado e pode ser descrito em outro instrutível. Ou poderia ser um bom projeto escolar. Alguém interessado?

–――――

Algumas observações e links de interesse:

- Há um instrutivo que descreve uma "lanterna semáforo DIY", uma matriz de LED 2x4, baseada em alguma placa de demonstração do Propeller. Eu gosto do layout, mas a programação parece um pouco complicada para mim. Por favor, olhe você mesmo.

- Agora encontrei um programa python para gerar Braille Totalmente Contratado (Grau 2). Infelizmente está limitado ao python 2 e à versão em inglês americano de 2002:

- um programa mais completo parece ser liblouis, https://github.com/liblouis/liblouis, mas não tenho ideia de como integrar isso a esta solução.

- uma solução python interessante parece vir da Grécia, https://github.com/ant0nisk/pybrl pode integrar várias linguagens e gerar Braille grau 2.

- Não sou programador, nem eletricista, nem tinha muito conhecimento em Braille há alguns dias.

Portanto, se você encontrar algum erro, omissão ou tiver alguma ideia para o projeto, por favor, me avise.

- Se você gosta deste instrutível, por favor vote nele!

Recomendado: