viernes, 19 de diciembre de 2014

G-Code (2)

Objetivos

Primero de todo. ¿Para qué vale esto? Por ejemplo, para ajustar parámetros de velocidad. Si medimos el ancho de la impresión (que consideramos 0.4mm) y no tiene ese ancho pude deberse a varias cosas. Normalmente, si es más grande se debe a que se está depositando más material del que toca o nos estamos moviendo lento (compresión). Si es más estrecho, es que estamos tirando menos material del que toca o que nos estamos moviendo muy rápido (tensión). Precaución también con el hecho de que si el calibre del hilo no es el correcto, los cálculos empleados no son tampoco buenos (y eso que hemos considerado varias aproximaciones...).

Pero antes de ajustar hay que controlar lo que estamos haciendo. Así que vamos a probar g-code a ver que pasa.

Planteamiento

Después de varios cálculos, pruebas y aproximaciones obtengo este código:

G21;
M107;
M190 S50;
M104 S230;
G28;
M109 S230;
G90;
G92 E0;
M82;
G1 Z1;
G1 F9000 E-2;
G1 X10 Y10;
G92 E0;
G1 Z0.3 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y20;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y30;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y40;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y50;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;

Eso debería crear 5 líneas de 0.4mm de ancho, 0.3mm de alto y 40mm de largo todas con origen en X=10 y fin en X=50 para Y de 10, 20, 30, 40 y 50 (todo en mm).

Consideraciones...
  • Considerando una línea como un ortoedro (versión 3D del rectángulo...) de 0.3x0.4x40 mm3, tendremos 4.8mm3 por línea
  • Considerando que el volumen que introduce el extrusor en el sistema (sin pérdidas) es el de un cilindro de 3mm de diámetro y un alto h
  • El filamento a introducir para cubrir la línea será E=4.8/(1.5*1.5*3.14)=0.679mm
  • Considero que siendo la entrada uniforme la salida es uniforme
  • He desestimado las pérdidas... y considerado que la retracción de 2mm es adecuada.
  • Podría haber ajustado el código de las retracciones...
Simulación

El Repetier-Host lo coge... faltaría meterle algo de código que nos permita apartar el extrusor y apagarlo y demás...

G92 E0;
M107; Apaga el ventilador… pero es mejor M106 S0 donde S varía entre 0 y 255
M104 S0; Temperatura del extrusor activo a 0º
M140 S0; Temperatura de la cama a 0º. Devuelve el control sin esperar.
G28;
M84; Desactivar motores.

Ejecución en hardware

No funciona. Podría mentir y ajustarlo hasta que salga y decir "mirar, me ha funcionado a la primera". Pero no...

Primero no sale nada. Si que se mueve, pero no extruye. Pruebo eliminando las retracciones. Cambio E2 y E-2 por E0. Tampoco sale bien, pero queda claro que es un problema de extrusión. Aumento el valor de E0.679 y consigo que algo salga a E6 y E8 (valores experimentales). Me he dado cuenta de que el problema sigue siendo que se producen retracciones. ¿Porqué? En el código no están...

También me mosquea que el primer M104 S230 me ha parecido que dejaba de calentar el nozzle al devolver el control... Algo que investigaré más adelante.

Ingeniería inversa

La siguiente opción lógica es mirar un código que si funcione. Cualquier cosa. Sobre todo porque lo que quiero es ver el valor de E y para eso me vale hasta el skirt...

Observando código conocido. Lo primero que se me ocurre es que uso de M82 para hacer que el extrusor utilice valores absolutos y el G90 para hacer lo mismo en las coordenadas. Lo mismo el M82 y el G92 E0 no es lo correcto. Es decir. Si lo que quiero es resetear E lo mismo debería utilizar M83 para que los valores de E sean relativos... O el uso de G92 requiere M82 después... Desestimado  de momento porque el Slic3r lo aplica así.

Más cosas... Veo que para un movimiento de 2.303mm se usa un valor de E de 0.03768mm. Esto supone una relación de 0.01635mm de E por mm de movimiento. Lo que yo he planteado eran 0.016975mm de E por mm de movimiento. Luego el problema no tiene que ser ese... Me encanta no ir desencaminado en el cálculo pero ahora si que no tengo ni idea de lo que está pasando. :)

La diferencia que veo notable del código que he planteado con respecto al generado por Slic3r es que me he emocionado con los G92 E0 y las retracciones. Las retracciones sigo considerando que son correctas porque me muevo más de 40mm sin extruir al cambiar de línea. Así que le planteamiento a seguir es utilizar realmente el M82 y usar valores de E absolutos.

Modificaciones

G21;
M107;
M190 S50;
M104 S230;
G28;
M109 S230;
G90;
M83;
M106 S255;
G1 Z20 E3 F1200;
G92 E0;
G1 F9000;
G1 X10 Y10 Z0.3 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y20 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y30 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y40 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y50 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 X100 Y100 F9000;
M107;
M84;

He tocado algunas cosas. Utilizo posición relativa para el extrusor (eso es más cómodo para lo que estoy haciendo ahora), mantengo las retracciones (no creo que sean el problema), ajusto las velocidades de retracción (en lugar de F9000 utilizo F1200), no le bajo la temperatura al terminar (porque seguro que tengo que hacer varias pruebas) y he cambiado la posición a la que se aleja el carro al terminar. El Repetier-Host lo coge como bueno...


Y el resultado, después de algunos ajustes de última hora y tras 2 o 3 ejecuciones (no hay skirt, así que la purga es a base de intentos...):


Donde se ven los problemas habituales como las acumulaciones al empezar y al terminar una línea (en los cambios de movimiento). Respecto a las medidas a tomar, las tomaré en la zona intermedia (la más estable) más tarde. Se supone que se produce un efecto llamado die swell, que en definitiva es que la línea se hincha al enfriarse. Ya veremos... :)

miércoles, 17 de diciembre de 2014

G-Code (1)

Cuando vamos a imprimir en 3D, partimos de un archivo STL que pasamos por un programa denominado slicer que lo convierte en g-code. Este es el código de instrucciones para la impresora.

Estoy estudiando este código para poder hacer algunos scripts que generen cosas útiles ("cosas nazis, Peter...". Odio a cierto técnico...). Sobre todo temas para testar (el autocorrector me acaba de cambiar testar por testar, no lo sabía...) la impresora.

He empezado mirando un archivo de prueba. Here we go!

G21; Establece las unidades en mm frente a G20 que lo haría en pulgadas
M107; Apagar los ventiladores
M190 S70; Esperar a que la temperatura de la cama alcance 70º 
M104 S235; definir la temperatura del nozzle sea de 235º y devolver el control


Se supone que M104 y M190 serán reemplazados por el código G10:
G10 P3 X0 Y0 Z0 R140 S235
Esto establecería las características de la herramienta 3 (que debería ser el extrusor) a las posiciones X, Y, Z correspondientes. R y S establecen la temperatura de la herramienta en stand-by y en operación. Si tenemos doble extrusor, sería algo así como:
G10 P3 X0 Y0 Z0 R140:140 S235:235
Esto me supone varias dudas:
1) ¿Cómo se establece con esto la temperatura de la cama? Es decir… ¿A qué corresponde cada P?
2) ¿La temperatura de stand-by… ¿Es, por ejemplo, para que cuando estamos utilizando dos extrusores se reduzca el goteo? En ese caso ¿A qué velocidad recuperamos la temperatura de funcionamiento cuando cambiamos otra vez de extrusor?

De cualquier forma… yo uso Marlin y Marlin utiliza G10/G11 para movimientos de retracción y desretraccion. Aunque esto no está presente en la chuleta de códigos que me he descargado de la web de RepRap... tendré que bucear en el código fuente de Marlin.

G28 ; mueve todos los ejes a Home

Creía que todos los motores se consideraban ejes… ¿Esto no es un problema para el extrusor? ¿O no cuenta como eje? Debo estar equivocado, obviamente.

M109 S235 ; Volvemos a establecer la temperatura a 235º, pero esta vez ESPERAMOS.

G90 ; Usar coordenadas absolutas desde este momento.

Es decir, Z10 debe ser mover Z hasta el punto Z=10mm, no mover Z a de su posición actual 10 mm

G92 E0; Establece el punto actual con el valor definido.

Es decir, el Extrusor pasa a ser el punto 0 de extorsión

M82; Establece valores absolutos para el extrusor.

G1 F1800.000 E-2.00000; Retrae 2mm del extrusor y establece la velocidad de movimiento del nozzle a 1800mm/minuto

Se comporta de manera lineal, de modo que la siguiente línea…

G1 Z0.500 F9000.000;

…lo que hace es moverse hasta Z=0.5mm y aumentar la velocidad durante ese movimiento hasta 9000 mm/minuto

G92 E0;

Vale. A partir de aquí es una serie de secuencias que manipulan las variables X, Y, Z, E y F de manera lineal. Si es verdad que hay otros códigos para hacer arcos, círculos y demás. Así que ya tengo información suficiente para empezar a hacer pruebas al respecto.

Primer objetivo. Conseguir dibujar unas cuantas líneas en la cama de la impresora. A ver que pasa...

jueves, 11 de diciembre de 2014

Claves para elegir una impresora 3D

A la hora de comprar una impresora en 3D tenemos que tener muy presente dos cosas:
- ¿Para qué la necesitamos/queremos?
- ¿Qué limitaciones tiene?

Las impresoras FDM basan su funcionamiento en el movimiento de un cabezal (nozzle) en una superficie. Es determinante conocer estos parámetros:

Tamaño del Nozzle: En mi caso, la BCN3D+ viene con un nozzle de 0.4mm de diámetro. Se puede cambiar por uno de 0.6mm y, si somos mañosos, le podemos pasar una broca para conseguir más ancho (siempre que el software para generar los archivos de impresión sea configurable). Este parámetro nos determina también el ancho con el que estamos imprimiendo.

Respecto a la altura de capa, depende de la resolución del movimiento en el eje Z (asumiendo el eje Z como vertical, aunque en algunos modelos el vertical es el eje Y). Según su página la BCN3D+ es capaz de moverse en pasos de hasta 0.075mm. La altura máxima de capa, en cambio, se considera que debe estar por debajo del 80% del ancho del nozzle. Es decir, de 0.32mm en la BCN3D+. Es importante porque una impresión a 0.3mm tarda 3 veces menos que una impresión a 0.1mm (a costa de la calidad).

La resolución en los ejes X e Y también es importante. Desconozco la capacidad de la BCN3D+, pero  los controles nos permiten mover el nozzle 0.1mm.

Luego está la velocidad a la que podemos movernos por la cama. Yo utilizo la BCN3D+ a 40mm/s de normal, aunque he conseguido buenos resultados en ciertas piezas a un 150% (la velocidad es ajustable durante la impresión) sobre 60mm/s (eso son 90mm/s).

Otro factor importante es el volumen máximo que podemos realizar con la impresora. La BCN3D+ tiene un tamaño de cama (plano XY) de 250x210mm. Además, se trata de una cama calefactada, lo que nos permite imprimir con más tipos de materiales. En relación a Z, podemos alcanzar una altura de 200mm.

En general, se podría imprimir PLA con cama fría y para ABS necesitamos cama calefactada. La BCN3D+ vende una cama de 75º, pero yo la he puesto a 90º en algún caso.

Existe también una necesidad de que el plano XY por el que se mueve el nozzle sea perfectamente paralelo al plano XY de la cama. Para eso utilizamos la calibración. La BCN3D+ se calibra manualmente, pero puede modificarse (ventaja del open source) para utilizar un sistema de autocalibrado. Cada máquina tiene un proceso de calibración distinto, más o menos complejo. Y, ante la pregunta de ¿cuando hay que calibrar? la respuesta real es que deberíamos comprobarlo antes de cada impresión. Aunque muchas veces lo que hacemos es empezar a imprimir con una capa superficial más gruesa (para minimizar los efectos de las descalibraciones).

El tipo de extrusor es directo, en contraposición a los de tipo bowden. Esto aumenta los tipos de materiales que podemos utilizar, al mantener la tensión del filamento cercana al extrusor. Los tipo bowden pierden mucha tensión entre el extrusor y el cabezal, siendo esto más negativo cuanto más blando o flexible es el filamento. Por ejemplo, para imprimir elastómeros precisamos extrusión directa... y en algunos casos también cama calefactada.

En una impresora 3D es muy importante el hardware, pero también es muy importante el software. Las impresoras sólo suelen entender archivos gcode, que simplificando podemos decir que son archivos que dan instrucciones a los motores (X, Y, Z y extrusor). Normalmente partimos de un archivo modelado en 3D que termina en formato STL y ese formato es el que suele ser troceado en capas por un software que se llama slicer. De lo óptimo de este software depende el tiempo, la robustez de las estructuras de relleno... la calidad de la impresión. Algunos incluso añaden estructuras de soporte para aquellas zonas en las que la impresora no puede imprimir (por ejemplo, salientes horizontales... la gravedad es lo que tiene). Si el software es malo, da lo mismo lo buena que sea la impresora. Las soluciones gratuitas que hay para impresoras open source son bastante buenas.

También importa el firmware de la impresora. Que se pueda actualizar, al menos... :)

Por otra parte está la conectividad. La BCN3D+ puede imprimir desde un ordenador conectado por USB o desde una tarjeta SD. Algunas impresoras pueden imprimir por WiFi o por Bluetooth (a la BCN3D+ se le podría dotar de estas opciones) pero si lo pensamos bien puede no ser una buena idea. Entre otras cosas porque la impresora añade un factor externo del que depende la correcta ejecución. Si se pierde la conexión inalámbrica, la liamos. Si se cuelga el ordenador o se suspende, la liamos.

Otro factor a considerar es la existencia de servicio técnico, piezas de repuesto, foros de soporte, comunidad de usuarios... 

Espero que sea útil. :D



lunes, 8 de diciembre de 2014

Imprimendo cosas para casa...

A mi mujer le gusta saber la temperatura que hace en las habitaciones de casa. Hace ya tiempo que compramos un montón de termómetros en DealExtreme y los tenemos rondando por la casa para controlar la temperatura.

Como podéis ver, son un poco... aparatosos. Se supone que son empotrables pero viene sueltos. Valen para interiores, exteriores, peceras, congeladores... El caso es que hoy me he quedado mirándolo y he pensado que lo mismo podría imprimir unas carcasas. Así que he codigo el pie de rey de Beatriz y he tomado medidas.


Al principio he diseñado el modelo y creo que he hecho algo mal porque la impresión ha sido nefasta (la de la izquierda en la foto). Luego he aplicado con cuidado los pasos correspondientes (modelo, triangular, solidificar, netfabb...) y el resultado ha sido mejor. Pero mirando el pie de rey del revés he contado 2.4 cm en lugar de 2.6mm.


Solucionado el tema de las medidas, he ajustado el tema y me he puesto a imprimir en ABS de color para que el color de la carcasa corresponda con el color de la habitación a la que esté destinado el termómetro. Después de un pequeño problema de warping (que por otra parte me ha permitido validar las medidas), he conseguido una carcaza en ABS naranja. El agujero para sacar el sensor lo he hecho con la taladradora porque he comprobado que salía mejor que imprimirlo.



Luego he impreso uno en azul y ahora estoy imprimiendo uno en negro. Me ha gustado tanto el resultado que mi mujer me ha convencido para comprar los otros 5 termómetros que faltan para tener uno en cada habitación.

Me he esperado a que terminase de imprimirse y he hecho una foto con los 3 que tengo terminados. Como veis, la temperatura del naranja (habitación en la que no estamos ahora mismo) y la del azul (habitación en la que estamos trabajando) varía 1.3º. El negro es el último que he montado y tiene 22.5º porque he tocado el sensor para ponerlo en su sitio.


Bueno, es el primer proyecto que tiene finalidad útil en casa (si no contamos la estructura para cartas...) y que he modelado desde cero. :)



viernes, 5 de diciembre de 2014

Cambios en mi hardware


No funcionó. Hace unos días monté la impresora con los nuevos engranajes en sintetizado. Pero algo va mal y no acaban de funcionar. Al dar unas cuantas vueltas se atascan y no imprime. Tuve que modificar (con el taladro) algunas cosas, pero no lo conseguí salvar. Eso si, el nuevo "hobbed bolt" si que funciona muy bien.

He impreso pruebas en varios materiales:



PLA rosa, rojo y negro (el rojo es de Velleman)
PLA verde y azul traslucido
ABS blanco, verde y naranja
copperFill y bronzeFill
ABS termocromático de 2 niveles (blanco cuando se calienta)

Me falta ajustar el tema del elastómero. Que no consigo que se imprima correctamente. :(

jueves, 4 de diciembre de 2014

Noticias de 3D

NOTA: Llevo muchas cosas encima esta semana. Y ya paso de llamar "3D Printing (X)" a los posts, que es un rollo... :D

Emendo STL Validation and Repair Software [URL]

Se trata de un software para la validación y reparación de STL. Parece que pinta muy bien. Pero la verdad, con el NetFabb a mi no me hace falta esto... y menos por 49.95$ Pero puede ser el comienzo de algo... :D

Más de Mosaic [URL]

Mosaic promete unir filamento de varios colores de forma que podamos imprimir límpiamente con un solo extrusor en varios colores. Las fotos que muestran son impresionantes:


Pero claro, son las fotos que ponen ellos... De cualquier forma, una vuelta de tuerca que le han dado es unir distintos tipos de materiales. En concreto meten en la mezcla el filamento conductor para crear de una tacada una mini linterna. :o

Aerosol adhesivo para impresión [URL]

Dimafix ha sacado un adhesivo para minimizar el warping en impresiones de ABS... Entre 7.50€ y 9.50€ Si funciona realmente molará.



lunes, 1 de diciembre de 2014

3D Printing (32)

Material nuevo que me han pasado...


Por una parte 4 rodamientos para el spool holder secundario. Con esto podré tener dos bobinas en servicio (vamos haciendo camino hacia el doble extrusor).

Por otra parte tenemos los engranajes que me han pasado nuevos para el extrusor (¡Gracias J!). Son diseño de Ferrán. El cambio es que las pestañas del engranaje son en V en lugar de rectas. Eso puede aumentar el desgaste pero mejora el agarre. Más precisión. Luego están los agujeros de velocidad... (Mua ha ha ha ha!)

Por último, uno de los nuevos (nuevo para mi) tornillos del extrusor. Y la recomendación de utilizar tuerca autoblocante en ambos lados. Claro... yo no usaba eso porque todos los tornillos que he probado tienen la cabeza fija. :D