Prusa i3 Hephestos con Auto Bed Leveling (nivelado automático)

He cambiado nuestra impresora a un espacio donde el nivelado de cada esquina se me hace más complicado. La máquina está perfectamente instalada en su nuevo hueco, pero es menos accesible para mí. Por la incomodidad al acceder al tornillo superior derecho y no ajustarlo debidamente, ya se me han despegado dos piezas, algo que no me ocurría desde mis primeros días imprimiendo. Habiendo aprendido tanto sobre la calibración manual, creo que ya ha llegado el momento de superarla. Voy a implantar la importante mejora del auto nivelado de la cama, me lo he ganado.

Gracias al Auto Bed Leveling, el nozzle (la boquilla del extrusor) quedará ajustado a la distancia adecuada de la cama de impresión sin tener que girar ningún tornillo de forma manual. Como el nivelado automático compensa el desnivel de la cama, los motores del eje Z (si fuera necesario) se encargarán de corregir esa inclinación subiendo y bajando el extrusor durante la impresión de cada capa.

Aquí tenéis un ejemplo extremo para apreciar que los motores de Z ya no se activan únicamente al final de cada capa, como sería normal cuando calibramos manualmente. Podéis ver que están siempre compensando el desnivel (exagerado en este caso) para obtener una impresión perfecta:

Si nos ponemos puntillosos, el término de “auto bed leveling” no sería correcto, porque en realidad no está nivelando de forma automática, más bien compensando su desnivel. Técnicamente la cama sigue desnivelada si no le pones remedio con tus manitas, pero gracias a la información que la impresora recoge en varios puntos, sabe corregir el desnivel sobre la marcha. Un maravilla, amigos.

 

¡¡¡LEER!!! Aviso importante:

Me he animado a escribir esta guía porque no he encontrado nada lo suficientemente fácil para que un novato en Arduino, Marlin y compilaciones, pueda preparar un firmware adecuado en un rato. Pasé un sábado entero luchando contra todo tipo de errores y compilaciones problemáticas que nunca terminaban de funcionar, corrigiendo código que en ocasiones ni siquiera entendía. El sábado dio paso al domingo, y cuando creía que todo funcionaba correctamente, tuve que volver a empezar. Acabé tan cansado que descarté seguir con el firmware de BQ, descargué el último Marlin oficial (1.1.8 en ese momento) y configuré un par de tonterías para mi impresora. Como no quiero que otros pasen por la misma odisea que yo, comparto aquí una solución paso a paso, la más fácil que puedo ofrecer, e incluso mi firmware tal cual lo tengo yo configurado.

Este método lo he confeccionado en torno a una Prusa i3 Hephestos de BQ, el modelo original con RAMPS 1.4 y placa basada en Arduino Mega 2560, sin cama caliente. No me hago responsable de posibles daños que pueda sufrir tu impresora, ni puedo ofrecer más ayuda que esta guía. Si tienes dudas que no quedan resueltas, probablemente no sepa la respuesta. ¿Sirve esta guía para otras impresoras? No lo sé. ¿Sirve para otros sensores? No lo sé. ¿Funciona con cama caliente? Pues tampoco lo sé porque nunca he instalado una. No debería ser complicado, pero yo no puedo probarlo

Gracias a todos los que comparten su conocimiento sin pedir nada a cambio. Os animo a aportar vuestra experiencia, opiniones y correcciones, hagamos que el Auto Bed Leveling sea sencillo para todos los usuarios de una Prusa i3 Hephestos. Empezamos.

 

01 – Hardware necesario y preparación:

Sensor inductivo: SN04-N Proximity Sensor NPN NO. Lo compré en eBay por 4 euros. Su distancia de medición es de 4mm.

Imprimid esta pieza, montad el sensor e instalad sustituyendo la original: https://www.thingiverse.com/thing:1540967 (Gracias a Lucky del foro de BQ)

Como el sensor detecta metal, tendréis que colocar papel de plata bajo el cristal.

Aunque dispondremos de un SENSOR, no nos desharemos del viejo interruptor de final de carrera del eje Z. Si por cualquier razón el sensor falla, tendremos el final de carrera original que evitará la colisión del nozzle con el cristal. Una de las alternativas más fáciles que he visto hacer a otros usuarios es la siguiente:

  1. Desconectar el interruptor de final de carrera Z y soldar sus cables al botón de pánico del LCD
  2. Los cables del sensor, soldarlos o conectarlos donde anteriormente estaba el final de carrera Z (cable marrón = positivo, cable negro = output, cable azul = negativo).

 

02 – Software necesario y preparación:

———-

Windows 7 (probablemente se pueda con otros sistemas)

Última versión de Arduino IDE: https://www.arduino.cc/en/Main/Software

Firmware Marlin 1.1.8 configurado para mi máquina (última modificación 9/2/18 13:41): https://drive.google.com/file/d/1o9ovwB2fKZhKwb6FtfSx3S-7Y4bQpKpd/view?usp=sharing

Drivers FTDI (conexión USB): https://www.bq.com/es/support/prusa/support-sheet

———-

He trabajado en Windows 7 bajo una máquina virtual porque ya tenía ahí instalados los drivers USB para conectar la RAMPS al ordenador, probablemente existan drivers para otros sistemas, pero no lo sé con certeza. Quiero hacer esta guía lo más fácil posible, por eso recurro a Windows aunque no sea mi sistema habitual, sé que así funciona perfectamente y es el que más gente usa.

———-

Descargad e instalad Arduino IDE

Descargad e instalad los drives FTDI. Después, conectad la Ramps al ordenador. Esperad a que la detecte, reconozca e instale.

Descargad y descomprimid el firmware 1.1.8 que he compartido.

En su interior, encontraréis una carpeta llamada “Marlin”. Dentro de esta carpeta, buscad el archivo “Marlin.ino”. Hay que abrir este archivo con Arduino IDE, probablemente ya esté asociado y al hacer doble clic se inicie la aplicación. Si no está asociado, abrid Arduino IDE, pinchad en la flecha que apunta hacia arriba (opción “abrir”) y buscad el “Marlin.ino”

Esto es lo que obtendréis, una ventana cargada de código y pestañas, de las cuales solamente nos interesa “Configuration.h”. Ahí está la configuración de nuestra máquina:

 

03 – Ajustes del Configuration.h para varillas roscadas originales o husillos

Como ya he estado toqueteando el archivo de configuración, realmente no tendrías que hacer nada más que compilar y flashear. Pero hay algo que no he dicho, yo tengo instalados unos husillos TR8x2D; por cada giro completo, mi extrusor sube 8 milímetros.

Si le pusiste los mismos husillos que yo, creo que te gustará cómo he ajustado el tema de velocidades al hacer “Homing” (no va como una tortuga ni tampoco a la velocidad de la luz). En cualquier caso, ajústalo todo a tu gusto, ya debes saber hacerlo.

Si sigues con las ruidosas y bailongas varillas roscadas originales (las mías eran un suplicio), tienes que cambiar un par de cosas de mi configuración para dejarla como originalmente estaba. Busca las siguientes líneas (utiliza ctrl+f para buscar rápidamente) e introduce los valores que te indico:

Cambiar

#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 400, 100.47095761381482 }

por

#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 4000, 100.47095761381482 }

Cambiar

#define DEFAULT_MAX_FEEDRATE          { 200, 200, 30, 25 }

por

#define DEFAULT_MAX_FEEDRATE          { 200, 200, 3.3, 25 }

Diría que ya está hecho, si Z va demasiado rápido con las varillas originales avísame.

 

04 – Ajustes del Configuration.h para elegir el tipo de Bed Auto Leveling y ubicación del sensor (offset)

Los modos a elegir son los siguientes, pero yo ya he dejado activado el BILINEAL, no tienes que cambiar nada:

Auto-nivelado de 3 Puntos:
Examina tres puntos arbitrarios en la cama (no colineales).
Tú especificas las coordenadas XY de los tres puntos.
El resultado es un único plano inclinado. Mejor para una cama plana.

Lineal:
Examina diversos puntos en una cuadrícula.
Tú especificas el rectángulo y la densidad de los puntos de muestra.
El resultado es un único plano inclinado. Mejor para una cama plana.

Bilineal:
Examina diversos puntos en una cuadrícula
Tú especificas el rectángulo y la densidad de los puntos de muestra.
El resultado es una malla 3D. Mejor para camas grandes o irregulares.

UBL (Unified Bed Leveling):
Un sistema integral de nivelación que combina las características y los beneficios de otros sistemas. UBL también incluye la generación de malla integrada, validación de malla y sistemas de edición de malla.

Mesh Bed leveling:
Examina una cuadrícula manualmente.
El resultado es una malla, adecuado para camas grandes o irregulares (ver bilineal)
Para máquinas sin sensor, se proporciona un sistema por pasos para nivelar manualmente, ajustando la distancia de Z en cada punto. El proceso es guiado paso a paso desde el LCD.

Si imprimes sobre una cama en buen estado, como por ejemplo el cristal plano original de la Hephestos, realmente no necesitas más de 3 puntos para hacer un auto-nivelado perfecto. La opción que tengo activada en este firmware es Bilineal con un punto de medición en cada esquina. ¿Cómo se activa o desactiva cada tipo? Simplemente eliminando las dos barritas “//” delante de su nombre, pero solamente puedes activar una. En la siguiente imagen se puede ver la opción AUTO_BED_LEVELING_3POINT activada:

Ya estamos acabando…

 

05 – Ajustes finales, llashear firmware nuevo, calibración de la cama…

———-

Primero, recomiendo una calibración manual de la máquina. Asegurándonos de que el eje Y está bien nivelado y la cama queda paralela a éste. Y ahora, vamos a rematar la instalación del sensor con sus ajustes finales.

A continuación, mi consejo es compilar y flashear ya el firmware, así no tendrás problemas para escribir en la EEPROM (el firmware de BQ no lo permite). Para compilar y enviar el nuevo firmware a la placa, en Arduino IDE pinchad en la flecha que apunta hacia la derecha. Esperad a que en pantalla (ordenador) se muestre “done uploading” y el LCD de la impresora se reinicie.

Cumplid todos los pasos, solamente así me ha funcionado tras varios días perdidos con valores que no tenían ningún sentido porque mi EEPROM no se actualizaba correctamente con los “offset” nuevos. Intentaba aplicar nuevos valores, pero era como si se sumaran a los anteriores en lugar de sobreescribirlos. Me estaba volviendo loco y cerca de abandonar. Resulta que hay una opción para restablecer la EEPROM a la que se accede desde el LCD, se llama REINITIALIZE EEPROM y devuelve los offset al valor que indique el último firmware.

———-

Bien, instalad el firmware que he compartido (pinchad en la flecha que apunta hacia la derecha en Marlin) y seguid estos pasos:

En el LCD, usad la opción Initialize EEPROM para que no os pasen cosas raras como a mí.

Abrid Pronterface y haced un auto home. Z será el último en ir a origen, lo hará en el centro de la cama. Cuando baje, será el sensor quien le indicará que se detenga y subirá un poquito.

Enviad M851 Z0 para reiniciar el offset actual de Z.

Enviad M500 para guardar y M501 para activar estos cambios.

Enviad G28 Z0 para hacer un home de Z. Al acabar subirá un poquito.

Enviad G1 F60 Z0 para enviar Z al punto más bajo permitido (esta vez no subirá). Ahora el nozzle está ubicado en Z0, pero sigue a demasiada altura para imprimir correctamente.

Enviad M211 S0 para desactivar el límite por software, así podremos bajar más.

Poned una hoja de papel y desde Pronterface bajad el nozzle en incrementos de 0.1 hasta que la toque. Parad en el punto exacto en el que pasa de no tocarla a tocarla.

Mirad en el LCD de la impresora la posición actual de Z. Por ejemplo Z-0.7, ése sería mi offset, la distancia entre mi nozzle y el punto de activación de mi sensor.

(El siguiente paso no me funciona correctamente desde Pronterface, no puedo comprobar que es correcto, por eso lo hago desde el Firmware)

Volved al Configuration.h de Marlin usando Arduino IDE e introducid en la siguiente línea vuestro offset anterior:

#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.7  // Z offset: -below +above  [the nozzle]

Compilad y enviad a la impresora. Ya está hecho. No estaría mal, para evitar líos de última hora, inicializar la EEPROM desde el LCD para activar los cambios finales.

Desde el LCD haced un nivelado de la impresora sin los clips que sujetan el cristal, en mi máquina todo va bien pero no puedo dar por hecho que vuestro nozzle no tocará uno de vuestros clips, aunque como digo, me he encargado de que el extrusor con todo montado no roce en ningún sitio. Si no os convencen los puntos de nivelado tendréis que modificarlos en el firmware, están aquí:

Recordad que para imprimir con nivelado automático tendréis que añadir la orden g29. Mi Start code en Simplify3D suele ser éste:

G21 ;metric values
G90 ;absolute positioning
G28 X0 Y0 ;llevar X e Y a origen
G28 Z0 ;llevar Z a origen
G29 ;autonivelado
G1 Z50.0 F1000 ;apartar el nozzle 50mm para poder retirar el plastico extruido a continuacion
G92 E0 ;zero the E-axis
G1 E40 F250 ;extruir 40mm de filamento a 250mm/min
G92 E0 ;zero the extruded length again

En vuestro software laminador tendréis que hacer varias pruebas hasta dar con la altura adecuada para la primera capa. En mi caso, la primera capa me sale limpísima, lisa y con líneas perfectamente rectas si la hago a un 90% respecto a la altura de capa. Por ejemplo, si fuera a imprimir con una altura de 0.32 milímetros, la primera capa la haría de entre 0.28 y 0.29 milímetros. Hay que hacer un par de pruebas para dar con la cifra más adecuada, pero eso para vosotros ya es pan comido.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.