You are on page 1of 5

Generacin de cdigo G

Como la mayora de las mquinas-herramienta de control numrico, se puede


tener a la entrada de una rutina de impresin 3D un archivo de cdigo G, que
especifica cada una de las acciones a realizar para obtener satisfactoriamente
un slido 3D. Existen varios software para la obtencin de un archivo de cdigo
G a partir de un modelo 3D digital, los hay de cdigo abierto y cerrado. Entre
los ms comunes generadores de cdigo abierto estn el software Cura
desarrollado por Ultimaker y Slic3r, ambos aceptan a la entrada archivos con
extensin .STL y generan archivos de cdigo G que son compatibles con
firmware de distintas y variadas impresoras.
En el presente trabajo nos centraremos en el software Slic3r, dado que nos
permite configurar con mayor facilidad el cdigo de salida, adecuando las
configuraciones a nuestras necesidades. Como se puede apreciar en la
siguiente figura, se ha introducido un archivo de nombre hezagono2cms.STL
que se encuentra en el medio de la plataforma virtual de lo que ser el rea de
impresin en la impresora 3D.

Y entre las configuraciones que el software nos permite realizar, las que
consideramos ms significativas son: altura de capa, nmero de permetros
exteriores, configuracin del relleno (densidad, patrn, etc.), material de
soporte, velocidad de avance, dimetro de extrusor (que en nuestro caso ser
el del lser) y cdigos de inicio y final de programa, para que la impresora
detecte estas funciones.
Algoritmos de movimiento
Como observamos en los archivos generados para todos los tipos de firmware
existentes en la base de datos del software Slic3r, incluso las trayectorias

curvas se realizar con lneas rectas de manera escalonada como si fuesen


pixeles en una imagen de computadora, como se puede apreciar en la
siguiente imagen.

Este dato nos permite disear con mayor facilidad un mtodo de realizar
trayectorias curvas, dada nuestra configuracin de movimiento cartesiana en
el plano XY. Existen varios algoritmos para la generacin de rastreo de lneas
en el movimiento cartesiano, entre los que destacan el de Bresenham y el de
Xiaolin Wu, este ltimo es una mejora del segundo, y aunque ambos estn
orientados a la generacin de grficos, navegando en la bibliografa disponible
al respecto se consider que puede aplicarse al movimiento fsico de motores
para trayectorias rectas diagonales con cualquier pendiente presentada. Uno
de los algoritmos de movimiento con mayor reputacin en el desarrollo de
intrpretes de cdigo G es el algoritmo de lnea de Bresenham (en adelante
BLA), as que fue seleccionado como el adecuado para el trabajo actual.
Es un algoritmo preciso y efectivo que permite la generacin de lneas de
rastreo, desarrollado por Bresenham (1965), bsicamente convierte mediante
rastreo las lneas utilizando solo clculos incrementales con enteros que se
pueden adaptar para desplegar tambin curvas (Weitzenfeld, 2014).
Si consideramos una conversin de lnea con pendiente positiva 0>m>1. El
algoritmo busca cual de dos puntos es el que est ms cerca segn la
trayectoria de la lnea. Las posiciones de los puntos a lo largo de la trayectoria
de una lnea se determinan al efectuar un muestreo de X en intervalos
unitarios, esto se muestra de manera grfica en la Figura 12.
Si se inicia desde el extremo izquierdo (x0, y0) de una lnea determinada, se
pasa a cada columna sucesiva y se traza por el punto cuyo valor de Y se
aproxima ms a la trayectoria de la lnea de rastreo. Si suponemos que se debe
desplegar el punto en (xk,yk), a continuacin se necesita decidir qu punto se
debe desplegar en la columna xk+1. Las alternativas son los puntos localizados
en (xk+1,yk), y (xk+1,yk+1).

Figura 1. Representacin matemtica de una pendiente


La coordenada de Y en la lnea matemtica en la posicin de la columna del
punto xk+1 se calcula como:
y = m (xk + 1) + b
d1 = y - yk = m (xk + 1) + b - yk
d2 = (yk + 1) - y = yk + 1 - m (xk + 1) b
La diferencia entre estas dos separaciones es:
d1 - d2 = 2 m (xk + 1) - 2 yk + 2 b 1
Un parmetro de decisin pk para el paso k en el algoritmo de lnea se puede
obtener al reordenar la ecuacin anterior, de modo que implique solo clculos
de enteros. Esto se logra sustituyendo m = y / x donde x y y son las
separaciones horizontal y vertical de las posiciones de los extremos de la lnea
y al definir:
pk = x (d1 - d2) = x (2 y / x (xk + 1) - 2 yk + 2 b - 1)
= 2 y xk - 2 x yk + 2 y + 2 b x - x
= 2 y xk - 2 x yk + c
El signo de pk es el mismo que el de d1 - d2 puesto que x > 0 en el ejemplo.
El parmetro c es un constante, donde c = 2 y + 2 b x - x, que es
independiente del pixel. Si el punto yk est ms cerca de la trayectoria de la
lnea que el punto yk + 1 (es decir d1 < d2), entonces el parmetro de decisin
pk es negativo. En ese caso, trazamos el punto inferior; de otro modo,
trazamos el punto superior. Los cambios de coordenadas a lo largo de la lnea
ocurren en pasos unitarios ya sea en la direccin de X o en la de Y. Por tanto,
es posible obtener los valores de parmetros de decisin sucesivos al utilizar
clculos incrementales en enteros. En el paso k + 1, el parmetro de decisin
se evala con base en la ecuacin anterior como:
pk+1 = 2 y xk+1 - 2 x yk+1 + c

Si sustraemos la ecuacin anterior obtenemos


pk+1 - pk = 2 y (xk+1 - xk) - 2 x( yk+1 - yk)
Pero xk+1 = xk + 1, de manera que
pk+1 = pk + 2 y - 2 x( yk+1 - yk)
Donde el termino yk+1 - yk es 0 o 1, dependiendo del signo del parmetro p.
Este clculo de los parmetros de decisin se realiza en cada posicin entera
de X, empezando en el extremo izquierdo de las coordenadas de la lnea. El
primer parmetro p0 se evala a partir de la ecuacin anterior en la posicin
del punto inicial (x0, y0), sustituyendo con b = y0 - m x0 y m = y / x.
p0 = x (2 y / x(x0 + 1) - 2 y0 + 2 (y0 - (y / x) x0) - 1)
= 2 y x0 + 2 y - 2 x y0 + 2 x y0 - 2 y x0 - x
Donde se obtendr la siguiente ecuacin:
p0 = 2 y - x
Algoritmos de interpretacin
Para que sea posible la entrada de un archivo de cdigo G que indique paso a
paso el movimiento de los actuadores del sistema cartesiano y la activacin del
lser para el curado de la resina fotosensible, es necesario implementar un
intrprete de cdigo G embebido en la impresora para que cumpla con uno de
los objetivos principales propuestos, que es la autonoma, es decir el
funcionamiento sin la necesidad de una conexin a una PC
Este intrprete deber tener la capacidad de leer un archivo alojado en una
memoria USB o SD insertada en la impresora, y ejecutarlo lnea a lnea
interpretando cada uno de los cdigos que forman el programa en s, a la vez
que ordena el movimiento de los actuadores y la activacin del lser para el
funcionamiento de la impresora 3D.
Como era de esperarse con el actual auge de impresoras 3D de fuente abierta,
existen varios desarrollos en el mbito de la interpretacin de cdigo G, y una
plataforma que logra reunir algunos de ellos es la pgina wiki de la comunidad
RepRap. Pero aunque la documentacin es extensa en cuestin de cdigos e
implementacin del firmware, bsicamente no hay nada de informacin
desglosada para la creacin de un intrprete desde cero, por lo que decidimos
basarnos en alguno existente cuya configuracin pueda ser anloga a la
nuestra, como lo es el de la impresora MakerBot, la cual cuenta con bastante
aceptacin puesto que en sus inicios se trataba de un desarrollo de fuente
abierta, y tambin cuenta con un sistema de desplazamiento cartesiano, y el
accionamiento del extrusor podra ser sustituido por el del lser.
Una fuente de informacin que se consider suficientemente completa para el
desarrollo del intrprete en cuestin es la plataforma Marginally Clever Robots
cuyos integrantes desarrollaron un proyecto para desarrollar un intrprete de

cdigo G para CNC de dos ejes basado en Arduino, en donde nos especifican
cules seran los pasos a seguir por el microcontrolador para la correcta
ejecucin del programa, que con unas ligeras modificaciones podr adecuarse
al proyecto actual.
Cdigos G para impresin 3D
Como se mencion en el apartado anterior sobre los intrpretes de cdigo G,
ser posible basar nuestro desarrollo en el ya existente para la MakerBot, con
algunos cambios evidentes puesto que no se trata de una impresora de
extrusin sino de estereolitografa, con ello podremos deducir cules cdigos
sern innecesarios en nuestro caso, como lo son la depuracin del extrusor, el
calentamiento de la cama de impresin, el encendido de ventiladores, etc.
Con ello en mente, una lista preliminar aplicada para el actual proyecto,
deducida a partir del conocimiento de los cdigos G y M utilizados por la
MakerBot se presenta a continuacin:
-

G1 Xxx.xx Yxx.xx Fxx.xx: Avanzar en lnea recta hasta la posicin Xxx.xx


Yxx.xx a una velocidad especificada por Fxx.xx en milmetros por
segundo.
G1 Zxx.xx Fxx.xx: Avanzar hasta Zxx.xx con la velocidad Fxx.xx.
G28: Ir a posicin de Home en todos los ejes.
M73 Px: Porcentaje del programa ejecutado (avance de la impresin).
M101: Enciende el lser.
M103: Apagar el lser.
M126: Cambio de capa de impresin.
M127: Inicio de programa.

You might also like