Tabla de contenido:

Un semáforo de patrón de tipo Braille controlado por voz: 4 pasos (con imágenes)
Un semáforo de patrón de tipo Braille controlado por voz: 4 pasos (con imágenes)

Video: Un semáforo de patrón de tipo Braille controlado por voz: 4 pasos (con imágenes)

Video: Un semáforo de patrón de tipo Braille controlado por voz: 4 pasos (con imágenes)
Video: Por andar de chistosito 😮‍💨 2024, Noviembre
Anonim
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz
Un semáforo de patrón de tipo Braille controlado por voz

Lord Vetinari estaba de pie en su ventana mirando la torre del semáforo al otro lado del río. Las ocho grandes contraventanas que estaban frente a él parpadeaban furiosamente: negro, blanco, negro, blanco, negro, blanco … La información volaba por el aire. Veinte millas detrás de él, en otra torre en Sto Lat, alguien miraba a través de un telescopio y gritaba números. Qué rápido nos llega el futuro, pensó. T. Pratchett, El quinto elefante

Después de construir un gato de salto controlado por voz basado en el kit de voz AIY, tuve la idea de construir un semáforo controlado por voz, uniendo lo último en tecnología de TI con los inicios de las telecomunicaciones y la transferencia de datos.

Al principio tuve la idea de replicar el sistema de semáforos francés de Chappe, que fue el primer sistema conocido de telecomunicaciones a nivel nacional que utiliza un sistema de semáforos. Pero resultó ser demasiado complicado para realizarlo usando servos estándar en un día. Mi siguiente objetivo era algo similar al sistema de clacks descrito por Terry Pratchett, p. Ej. en "Going Postal", como un sistema de semáforo de obturador de 2x4 (no como la matriz de 4x4 que se muestra en la película). Desafortunadamente, no pude encontrar demasiados detalles técnicos disponibles en este sistema. Así que terminé con el sistema de semáforo de matriz 2x3 desarrollado por Lord Murray, que había sido utilizado por la Armada británica durante un tiempo. Además, un sistema de seis obturadores / bit encaja bien con los seis conectores servo disponibles en el AIY voice HAT. Pero, como no tenía seis servos a mano entre los años, finalmente decidí construir primero un simulador hecho de LED.

Con respecto al código mostrado, se podía usar el sistema Murray, pero nuevamente la información que tenía disponible era bastante limitada, no permitía mostrar números ni símbolos. Así que llegué al punto de usar el sistema Braille en su lugar, que también usa una matriz de 2x3 para mostrar letras, números y otros signos. El sistema Braille es el estándar internacional para imprimir textos legibles para ciegos. También es un lenguaje de marcado, que utiliza un indicador numérico para definir qué números se mostrarán a continuación, e indicadores para definir que una o muchas de las siguientes letras se escriben en mayúsculas. Por lo tanto, decidí establecer un sistema ligeramente simplificado, con números y algunos signos definidos por la extensión Nemeth del sistema Braille, y solo usar letras mayúsculas, al menos al principio. Esto permite tener patrones únicos para cada letra, número o signo que se mostrará en mi aplicación especial, y omitir el análisis de texto requerido para el Braille real.

El dispositivo final permite decir una palabra u oración en el sistema de reconocimiento de voz AIY, luego los datos del patrón de voz se envían a través de WLAN e Internet a algún servidor de Google en los EE. UU., Se decodifican allí y, al menos en mi caso, se interpretan. los datos se envían de regreso a Europa, donde finalmente obtengo la oración reconocida que se muestra como una cadena de texto. Luego, el script Python divide esta cadena de texto en letras individuales y, ahora, en comparación con un diccionario que define los patrones correspondientes, se recupera la información del patrón y los patrones se muestran en una matriz de LED de 2x3. Por favor, eche un vistazo al video adjunto.

Establecí la velocidad de visualización en un carácter por segundo, que debería ser lo suficientemente larga para que una persona capacitada pueda identificar y traducir el patrón. Un posible siguiente paso sería utilizar un dispositivo de reconocimiento de patrones como el AIY vision HAT (hasta ahora no disponible en Europa) para leer e interpretar los patrones automáticamente, para cerrar el círculo.

Más conceptos para mejoras, algunos con mayor relevancia en el mundo real, se discuten en la parte de "perspectivas" de este instructivo.

Paso 1: Materiales utilizados

Materiales usados
Materiales usados
Materiales usados
Materiales usados

Frambuesa pi 3

SOMBRERO de voz AIY

Ocho LED blancos de 5 mm de diámetro. Estos funcionan con 3 V, por lo que se necesita una resistencia.

Resistencia de 100 kOhmios. Quizás no sea la solución perfecta, pero estaba al alcance de la mano.

Cables de salto

Un pequeño trozo de alambre

Protoboard, opcional para probar la configuración.

Una caja de plástico para tarjetas de visita.

Dos piezas de espuma plástica de 4 mm, algunas sobras de basura.

Algún trozo de membrana plástica, como difusor, como arriba.

Soldador y soldadura, un cuchillo.

Paso 2: configuración y uso

Configuración y uso
Configuración y uso
Configuración y uso
Configuración y uso
Configuración y uso
Configuración y uso

Configure la Raspberry Pi y AIY HAT como se indica en el manual AIY Voice HAT. Recomendaría soldar los encabezados al menos a los puertos de servo antes de ensamblar Pi y HAT, ya que esto le permite conectar fácilmente servos, una placa de pruebas o LED.

La caja de presentación se construyó a partir de la tapa de una caja de plástico para tarjetas de visita, dos piezas de espuma que encajan en la caja y una pieza de membrana de embalaje de tamaño similar como difusor. En una de las partes de espuma se empujaron seis orificios y se colocaron los LED en ellos. Los pies más cortos (lado de tierra) de los LED se conectaron entre sí mediante un trozo de cable, luego se agregó una resistencia y se soldó un cable de puente a este último. A los otros pies (lado positivo) de los LED se soldaron cables de puente.

Estos luego se conectaron a los puertos servo en el SOMBRERO de voz AIY a través de cables de alargamiento, el lado positivo a los pines "P in" (externos), el conector negativo a uno de los pines (internos) de tierra / menos. Por favor, eche un vistazo al esquema adjunto.

Recomiendo encarecidamente probar la configuración en una placa de pruebas antes de soldar.

Ahora la membrana, la placa LED y la capa de sellado se colocaron en la caja de plástico.

Coloque el script Braille_LED_1.py en la carpeta src. En caso de que tenga que hacer que el script sea ejecutable primero.

Ahora, usando la terminal Dev (!), Se inicia el programa Braille_LED_1.py. Ingrese 'src / Braille_LED_1.py' y presione 'Enter'.

Ahora se le pedirá que presione el botón del cuadro AIY y diga su palabra u oración. Con cierta demora, el sistema repetirá lo que se había entendido y lo mostrará en la pantalla, así como, letra por letra, en la pantalla de seis LED.

Si le da la palabra clave "Adiós" en lugar de una oración, el sistema le dirá Adiós y el programa se cerrará.

Paso 3: el código

El código
El código

A continuación, encontrará el código que le permite hablar con el dispositivo de voz AIY y hacer que la oración reconocida se muestre letra por letra en un pequeño semáforo de 2x3 LED o una matriz de tipo Braille.

El código es un derivado del script que usé para un proyecto anterior usando AIY voice HAT, siendo un derivado del ejemplo servo_demo.py descrito en el manual AIY voice HAT.

También puede encontrar un diccionario con la parte del código Murray que encontré en Internet, como archivo de texto. Tampoco contiene números y omite algunas letras, lo que daría un problema aquí.

Una limitación del programa en su estado actual es que si un letrero no está incluido en el diccionario, bloqueará el programa. Además, no es una representación del Código Braille completo como lenguaje de marcado. Como puede ver en el script a continuación, el código Nemeth para números es redundante con algunos signos en Braille estándar, pero eso no debería ser un problema para nuestra aplicación específica.

#! / usr / bin / env python3

# Este script es una adaptación del script servo_demo.py para AIY voice HAT, # optimizado para AIY tipo Baille display import aiy.audio import aiy.cloudspeech import aiy.voicehat from gpiozero import LED #from gpiozero import Button from time import sleep # Diccionario: un alfabeto Braille modificado artificialmente, # números y algunos símbolos tomados de la extensión Nemeth del Braille Braille_6A = {"": "123456", # espacio "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 ", # Prefijo numérico, es decir, los siguientes signos son números", ":" 2 ",". ": "256", # Punto final, fin de frase (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # La siguiente letra está en mayúsculas; Number-Stop? "": "", # El código Braille Nemeth es una expansión matemática del Braille de 6 puntos # consulte: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Código Nemeth '1', Braille 'coma' "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 "# '*' es un símbolo de dos patrones en Nemeth, aquí reemplazado por una 'x' para omitir bloqueos}" "" por razones de simplicidad, los patrones numéricos estándar de Braille dados a continuación fueron reemplazados por los correspondientes códigos Nemeth "1": "1", "2": "12", "3": "14", "4": "145", "5": "15", " 6 ":" 124 "," 8 ":" 1245 "," 9 ":" 24 "," 0 ":" 245 "," "" #Texto = "rbhTZkl 9t64 + 34 #!" # Texto de muestra, con fines de depuración def main (): Recognizer = aiy.cloudspeech.get_recognizer () Recognizer.expect_phrase ('adiós') # palabra clave, finaliza el programa button = aiy.voicehat.get_button () # AIY Estado del botón led = aiy.voicehat.get_led () # AIY Botón-LED estado aiy.audio.get_recorder (). start () led_1 = LED (26) # 1er conector, servo0, GPIO 26 # superior izquierda led_2 = LED (6) # 2do conector, servo1, GPIO 06 # medio izquierdo led_3 = LED (13) # 3er conector, servo2, GPIO 13 # inferior izquierdo led_4 = LED (5) # 4o conector, servo3, GPIO 05 # superior derecho led_5 = LED (12) # 5to conector, servo4, GPIO 12 # medio derecho led_6 = LED (24) # 4to conector, servo3, GPIO 13 # abajo a la derecha # distancia = Botón (5) # sensor de distancia conectado a servo3 / GPIO 05, no usado aquí aiy.audio.say ("¡Hola!",) Aiy.audio.say ("Para comenzar, por favor presione el botón",) aiy.audio.say ("Si me dices adiós, terminaré el programa",) mientras True: # comienza loop led.set_state (aiy.voicehat. LED. BLINK) print ("Para activar el reconocimiento de voz n, presione el botón azul, luego hable ") print () button.wait_for_press () print ('Escuchando…') aiy.audio.say (" Estoy escuchando ",) led.set_state (aiy.voicehat. LED. BLINK_3) text = Recognizer.recognize () # cadena de texto de la oración reconocida led.set_state (aiy.voicehat. LED. OFF) si el texto es None: aiy.audio.say ('Lo siento, no te escuché.',) elif 'adiós' en el texto: aiy.audio.say ("Adiós",) aiy.audio.say ('Arrivederci',) aiy.audio.say ('Auf Wiedersehen',) dormir (3) imprimir ('¡adiós! ') break # detiene el bucle y finaliza el programa else: print (' Dijiste "', texto,'" ') # Te permite verificar la interpretación del sistema, incluida la captialización aiy.audio.say (' Supongo que dijiste ',) aiy.audio.say (texto,) # verificación acústica Text_up = text.upper () # transfiere todo a mayúsculas (Text_up) Text_Len = len (Text_up) print (Text_Len) para i en el rango (Text_Len): Lett = Text_up # Escoge una sola letra, comenzando con la primera, es decir, [0] print ("Letter =", Lett) Lett_B = Braille_6A [Lett] # Escoge el código correspondiente de la diccionario. ¡Un letrero faltante romperá el código! print (Lett_B) if ("1" en Lett_B): print ("LED 1") led_1.on () # activa LED en servo0 "si" 2 "en Lett_B: print (" LED 2 ") led_2.on () si "3" en Lett_B: print ("LED 3") led_3.on () si "4" en Lett_B: print ("LED 4") led_4.on () si "5" en Lett_B: print ("LED 5 ") led_5.on () si" 6 "en Lett_B: print (" LED 6 ") led_6.on () sleep (1) # muestra el patrón para una segunda impresión () led_1.off () # desactiva todos los LED en servos0 -5n led_2.off () led_3.off () led_4.off () led_5.off () led_6.off () sleep (0.3) # un breve descanso oscuro, para indicar el final de la letra si _name_ == '_main_ ': principal()

Paso 4: Outlook y comentarios

Entonces, ¿qué podría ser el próximo?

Además de esa metabroma de TI con el kit de video AIY u otro sistema de reconocimiento de imágenes automatizado mencionado en la introducción, puede haber otras opciones para expandir el concepto descrito en este instructivo. Algunos de ellos incluso podrían ser de uso real. Estos pueden ser:

- Programación mejorada, para que el texto se transfiera a código Braille estándar, con todas las marcas y compresiones. Eso no debería ser un gran esfuerzo para un programador experto en Python, lo cual yo no soy, por lo que cualquier ayuda sería bienvenida.

- ampliar el sistema a una matriz de 2x4. También debería ser posible, y ayudaría a utilizar los códigos Braille de 8 puntos correspondientes, como se utilizan en las pantallas braille electrónicas. Por encima de esto, estaría un poco más cerca del sistema de clacks de Dearheart.

- Construya una pantalla Braille real de 2x3 o 2x4. Debería ser posible utilizando una serie de servos o una serie de mini solenoides de 5V. El desafío principal sería que la distancia estándar entre los puntos táctiles es de 2,45 mm, o 1/10 de pulgada, en las pantallas electrónicas, por lo que es posible que se requieran algunos engranajes y mecanismos. El otro desafío podría ser regular con precisión la longitud de empuje.

Una solución tan simple y barata podría ser de interés para un público más amplio, ya que las pantallas braille comerciales son bastante caras. Podría ser beneficioso para los estudiantes de Braille que utilicen un sistema controlado por voz de este tipo. Como podrían ingresar verbalmente una oración (en inglés) de su elección y obtener el texto, las letras y los signos en la punta de sus dedos.

- construir un sistema de persianas mecánicas que se parezca a los sistemas Murray o Dearheart. Usando servos, eso no debería ser demasiado complicado y podría describirse en otro instructivo. O podría ser un buen proyecto escolar. ¿Alguien interesado?

–――――

Algunas observaciones y enlaces de interés:

- Hay un instructivo que describe una "linterna de semáforo de bricolaje", una matriz LED de 2x4, basada en una placa de demostración Propeller. Me gusta el diseño, pero la programación me parece un poco complicada. Por favor, mírelo usted mismo.

- Ahora encontré un programa de Python para generar Braille totalmente contraído (grado 2). Desafortunadamente, está limitado a Python 2 y la versión en inglés americano de 2002:

- un programa más completo parece ser liblouis, https://github.com/liblouis/liblouis, pero no tengo idea de cómo integrar esto en esta solución.

- una solución de Python interesante parece provenir de Grecia, https://github.com/ant0nisk/pybrl puede integrar varios idiomas y generar Braille de grado 2.

- No soy programador, ni de electrónica, ni tenía muchos conocimientos de Braille hace unos días.

Entonces, si ve algún error, omisión o tiene algunas ideas para el proyecto, hágamelo saber.

- Si te gusta este instructivo, ¡vota por él!

Recomendado: