EDUCACIÓN Y TECNOLOGÍA
  • Curso Python
  • Recursos
  • Sobre mi
  • Contacto
  • Política de privacidad, información sobre Cookies y Amazon Afiliados
  • Blog

Botón de texto

De cómo acabé haciendo un traductor braille

9/15/2016

7 Comentarios

 
Todo empezó con el clásico momento (cada vez más habitual para mí) que surge un problema que se podría resolver por medios alternativos pero claramente todo lo que no sea programar, diseñar o imprimir es poco emocionante.
Para una ocasión especial de un momento relativamente cercano en mi vida tenía que regalar unos marcapáginas personalizados (obviamente añadí colgando unos diseños impresos en 3D, pero no es momento para hablar de ello). Uno de los invitados era invidente y se me ocurrió regalarle una tarjeta con texto en Braille para que pudiese leerlo. Podría haber pedido a algún amigo suyo que me ayudase pues tienen máquinas para hacer una hoja con texto en Braille, pero realmente lo que yo quería era una tarjeta impresa en 3D. Y ahí empezó la aventura…
Primera idea, encontrarlo en plano (en 2D) y convertirlo a un diseño 3D con algún programa que admita diseños vectoriales. Seguro que hay traductores online que pueden hacer el trabajo sucio… Meec, ¡error! Traducen castellano, sí, pero resulta que el Braille no es igual en todos los países latinos (o eso creo haber discernido). Los que encontré no traducen en el Braille que aparece como oficial en la página de la ONCE.
En ese momento empecé a descubrir la cruda realidad: iba a tener que diseñar el texto letra a letra. Podría diseñar la traducción del texto definitivo que quería para el detalle, pero sería algo poco útil. El reto terminaría ahí y lo conseguido caería en el olvido tras el evento así que decidí hacer un programa que tradujera un texto cualquiera a un diseño 3D con Braille.
Lo óptimo, llegados a este punto, sería un programa que permitiese diseñar en 3D mediante código y poder de esta forma programar la traducción automática.
Por mis conocimientos de programas me decanté rápidamente por OpenSCAD pues parecía sencillo crear lo que necesitaba (sencillo en programación no es para nada sinónimo de rápido). La idea inicial: una función que al llamarla indicases cuál de los seis puntos que compone cada caracter Braille quieres que aparezcan.
Manos a la obra: decidí crear una función (módulo en OpenSCAD) sencilla:
Imagen
Ahora sólo quedaba llamar al módulo creado indicándole los puntos (de los seis disponibles) que quería que apareciesen. Para ello tenía que indicar con un 1 que quería que apareciese y con 0 que no quería.
Llegó la hora de decidir finalmente entre programar un traductor o usar ese módulo para hacer un texto en concreto… y, como no, me decanté por la primera opción. He de decir que siempre me parece sencillo el proceso hasta que entro en el bucle casi infinito de iteraciones modificando el programa para optimizarlo.
Para hacer un traductor necesitaba crear todas las letras y símbolos del alfabeto (no he incluído los números, lo dejo para otro momento). Así que me puse a crear un módulo para cada letra:
Imagen
Posteriormente, una vez creados todos los módulos, llegó el momento de generar un programita que recorriese un texto y fuese sustituyendo cada caracter por su equivalencia en Braille. Sencillo, pues sólo tenía que seguir un esquemita que encontré por Google con las medidas normalizadas para saber las separaciones entre los caracteres:
Imagen
Total, sólo tenía que separar cada letra en Braille 6 milímetros. Estaba yo feliz con mi programa, sencillo, que funcionaba bien cuando llegó la cruda realidad a tocar las narices: en Braille las mayúsculas son dos caracteres, uno que indica que la siguiente letra es mayúscula y otro que indica la letra. Se acabó la magia de recorrer un texto (en código, string).
Intenté programar un bucle que recorriese el texto y guardase la posición que tenía que ocupar cada letra del mismo al ser traducida al Braille, pero resulta que los bucles en OpenSCAD tienen aún opciones reducidas y no fuí capaz de hacerlo (que no digo que no se pueda, pero soy un novato en estas lides).
Pero… si la cruda realidad es capaz de tocar las narices no voy a ser yo menos. ¿Por qué no complicarme la vida creando un programa en Python que genere un programa OpenSCAD? ¡Con Python sí que sería muy sencillo recorrer un string e ir almacenando las posiciones de cada letra en función de si es mayúscula o minúscula!
He de decir que el programa final no está todo lo depurado que quisiera y tiene fallos de esos que no impiden un buen funcionamiento pero destrozan los ojos de personas avezadas en el código, pero poco a poco iré mejorándolo.
El caso es que he conseguido un script de Python que te genera un archivo .SCAD que puede abrir OpenSCAD con el texto traducido a Braille listo para ser renderizado y exportado como STL para imprimirlo en 3D, aquí tenéis un vídeo resumen:
Otro problemita que me encontré, tras conseguir el STL, fue imprimir la plaquita. El caso es que la lógica dice que imprimas algo de este estilo en horizontal, pero la realidad es que los puntos, con las impresoras por deposición de plástico, acaban con un “pinchito” debido al viaje de la impresora desde el final de cada esfera (punto en Braille) a la siguiente.
Por ello, es mejor imprimirla de canto, es decir, en vertical. Hay que poner una base de apoyo para que no se caiga, pero el resultado es óptimo de esta forma. Dejo una imagen de una plaquita impresa de la primera forma junto a otra impresa de la segunda forma:
Imagen
Si queréis más información no dudéis en preguntarme, podéis descargaros el archivo de Python y probar con él. El código está aún un poco verde, falta organizarlo, hay alguna cosa que sobra, alguna cosa que falta, puede darnos algún error con determinados símbolos… pero acepta minúsculas y mayúsculas sin acentuar y acentuadas del castellano. No acepta números (aún) :)
Para utilizar el programa necesitaréis tener instalado Python 3 y OpenSCAD.
traductor.py
File Size: 22 kb
File Type: py
Descargar archivo

7 Comentarios
jolaus
9/16/2016 07:01:50 pm

Boquiabierto, ojiplático y sin palabras. Así es como me he quedado después de leer el artículo. Brillante Alfredo.

Responder
Alfredo Sánchez Sánchez
9/16/2016 07:24:08 pm

¡Muchas gracias por el comentario crack!

Responder
Andy Mid
9/18/2016 04:56:40 pm

Muy buen iniciativa, impresionante!
Ofrecer un consejeo para imprimir acostado - en el gcode puedes copiar la ultima capa para que lo repite, pero quitando los movimientos de extrusor - repasara en seco, aplanando estos picos molesto - idealment que los protuberancias no sean muy puntiagudas, mas bien algo planas, para que el cabezal puede hacer por lo menos una vueltita muy pequeña... Debe dejaro mucho mejor!

Voy a probar su app, si funciona, poder imprimir solo 1 o 2 capas de plastico inferior hara mucho mas rapido, facil, y flexible el uso de este tipo de soporte, pegarlo por todos lado, etc

Un saludo!
Andy
:-)

Responder
Alfredo Sánchez Sánchez
9/18/2016 05:00:57 pm

Muchas gracias Andy
La verdad que imprimiendola en vertical los puntos quedan muy bien pero es cierto que hay que hacer una placa algo gruesa y hace que no sea flexible ni se pueda adaptar a otras formas.
Una impresora bien calibrada puede hacerlo bien, probaré el truco que comentas.
La app es un poco rudimentaria pero funciona. Iré mejorándola cuando tenga tiempo.
Un saludo

Responder
Andy Mid
9/18/2016 10:29:04 pm

Se me acaba de acordar que una llama o fuente de calor tambien puede quitar cualquier punto molesto que queda - mejor! Cama caliente a 55'C, quizas un pelin mas, y poner poca abajo la placa por uno tiempo... Habra que ver cuanto ;-)

Un saludo!
Andy
:-)

marcelo
1/16/2017 02:23:03 am

Hola. me interesó mucho este proyecto. Soy ciego y me interesan las nuevas aplicaciones de la impresión 3d. Me llamo mucho la atención lo que comentas en este articulo y me gustaría saber si continúas haciendo mejoras en ese traductor. Saludos.

Responder
miguel link
10/16/2017 11:33:29 pm

buenas, muy buena iniciativa. soy programador ciego, y me encantaría participar en tu proyecto, que licencia tiene el código, tienes subido a algún repo (github)?. estoy desarollando un transcriptor braille en python, quizás podría aportarte algunas cosas. un saludo!

Responder



Deja una respuesta.

    Archivos

    Marzo 2020
    Agosto 2017
    Julio 2017
    Septiembre 2016
    Julio 2016
    Febrero 2016
    Octubre 2015
    Septiembre 2015
    Julio 2015
    Enero 2015

Con tecnología de Crea tu propio sitio web único con plantillas personalizables.