Impresora 3D

Linux

Smartphones

miércoles, 15 de febrero de 2012

6.- FIRMWARE, CALIBRACIÓN Y SOFTWARE.

Durante este capitulo intentaré poner todo lo referente a firmware y software necesario para que ande la impresora. Por supuesto, esto incluye calibrarla para que ande corectamente, esperemos que no me cueste demasiado, pero creo necesario una especie de tutorial para "novatos" que se pueda leer en castellano, ya que hay muy poca información al respecto.
Todo lo que leeremos, será por supuesto, para la electronica que yo he elegido para nuestra Prusa, la placa Arduino + RAMPS 1.4.

6.1.- CARGANDO EL FIRMWARE EN LA PLACA ARDUINO 10-03-2012

Lo primero, es bajarse el software de Arduino, con el que cargaremos el firmware de nuestra prusa en nuestra placa Arduino. Puedes descargarlo desde aqui:


Habrá que descomprimirlo, e instalarlo.
Por otra parte, habrá que descargar el Firmware. Hay muchos Firmwares que podemos cargar, y dentro de ellos hay muchos parametros que tocar. LLegar al que mas nos conviene puede ser una tarea larguisima de muchisimas pruebas, pero aún somos demasiado novatos para estas cosas, por lo que de momento escojeremos uno de los Firmwares mas faciles de configurar, el Sprinter. Te lo puedes descargar aqui:

Link: Descarga de Sprinter firmware

Habrá que descargarlo, y descomprimirlo.
Ahora, abre el programa Arduino, y desde ahí, abre el firmware. Para ello, tienes que darle a abrir, y buscar dentro de la carpeta del firmware que hemos descargado, el archivoSprinter.pde.



Arriba, se ven las diferentes pestañas del firmware, que al principio nos sonará todo a chino, pero que poco a poco nos iremos familiarizando.
Ahora mismo, la pestaña que nos interesa, esconfiguration.h.
Aqui, se ven escritas un montón de cosas, en un montón de parrafos diferentes.
En esta pestaña, tendremos que indicarle a nuestro firmware, que tipo de aparato tenemos, termistores y finales de carrera, para que nuestra impresora funcione.







Los cambios que yo he hecho en mi firmware, ayudado por la gente del foro, para empezar:


6.1.1.- ELECCION DE LA ELECTRONICA:

Esto de aqui abajo, es el parrafo correspondiente a la placa. las dos // que tiene la mayoia de las lineas, sirven para comentar, para que lo que está detras del //, no tenga efecto en el firmware. Hay veces, que tendremos que quitar los // de delante de alguna linea para activarla, o ponerla para descativar alguna otra. Yo representaré los comentarios con rojo, y la linea que tiene el efecto real en el firmware en azul para que nos podamos entender.

//// The following define selects which electronics board you have. Please choose the one that matches your setup
// MEGA/RAMPS up to 1.2 = 3,
// RAMPS 1.3 = 33
// Gen6 = 5,
// Sanguinololu up to 1.1 = 6
// Sanguinololu 1.2 and above = 62
// Teensylu (at90usb) = 8
// Gen 3 Plus = 21
// gen 3 Monolithic Electronics = 22
// Gen3 PLUS for TechZone Gen3 Remix Motherboard = 23
#define MOTHERBOARD 33

En la primera opción, la de la placa, es muy facil, si lo sabes. Es todo una lista como comebtarios, de los diferentes tipos de electronica. Solo hay una linea a modificar, hay que ponerle el numero correspondiente a nuestra electronica. Yo tengo la RAMPS 1.4, y gracias a los foreros sé que si tengo la 1.4, tengo que configurarla como la 1.3 porque al parecer son iguales, luego en la ultima linea, donde pone
#define MOTHERBOARD, pondré el numero de mi placa, 33

6.1.2.- ELECCION DE LOS TERMISTORES:

Esto de aqui abajo, es el parrafo correspondiente a los termistores, el del hot-end, y el de la cama. Tendrás que saber cual es tu termistor, y ponerselo como hemos hecho con la placa, en la parte anterior.

//// Thermistor settings:
// 1 is 100k thermistor
// 2 is 200k thermistor
// 3 is mendel-parts thermistor
// 4 is 10k thermistor
// 5 is ParCan supplied 104GT-2 100K
// 6 is EPCOS 100k
// 7 is 100k Honeywell thermistor 135-104LAG-J01
#define THERMISTORHEATER 1
#define THERMISTORBED 1

6.1.3.- ELECCION DE LAS VARIABLES DE CALIBRACIÓN:

Esto de aqui abajo, es el parrafo correspondiente a las variables de calibración. Todavía no tengo demasiado claro que es, debe ser algo de los pasos de los motores, pero si me quedaba claro, que no había una especifica para mi.

//// Calibration variables
// X, Y, Z, E steps per unit - Metric Prusa Mendel with Wade extruder:
float axis_steps_per_unit[] = {80, 80, 3200/1.25,700};
// Metric Prusa Mendel with Makergear geared stepper extruder:
//float axis_steps_per_unit[] = {80,80,3200/1.25,1380};
// MakerGear Hybrid Prusa Mendel:
// Z axis value is for .9 stepper(if you have 1.8 steppers for Z, you need to use 2272.7272)
//float axis_steps_per_unit[] = {104.987, 104.987, 4545.4544, 1487};
Por lo que vemos, hay 3 opciones disponibles, y es la primera la que tiene activa.
- Metric prusa mendel with wade extruder
- Metric Prusa Mendel with Makergear geared stepper extruder
- MakerGear Hybrid Prusa Mendel
Yo tengo el extrusor de mendel parts, por lo que ya no me vale del todo la que tiene activa....
....Y por lo que veo, si comparo la primera y segunda opción, Lo unico que les diferencia es el extruder, tanto en la descripción como en los numeros, por lo que parece, el ultimo numero es el que pertenece al extrusor.
Busque por internet, a ver si encontraba la configuración del extruder v9 de mendel-parts, y encontré esto:

// X, Y, Z, E steps per unit - Metric Mendel / Orca with V9 extruder:
//float axis_steps_per_unit[] = {40, 40, 3333.92, 67}; // For E steps per unit = 67 for v9 with direct drive (roughly, needs finetuning) for other extruders this needs to be changed

.....y mezclé la linea, dejando esto,
//float axis_steps_per_unit[] = {80, 80, 3333.92, 67};

.....y asi fué como quedo, después de desactivar el que tenía por defecto, y pegar el mio:
//// Calibration variables
// X, Y, Z, E steps per unit - Metric Prusa Mendel with Wade extruder:
//float axis_steps_per_unit[] = {80, 80, 3200/1.25,700};
// Metric Prusa Mendel with Makergear geared stepper extruder:
//float axis_steps_per_unit[] = {80,80,3200/1.25,1380};
// MakerGear Hybrid Prusa Mendel:
// Z axis value is for .9 stepper(if you have 1.8 steppers for Z, you need to use 2272.7272)
//float axis_steps_per_unit[] = {104.987, 104.987, 4545.4544, 1487};
// X, Y, Z, E steps per unit - Metric Mendel / Orca with V9 extruder:
float axis_steps_per_unit[] = {80, 80, 3333.92, 67};
// For E steps per unit = 67 for v9 with direct drive (roughly, needs finetuning) for other extruders this needs to be changed
6.1.4.- PROBLEMA EN LA COMPILACION DEL FIRMWARE:

Eso es todo lo que le había tocado al firmware antes de intentar meterlo en la arduino (esto se hace desde el programa arduino, cuando ya esta modificado, FILE --> UPLOAD), pero al intentar meterlo en la arduino, me daba un error:
NOTA: Para subir el Firmware a la placa arduino, debes de desconectar la RAMPS 1.4 que tiene pinchada encima antes.

En la pestaña sd2card.cpp, dice asi:

"HIGH" was not declared in this scope

y me ilumina la siguiente linea:

digitalWrite(chipSelectPin_, HIGH);

Este es el codigo completo del intento de compilación:

Sd2Card.cpp:20:22: error: WProgram.h: No such file or directory
Sd2Card.cpp: In member function 'void Sd2Card::chipSelectHigh()':
Sd2Card.cpp:145: error: 'HIGH' was not declared in this scope
Sd2Card.cpp:145: error: 'digitalWrite' was not declared in this scope
Sd2Card.cpp: In member function 'void Sd2Card::chipSelectLow()':
Sd2Card.cpp:149: error: 'LOW' was not declared in this scope
Sd2Card.cpp:149: error: 'digitalWrite' was not declared in this scope
Sd2Card.cpp: In member function 'uint8_t Sd2Card::init(uint8_t, uint8_t)':
Sd2Card.cpp:216: error: 'millis' was not declared in this scope
Sd2Card.cpp:220: error: 'OUTPUT' was not declared in this scope
Sd2Card.cpp:220: error: 'pinMode' was not declared in this scope
Sd2Card.cpp:222: error: 'INPUT' was not declared in this scope
Sd2Card.cpp: In member function 'uint8_t Sd2Card::waitNotBusy(uint16_t)':
Sd2Card.cpp:471: error: 'millis' was not declared in this scope
Sd2Card.cpp: In member function 'uint8_t Sd2Card::waitStartBlock()':
Sd2Card.cpp:481: error: 'millis' was not declared in this scope

Buscando por internet, encontré algo, y parece que decía que era por la versión de arduino, que había que hacer los siguientes cambios, en las siguientes pestañas del firmware:

-En la pestaña Sd2Card.cpp:

donde pone #include
< WProgram.h > poner esto --> #include < Arduino.h >

-En la pestaña SdFat.h:

donde pone void write(uint8_t b); poner esto --> size_t write(uint8_t b);

-En la pestaña SdFile.cpp:

donde pone #include < WProgram.h > poner esto --> #include < Arduino.h >

y
donde pone void SdFile::write(uint8_t b) { poner esto --> size_t SdFile::write(uint8_t b) {

-En la pestaña Sprinter.h:

donde pone #include < WProgram.h > poner esto --> #include < Arduino.h >

Además, el que lo escribía, avisa que el archivo, antes de subirlo a la placa arduino, lo renombrará de .cpp a .ino. Lo hize, y funcionó, el firmware ya estaba subido a la placa arduino con exito, solo había que probarlo!

NOTA: Como ya habréis averiguado no soy muy bueno haciendo blogs, y no sé que pasa, pero no podía pegar el codigo sin que desapareciese parte de el, por lo que he tenido que poner algún espacio, ten cuidado si copias-pegas.
donde pone < Arduino.h > y < WProgram.h >, he tenido que poner espacios entre el < loquesea y el >, porque si no directamente desaparecia todo, dejando solo lo de#include

6.1.5.- CAMBIO DE PINES DEL TERMISTOR EN EL FIRMWARE:


En la foto se ve un poco mal, pero por culpa de las fundas termoretractiles que he puesto a los conectores, no me entran los dos conectores de los dos termistores juntos. Así, que como hay hueco para 3 termistores, he puesto el segundo en el hueco del tercero, dejando los dos pines el segundo, en medio, libres. El tercer hueco ahora, es el conector del termistor de la cama, el que esta marcado con T.C. en la foto, debajo, apenas se ven los pines libres.
Pero claro, todo cambio de PINes requiere su cambio en el Firmware. En mi caso, al no tener el pin del termistor de la cama en su sitio, el programa no detectaba temperatura, y no ponía a calentar la cama, porque suponía que el termistor estaba roto.
Así que aunque parecia que la cama calefactada iba por un lado y el termistor por otro no era asi, y yo me volví "grilla" buscando fallos en el cableado de la cama calefactada. Menos mal, que la gente del foro estaba ahi, si no aún me estoy dando de cabezazos contra la impresora....






Hay que coger quitar otra vez la placa RAMPS, conectar la Arduino al PC, arrancar el software de Arduino, abrir nuestro archivo Sprinter.ino (antes de tocarlo se llamaba Sprinter.cpp), ir a la pestaña de pins.h, y cambiar esto:
-En la pestaña pins.h
#define TEMP_1_PIN 14 // ANALOG NUMBERING < ----------> cambio a 15
#define TEMP_2_PIN 15 // ANALOG NUMBERING < ----------> cambio a 14



6.2.- PROBANDO EL FIRMWARE CON REPSNAPPER 10-03-2012

Ahora que ya tenemos el firmware cargado, hay muchas ganas de probarlo. La forma mas facil, bajarse el Repsnapper de aqui:

Link: Descarga del Repsnapper
Habrá que descomprimirlo, y dejar la carpeta donde queramos guardar el programa. Hazle un acceso directo en el escritorio, y listo.
Ahora, si no se ha hecho antes ya, hay que colocar la placa RAMPS encima de la Arduino, ya que para cargar el firmware a la Arduino, tenemos que tener la placa RAMPS quitada.
Endender la impresora, y arrancar el programa Repsnapper.




En esta primera pantalla, estamos en la pestaña "simple", aqui, pon el puerto COM correspondiente a tu impresora (puedes ver que USB estas usando, mirando en el administrador de dispositivos de windows, y así saber que COM usa.)
Luego pon la velocidad 115200, y dale al botón "connect to printer".







Ahora ya podemos pinchar en la pestaña "interactive", y si todo está bien conectado, enseguida verás como los termistores empiezan a enviar la info de la temperatura a la que están la cabeza, y la cama, abajo, verás todo la info que va llegando, u ordenes que le vamos dando.
Arriba, el control de los 3 ejes de la impresora, con unos botones para mover una micra, un milimetro, 1o milimetros, para cada lado, y su botón "home", que hace que vuelva a "casa", al final de carrera.
En fin, los controles son muy faciles, es cuestión de ir probandolo todo, encender la cabeza a ver si llega a su temperatura, la cama, mover todos los motores.....
Si un motor mete ruido pero no mueve, es posible que tengas que mover con el destornillador el potenciometro de los pololus, para darle mas intensidad, pero recuerda, NUNCA lo pongas a tope, porque quemarás los pololus.
Si algo no funciona, tendrás que revisar cableado, pololus, firmware.... vamos, todo lo anterior! :(

En el caso del video de abajo, el potenciometro del driver del motor necesitaba mas corriente, y por eso hacia este ruido:


Es un placer, cuando ves a tu impresora moverse por primera vez, ordenada por el PC:


6.3.- PROBANDO EL FIRMWARE CON PRONTERFACE 12-03-2012

El Pronterface, es muy similar al Repsnapper, pero requiere de tener alguna otra cosa instalada en el ordenador, como Phyton y WXPhyton.

Phyton:
Link: Descarga de Phyton 2.7.2 para windows

WXPhyton:
Link: Descarga de WXPhyton 2.8 para Windows 64 bits
Link: Descarga de WXPhyton 2.8 para Windows 32 bits
Tendrás que instalar uno de los dos, el que corresponda a tu sistema operativo.
Ahora que ya tenemos las dependencias minimas, ya podemos usar el Prontface. Me baje deesta web un pack (Printrun-SF41), donde se suponía que funcionaría directamente, pero me daba un error al iniciar, y al parecer era por la falta de un paquete, el Pyserial.
Asi pues, tienes dos opciones:

1.- descargarte el
Printrun-SF41 y el Pyserial, y meter el conjunto de carpetas, junto con el conjunto de carpetas de la otra descarga:

Link: Descarga del Printrun-SF41


Link: Descarga del Pyserial

2.- descargarte el pack ya hecho:

Link: Descarga Printrun-YAMA



Ya podemos arrancar el programa, una vez descomprimido mi pack, o preparado el pack manualmente.
Para ello, ejecutaremos el archivopronterface.py.






Como en el anterior programa que hemos visto, el Repsnapper, configuaremos el COM correspondiente, la velocidad ya esta configurada, y tendremos que pulsar en Connect.
Cuando conecte con la impresora, los botones cogerán color, y ya se podrán tocar.
Similar al anterior programa, podremos probar todos los ejes, extrusor, cama y hot-end.

Aprovechando estos programas, tienes que asegurarte que todos los motores y finales de carrera funcionan correctamente:

Aqui el extruder moviendose cuando le mando: :D


Aqui todos los ejes volviendo a "home", y así comprobando que funcionan los 3, y sus finales de carrera.


6.4.- EL PRIMER INTENTO DE IMPRESION 15-03-2012

Esta claro que esto de hacerse una impresora no es hacerla y a imprimir. Aunque parece estar bastante bien calibrada, luego hay que pegarse con el software, ajustes del extrusor, posible calibración mecanica (en este aspecto nosotros la tenemos muy bien, ventajas de que la impresora la construya un ajustador profesional).....
En mi caso, estoy teniendo dos problemas, uno es que aún no controlo el programa de impresión, le mando imprimir y los ejes se mueven, y luego se van otra vez al punto de partida sin imprimir nada.
Por otra parte, parece que estoy teniendo algun problema de temperatura en el hot-end, o un necesario ajuste del extrusor, pues no termina de extruir bien.



 

Es bastante desilusionante invertir un montón de tiempo y dinero, para solo lograr imprimir unos cuantos hilos de PLA, y un intento feo de moneda de calibración.










Esto es lo mas cerca que ha estado de imprimir algo. No sé como sonó la flauta, y se puso a imprimir. El motor del extrusor no podia expulsar el PLA, y empujandolo con la mano, conseguimos que hiciese algo, pero también al hacer fuerza moviamos los ejes, por lo que la forma de la impresión, aun no se puede decir que sea por falta de calibración.









6.5.- PROBANDO - CALIBRANDO LA IMPRESORA 16-17-18...... -03-201

Hay muchisimas cosas por calibrar y probar. Como ya he dicho antes, afortunadamente mi padre es ajustador, por lo que la impresora lo que es mecanicamente, está bastante bien calibrada. No obstante, esto es lo que habría que tener en cuenta para tenerla mecanicamente calibrada:

- Que la cama esté perpendicular al eje Z
- Que la cama esté equidistante de la boquilla en todas partes
- Engrasar los ejes para un funcionamiento óptimo
- Ajustar la tensión de las cintas dentadas

Además, habrá que preparar o modificar una linea el el firmware para asegurarnos que cuando le mandamos mover 100 mm, mueva realmente esos 100 mm, usando el calibre. Hay que modificar el parámetro axis_step_per_unit del Firmware para cada eje (X,Y,Z,E).
En mi caso, casi ni hacía falta, los valores por defecto funcionaban bastante bien, pero aún así algo cambié.
Para ello, con Repsnapper o Pronterface, mandaremos al eje de la X ir a "home". Después de marcar el punto, le mandaremos ir 100 mm a la derecha. Marcamos otra vez, y mediremos exactamente cuanto a movido, y aplicamos la formula:
axis_step_per_unit[X] = (100/drx) * axis_step_per_unit[X], donde drx es la distancia (en mm) que hemos medido con el calibre, y axis_step_per_unit[X] es el valor actual.

Usease: Imaginemos que nos ha movido 99.60 mm.
100/99.60 nuestra medición * 80 nuestro valor actual = 80.321 nuestro nuevo valor

Habra que repetir esto mismo con el eje de la Y (la cama) porque para el eje de Z, si has usado metrica 8 en las varillas, ya tiene su propio valor, este:

3200/1.25

Para el extrusor, (E), el valor recomendado para mi extrusor, recomendado en los foros como no, es 146. Para probarlo, con
Repsnapper o Pronterface, tendrás que darle a extruir x milimetros, y marcando un pedazo de filamento, tendrás que asegurarte que mueve tantos milimetros de filamento como le pides.

Al final, la linea para mi erá algo asi:
float axis_steps_per_unit[] = {80.194, 80.272, 3200/1.25, 146};

Siguiendo una vez mas el paso 6.1 de la carga del firmware, se desconecta la RAMPS, se conecta la arduino al PC, se cambia esa linea en el firmware, se vuelve a poner la RAMPS, y se vuelve a probar. Si el resultado no es el deseado, habrá que repetir toda la operación, hasta calibrarla perfectamente.

Pero aqui no termina todo, luego hay que ponerse a probar de todo, por ejemplo imprimiendo el "cubo de calibración".


En mi caso, estaba teniendo problemas de extrusión. El motor parecía no poder meter el filamento, hacia un ruido clack-clack... y el hilo que echaba era demasiado fino.



Hay muchas cosas que tocar, el ajuste fisico del extrusor, el potenciometro de fuerza al pololu de ese motor, velocidad de extrusión, temperatura del hot-end.....
Todos los parametros tienen que ver, así que hay muchas pruebas que hacer, con cada maquina, con cada material de impresión....













Resulta que si me ponía así haciendo un poco de presión hacia abajo ayudando al extrusor, el resultado era totalmente diferente.
















Esto hace que te ilusiones.....












La evolución de los cubos es positiva.....













Después de mucho enredar, descubrí que mi problema era que los tornillos de la izquierda del extrusor estaban demasiado prietos. Aflojandolos poco a poco, consegui que hiciese bien la extrusión. Es un equilibrio muy fragil, si te pasas de aflojar tampoco lo hará bien.....











......mi primer cubo sin ayuda de empuje al extrusor......

......snif.........







6.6.- HACIENDO MIS PRIMEROS OBJETOS - PROBLEMAS CON EL EXTRUSOR - AJUSTE DE CORREAS 19,20,21,22,23.....-03-2012












 Durante todos los día que empiezo a hacer pruebas en los siguientes días, consigo hacer algunas cosas con mas o menos exito, pero tengo un problema continuo con el extrusor.
No puedo dejar de mirarlo, porque en cualquier momento el motor que empuja el filamento deja de poder arrastrar dicho filamento, provocando la falta de PLA en la pieza.








En la pieza de arriba, se ve que en un momento dado de la impresión, al tener la correa del eje de X demasiado tensa, en un cambio brusco de dirección del extrusor, esta pierde pasos, perdiendo su posición inicial, estropeando la impresión, poniendo la "Y" del siguiente nivel encima de la "a".










Con Sketchup es muy facil hacer un nombre y luego imprimirlo para poder hacer pruebas. Aunque el extrusor es algo que no consigo ajustar, poco a poco vamos viendo otros problemas durante las primeras impresiones, que hacen que vayamos ajustando un poco la tensión de las correas, el potenciomentro de los pololus y demás.








En esta foto quedan bastante claros dos de los problemas.
En la foto mas cercana, es un problema de extrusión, de repente el hilo de PLA es muy fino, dejando la pieza inservible.
En la foto intermedia, la correa está demasiado floja.
Si os fijais en la foto de arriba, la que estaba demasiado prieta, veréis como en un momento me desplazó un monton de pasos hacia la derecha, en este caso, al ser demasiado floja, me va desplazando poco a poco, cada nivel, un poco a la izquierda.
Por ultimo, la tercera foto es con la correa bien ajustada y empujando el filamento para que no de problemas de extrusion.







Poco a poco, voy haciendo de todo tipo de cosas. El problema resulta siempre el extrusor, pues si no lo miro muy probablemente la impresión no terminará con exito, y menos las piezas grandes.
Estas son piezas para la siguiente impresora :D 











 Al parecer, los muelles que quedan a la izquierda del extrusor, no solo eran mas largos de lo normal (por lo que tuve que poner tornillos mas largos, en el punto 5.4 de este tutorial), también eran mas duros de lo normal, aprentando el rodamiento contra el PLA y el engranaje del motor con demasiada fuerza.
Ajustar los 4 tornillos de la izquierda resulta demasiado complicado, pues si me paso de flojo no va, y no puedo ponerlo mas duro, porque esos muelles tan fuertes impiden su movimiento natural.



 Además, a mi problema se une este filamento en mal estado, tan curvado que hace imposible la impresión, en cada curva, el filamento para de avanzar, y si estoy ahí para verlo, podré empujar el filamento con mas o menos exito. Cada pieza la repito por lo menos 3 o 4 veces.....












Las pruebas se multiplican. Con temperaturas mas altas, le hace falta un poco de menos fuerza para fundir el filamento, pero las piezas no salen todo lo bien que deberían, a veces el fialamento cae demasiado "moco" en vez de un hilo.....
Darle mas fuerza al motor desde el potenciometro parece que puede ser una buena solución, pero darle demasiada hace que el pololu se caliente, y cuando se calienta demasiado deja de andar, dejandonos otra vez en el mismo problema.
La velocidad de impresión también es un factor a tener en cuenta. Se puede configurar como quieres que haga cada parte de la pieza. aristas, puentes.... Demasiada velocidad con un problema de extrusión es imposible, acabo bajando a la mitad (15mm/s) de lo que tiene definido por defecto.
Juego con temperaturas, potenciometros, velocidades de impresión y ajuste de los tornillos-muelles del extrusor durante dias, llegando a un equilibrio muy fragil, que se rompe con un simple cambio de color, ya que todos los filamentos no tienen el mismo grosor exacto.
Con todos estos problemas, empiezo a mirar posibles soluciones. Al parecer un extrusor con engranaje haría mas fuerza, por lo que le echo el ojo a este:















 Así que me pongo a imprimirlo, con paciencia y vigilancia.









 Las piezas pequeñas y medianas salen bastante bien, con solo vigilarlas un poco.






















  Las piezasgrandes no pasa igual. Son "maratones" de la impresión, en el que siempre me falla algo. Si no empujo el filamento hay pisos que tienen problemas de extrusión, que aunque luego se ponen otros pisos encima y lo disimula, la pieza no queda igual. Tambien está el problema de que al andar empujando, siempre hay un momento en el que no dejo al motor trabajar, haciendole perder pasos, y su posición inicial.
 Por otra parte, las temperaturas que todavía no controlo, hace que las piezas se me deformen.





  De todas maneras, problemas aparte ya tengo la plantilla para podernos hacer este mismo extrusor en aluminio, como veremos en el capitulo 5.31.










Hay que decir de todas maneras, que verla imprimir por primera vez es muy emocionante, parece magia como se dibujan las piezas, tiene un poder ipnotizante importante.






6.7.-  CAMBIOS EN EL FIRMWARE POR CAMBIO DE EXTRUSOR

Por supuesto, el cambio del extrusor, ha requerido de cambiar una vez mas el firmware (además de volver a tener que ajustar la tensión de las correas...). Para empezar, el hecho de tener un "Geared extruder" hace que la prusa sea mas "normal", y ya hay valores predefinidos dentro del propio firmware Sprinter para ponerlo.
Además, al ser con un engranaje, el motor debe ir al revés para poder meter filamento.
Así pues, como en el capitulo 6.1 del tutorial, cambio estos parametros en el la pestaña configuration.h del firmware Sprinter:

En la parte de los motores, usaré esta linea, poniendo los mismos decimales que saqué para la X e Y:

 // X, Y, Z, E steps per unit - Metric Prusa Mendel with Wade extruder:
float axis_steps_per_unit[] = {80, 80, 3200/1.25,700}; 


En la parte de "invertir ejes", cambio la del eje de E, que es el correspondiente al extrusor, poniendo "true":

// Inverting axis direction
const bool INVERT_X_DIR = false;
const bool INVERT_Y_DIR = false;
const bool INVERT_Z_DIR = true;
const bool INVERT_E_DIR = false;  
  
La verdad es que es un placer verla trabajar sin problemas de extrusión, empujando el filamento sin ayuda por primera vez. Nada tiene que ver con el extrusor anterior, ahora ya se puede empezar a trabajar.



6.8.-  DESCARGANDO E IMPRIMIENDO UN OBJETO.

Hay cientos de objetos para descargar en thingiverse

Link: Web de thingiverse 


 Yo para la ocasión elegí este, que me parecía bastante lo complicado como para que si sale bien, considerar que todo funcionaba correctamente.


Link: Objeto de pruebas


Lo primero es descargarse los .stl, los objetos 3D. Si estas haciendo esto como tutorial, bajate lo que te venga en gana, lo que mas te guste.
Después, deberemos crear el gcode, un codigo en el que indicaremos las propiedades de nuestra impresión. En este codigo hay todo tipo de información sobre la impresión, como las temperaturas, los tipos de relleno, velocidades, cantidad de perimetros, numero y altura de cada "piso" de nuestro objeto, diametro del filamento, etc, etc.
Está claro que cada cual tiene una impresora diferente, con un filamento diferente, por lo que todas estas opciones deben de seleccionarse para cada objeto stl que queramos imprimir. Usease, abrá que generar un .gcode de cada .stl que descargemos, y variará cada vez que cambiemos de filamento, o cada vez que queramos imprimir de forma diferente.
Para generar todo este codigo, usaremos el Slic3r para empezar.
Podemos descargar el Slic3r desde aqui:


Link: Descarga del Slic3r


Te descargas el zip, lo descomprimes donde quieras, y ya podemos ejecutarlo. 
Intentaré traducirlo-explicarlo, aunque hay algún concepto que todavía no sé usar...

  
Print settings - Ajustes de impresión:

Transform - transformación: Definimos tamaño rotación y copias.
Scale - Escala: Podremos controlar el tamaño de nuestro objeto. No es bueno reducir demasiado, pues reduce tambien el tamaño del "piso", y hacerlo demasiado hará que quede mal.
Rotate (º) - Rotar: Sirve para rotar, pero solo he conseguido rotarlo en un eje.
Copies along X - Copias a lo largo de X: Para hacer varias copias del mismo modelo.
Copies along Y - Copias a lo largo de Y: Para hacer varias copias del mismo modelo.
Distance betwen copies - Distancia entre las copias. 

Precisión: Aqui se definen los aspectos de la precisión de la impresión

Layer height (mm) - Altura de la capa (mm): La altura de cada "piso" o capa, lo que decía antes, pasarse de a poco no hará que quede mejor siempre. En la web de Slicer dice que con una punta o nozzle de 0.5 mm, siempre pone una altura de piso de 0.3mm.
También dice que es conveniente hacer un calculo de los pasos del motor, por la altura que sube, para asi evitar ponerle un valor con comas detrás.
Tal y como he hecho la impresora con un eje que va metido en una rosca M8, para subir un milimetro, el motor tiene que hacer 2560 pasos.

Haciendo esta regla de tres:

 1mm -- 2560 pasos
0.3 mm --- x
 x= 2560 * 0,3 / 1 = 768

 Veremos que para poner una resolución de 0.3 mm por capa, el motor tendrá que dar 768 pasos en cada capa. 
Pero si fuese 0.32, el resultado nos daría con decimales, y no es muy apropiado.

1mm -- 2560 pasos
0.32 mm -- x
x= 2560 * 0,32 /1 = 819,2

First Layer height ratio - Proporción de la altura de la primera capa - La web recomienda dejarlo a 1
Infill every N layers - Relleno de las N capas - La web recomienda dejarlo a 1

Skirt

6.9.-  CREACION DE OBJETOS PROPIOS, EXPORTACION DE ARCHIVOS

6.10.-INSTALACION DE PRINTRUN CON SKEINFORGE EN LINUX UBUNTU.

1.- Instalacion de dependencias, Phyton.
En la consola, escribir esto:

sudo apt-get install python python-serial python-wxgtk2.8 python-tk git-core

2.- Instalación de PrintRun

2.1.- En la consola, escribir las siguientes ordenes:

sudo apt-add-repository ppa:richi-paraeasy/ppa
sudo apt-get update
sudo apt-get install printrun-gui


2.2.- Creación del script de instalación.
Haz un nuevo documento, que se llame "PrintrunUpdate", y mete todo esto dentro:  

BASEDIR="$HOME" #edit this is you don't want it installed in your home directory
PRINTRUNDIR="$BASEDIR/Printrun" #Defines where the 'Printrun' directory is located. But of course you can change this to say: "$HOME/Documents/Create/RepRap/Printrun".
SKEINFORGEDIR="$PRINTRUNDIR/skeinforge" #Defines where the 'skeisforge' directory is located in the 'Printrun' directory is located.

cd $BASEDIR #Change directory to the executing users home directory.
echo "Removing existing Printrun directory..." #Script being polite towards the user.
rm -rf $PRINTRUNDIR #Removes the defined Printrun directory and _everything_ that resides in and beneath its directory tree.

echo "Cloning Printrun..." #Script being polite towards the user.
git clone [github.com] #See also: [help.github.com]
echo "Grabbing skeinforge..." #Script being polite towards the user.
wget -P /tmp [fabmetheus.crsndoo.com] #Uses good ol' wget for downloading skeinforge.
echo "Unzipping skeinforge into Printrun directory..." #Script being polite towards the user.
unzip -d $SKEINFORGEDIR /tmp/41_reprap_python_beanshell.zip #unzips the grabbed zip to ones defined skeinforge dir.
echo "Symlinking skeinforge inside Printrun directory..." #Script being polite towards the user.
ln -s $SKEINFORGEDIR/* $PRINTRUNDIR/ #Script makes a symbolic link.
echo "Cleaning up temporary installation files..." #Script being polite towards the user.
rm -rf /tmp/41_reprap_python_beanshell.zip #Removes tmp files.

2.3.- Dar permisos y ejecutar el script.
Daremos permisos al script, y lo ejecutaremos con estas ordenes en la consola, desde la carpeta donde tenemos el script claro:

chmod +x PrintrunUpdate
./PrintrunUpdate
 

 6.11.-INSTALACION DE SLIC3R EN LINUX UBUNTU.
  

Bueno, esta parte es un poco mas confusa, pues hay muchas cosas que estube probando, y no sé si el script final era la solución unica, o habría que hacer todos los pasos que describo.
En cualquier caso solo nos ahorrariamos el paso 3, y siguiendolos todos, debería funcionar.

1.- Instalación de las dependencias:
Esta parte ya sale en la web de Slic3r. Yo he ido al "centro de software e instalación de ubuntu", y los he ido buscando e instalando uno a uno, estos:

build-essential, libgtk2.0-dev libwxgtk2.8-dev, libwx-perl, y libmodule-build-perl

2.- Instalación de Slic3r, como pone en la web:
Desde la consola, escribir esto:

git clone git://github.com/alexrj/Slic3r
cd Slic3r
sudo perl Build.PL
sudo cpan Wx


3.- Instalación del cpan
Parece que los cpan dan problemas en Ubuntu, por lo que no termina de hacer bien esta instalación, es aqui donde me pongo a buscar en los foros, y me encuentro con uno que dice que hay que poner estas otras ordenes en la consola:

sudo perl -MCPAN -e 'install XXX'
sudo perl -MCPAN -e 'install Moo'
sudo perl -MCPAN -e 'install Math::Clipper'
sudo perl -MCPAN -e 'install Math::ConvexHull'
sudo perl -MCPAN -e 'install Math::Geometry::Voronoi'
sudo perl -MCPAN -e 'install Math::PlanePath'
sudo perl -MCPAN -e 'install Wx'


4.- Script de instalación:
Como la cosa seguía sin funcionar, volvía a buscar en los foros, y dí con un script de instalación como el del PrintRun, que este hizo por fin, que funcionase las wx (windows X) de las narices.

4.1.- Creación del script:
Haz un nuevo documento, que se llame como tu quieras, yo le llamé "Slic3rInstall", y mete todo esto dentro:  
 #!/bin/bash

if (( EUID != 0 )); then
    echo "please re-run this script as root."
    exit 1
fi

apt-get install build-essential libgtk2.0-dev libwxgtk2.8-dev libwx-perl libmodule-build-perl

apt-get install cpanminus

cpanm --install Boost::Geometry::Utils Math::Clipper Math::ConvexHull Math::Geometry::Voronoi Math::PlanePath Moo Wx Growl::GNTP

4.2.- Dar permisos y ejecutar el script.
Daremos permisos al script, y lo ejecutaremos COMO ADMIN con estas ordenes en la consola, desde la carpeta donde tenemos el script claro:

chmod +x Slic3rInstall
sudo ./PrintrunUpdate
 

4 comentarios:

  1. tutorial CURRADISIMO, gracias a este tutorial he podido cargar con exito todo el codigo en mi arduino MEGA y instalar todo el software necesario para empezar a imprimir.

    Muchas gracias por tu aporte.

    Saludos desde castellon.

    Leo

    ResponderEliminar
  2. MUCHAS GRACIAS eres un fenomeno,

    saludos desde Madrid!!!

    Marco Vereda

    ResponderEliminar
  3. Estupendo tutorial, muy currado, muchas gracias.
    En el punto 6.7 creo que hay un error pone true en el eje Z en vez de en el E

    Un saludo

    ResponderEliminar
  4. Estupendo tutorial, muy currado, muchas gracias.
    En el punto 6.7 creo que hay un error pone true en el eje Z en vez de en el E

    Un saludo

    ResponderEliminar