Sei sulla pagina 1di 23

Antes de empezar, decir que implementar el autolevel es un proceso laborioso, que incluye

el cambio del firmware original y en algunos casos, realizar algún pequeño montaje
eléctrico. Por lo que, si decidís hacerlo, será por vuestra cuenta y riesgo.

Cambiar el firmware

(Nota: Todo lo que pondré a lo largo de este tutorial es en entorno Windows.)

Antes de nada y en respuesta a varias preguntas que se hacen en el foro, decir que el
cambio de firmware tiene una repercusión mínima, si es que tiene alguna, en la calidad de
impresión.

El firmware se limita a controlar el hardware para realizar las ordenes que se le pasan en
formato gcode, por lo que por ahí hay poco margen para la mejora.

Las ventajas de ir a un firmware abierto son: primero, que permite un control total sobre
todos los parámetros de la configuración del mismo y segundo, que da la posibilidad de
implementar funciones que no permite el original. Por ejemplo, el autolevel.

Por tanto, lo primero que haremos será cambiarlo. Si queréis guardar una copia del
original, para restaurarlo si no os convence el cambio, en este post tenéis toda la
información para realizarla.

Creo que el firmware más interesante actualmente es Marlin, tanto por características
como por la gran comunidad que tiene detrás. Hasta hace poco, no soportaba las placas
Anet y por ello había que utilizar una versión preparada para ellas denominada Skynet3D.
Pero la última versión de Marlin ya las soporta y parece ser que han abandonado el
desarrollo de Skynet.

La última versión de Marlin (en el momento de escribir esto es la 1.1.6), se puede


descargar de aquí.

Para configurar y cargar el firmware utilizaremos el IDE de Arduino. En el momento de


escribir esto, la última versión es la 1.8.5. En versiones anteriores venía incluido en Marlin,
pero en esta última versión ya no viene, por lo que hay que descargarlo directamente de
su página aquí.

Al contrario que Marlin, el IDE de Arduino no trae configurada la placa Anet. Para poder
utilizarla, hay que descargar los datos de la placa y colocarlos en él. Se pueden descargar
de aquí.

Una vez descargados y descomprimidos los tres zip, tendremos todo lo necesario para
configurar y cargar el firmware en la impresora. Conviene ponerlos juntos en una misma
carpeta, para no andar dando vueltas. Por ejemplo, nos quedaría así:
Ahora, copiamos la carpeta anet-board-master\hardware\Anet y la pegamos dentro
de la carpeta arduino-1.8.5\hardware\. Así tendremos la placa Anet 1.0 en el IDE de
Arduino.

Marlin trae, en la carpeta Marlin-1.1.x\Marlin\example_configurations\Anet\, dos


carpetas (A8 y A6) que tienen dentro los
archivos Configuration.h y Configuration_adv.h, ya preconfigurados para esas
máquinas.
Copiaremos los dos archivos correspondientes (dependiendo de la máquina que
tengamos), en la carpeta Marlin-1.1.x\Marlin\, indicando que sustituyan a los que ya
existen en ella con el mismo nombre.

A partir de aquí, a lo largo de todo el tutorial asumiré que la máquina es una A8. Si tenéis
una distinta, tendréis que cambiar los datos que varían de una máquina a otra donde
corresponda.

Ejecutamos el archivo arduino.exe, que se encuentra en la carpeta arduino-1.8.5:


En el menú Archivo, seleccionamos Abrir y buscamos el archivo Marlin.ino que se
encuentra en la ruta Marlin-1.1.x\Marlin\. Pulsamos Abrir.

En la parte superior de la ventana aparecen una serie de pestañas, que se corresponden


con todos los archivos que forman Marlin. Dado que hay muchos y no caben todas sus
pestañas en la pantalla, a la derecha de ellas hay una flecha que despliega todas las que
hay.

Normalmente, la configuración suele ser desactivar o activar unos parámetros concretos o


bien darles un valor.

Lo primero se hace poniendo o quitando (comentando o descomentando), delante del


parámetro de que se trate, una doble barra hacia la derecha (//).

Los valores se indican después del parámetro, con uno o varios espacios entre ellos.
Seleccionamos la pestaña configuration.h.

Este archivo ya está preparado para utilizarlo directamente con la A8, pero podemos
cambiar un par de cosas para que quede mejor: la lengua en que se muestran los
mensajes de la pantalla de la impresora y el nombre que se muestra en la pantalla de
inicio.

Para lo primero, hay que buscar la línea #define LCD_LANGUAGE en y cambiar


el en por el código de la que nos interese. Hay un listado con los disponibles, justo encima
de esa línea.

(Nota: Hay mucha gente que se desespera buscando un parámetro concreto de


configuración en un fichero tan extenso.
Para que no os pase esto, podéis usar la utilidad de búsqueda.
En el menú Editar, seleccionáis Buscar, en el cuadro de diálogo ponéis el parámetro que
estáis buscando (por ejemplo, LCD_LANGUAGE) y desmarcáis la opción Buscar en
todas las Pestañas de Sketchs, para que solo busque en la pestaña que estamos (si es
eso lo que queremos).
Pulsando Buscar, se posicionará en el primer punto donde se encuentre ese parámetro.
Si no es el que buscamos, pulsando de nuevo buscará el siguiente y así hasta que no
encuentre más.)

Para lo segundo, al principio del configuration.h deberéis descomentar (quitar la // del


principio) la línea //#define CUSTOM_MACHINE_NAME "3D Printer", sustituyendo lo
que hay entre las comillas por el nombre que queráis que aparezca. Tened en cuenta que
la línea de la pantalla original tiene un tamaño de 19 caracteres y que el nombre que
pongáis se mostrará así: nombre lista..

Ya que estamos con el tema de la lengua y la pantalla, hago un inciso para comentar que
las palabras que aparecen en la pantalla se pueden cambiar por las que nosotros
queramos, siempre teniendo en cuenta lo comentado para el tamaño de las líneas.

Para ello, tenemos que buscar la pestaña correspondiente a la lengua de que se trate, que
tendrá el nombre language_código.h. En este archivo se encuentran las palabras que
pueden aparecer en la pantalla y se pueden cambiar por lo que se quiera (sin perder de
vista de qué se trata o tendréis después problemas para interpretar la pantalla).

Con lo realizado hasta ahora, el firmware es operativo y puede sustituir ya al original,


imprimiendo la impresora con él sin ningún problema.

Pero aún no está configurado para realizar el autolevel ni para controlar el sensor, por lo
que si se utiliza ya, hay que hacerlo con el interruptor de fin de carrera mecánico en Z.

Ahora vamos al menú Archivo y seleccionamos Salvar para guardar los cambios.

Ya podemos cargarlo en la impresora.

Para hacerlo, necesitamos tenerla conectada por USB al ordenador e instalado el


driver CH340. Si no se instala automáticamente al conectar y encender la impresora, se
puede hacer manualmente utilizando el driver que se encuentra en la tarjeta de memoria
que viene con ella.

Una vez instalado el driver y conectada la impresora, al encenderla se le asigna un


puerto COMx (donde x es un número). Hay que mirar cual es este número. Se puede ver
en el Administrador de Dispositivos, en el apartado Puertos COM y LPT:

En el menú Herramientas, seleccionaremos en el apartado Placa:”Anet V1.0“, en el


apartado Puerto:”COMx” el que tenga asignado la impresora y en Programador:”
USBasp“.

Quedará tal que así (cambiar el COM3 por el que corresponda):

Ahora, pulsando sobre el botón circular con una flecha dentro (Subir), se compilará y se
cargará en la impresora el firmware.
Cuando termine (pondrá Subido), se reiniciará la impresora y aparecerá el nuevo mensaje
de bienvenida.

Y ya tendremos operativa la impresora con el nuevo firmware cargado, pero aún sin
autolevel.

Autolevel, paso a paso (II): el sensor.

Qué sensor utilizo?

Lo primero que hay que hacer es decidir qué tipo de sensor vamos a utilizar.

A grandes rasgos, los sensores se dividen en dos tipos: de proximidad y de contacto.

Los primeros detectan la cama a distancia, mientras que los segundos necesitan tocarla
para realizar la detección. Lógicamente, estos últimos son algo más complejos, ya que
tienen que implementar un sistema para desplegar la sonda de contacto antes de medir y
para retraerla una vez hecha la medición, ya que sino esta entraría en contacto con la
pieza durante la impresión.

De este tipo son los BLTouch y similares. No voy a tratarlos ya que no los he usado y no he
estudiado sus características, pero los que estéis interesados en este tipo de sensor,
en este post tenéis mucha información.

Los de proximidad pueden ser de muchos tipos, pero los que más se utilizan en las
impresoras 3D suelen ser dos: inductivos o capacitivos.

La diferencia entre ellos es el tipo de material que pueden detectar: los inductivos solo
detectan metal, mientras que los capacitivos pueden detectar una gama más amplia,
incluyendo vidrio y plásticos.

A efectos prácticos, los dos funcionan perfectamente, por lo que la decisión de usar uno u
otro depende de sobre qué vamos a imprimir: si es sobre la cama directamente o con
cinta, nos valen los dos; si vamos a poner un vidrio, por ejemplo, es conveniente poner
uno capacitivo ya que, aunque hay algunos sensores inductivos que funcionan a través del
vidrio, la mayoría no lo hacen.

En el apartado de conexionado, veremos los modelos más utilizados.

Colocación

Una vez hemos decidido que sensor utilizar, tenemos que fijarlo en el conjunto del
extrusor, ya que tienen que moverse juntos. Naturalmente, habrá que implementar un
soporte que se pueda anclar en algún punto de aquel, lo suficientemente robusto para que
el sensor no se mueva una vez fijado en él.
Dos cosas hay que tener en cuenta: debemos procurar que el eje vertical que pasa por el
centro del sensor, quede lo más cerca posible del eje vertical que pasa por el centro del
agujero de la boquilla del extrusor y hay que colocarlo de forma que se pueda regular su
distancia a la superficie a detectar.

Si no diseñamos nuestras propias piezas, en internet hay muchos modelos. Tendremos que
buscar el que sirva para nuestro conjunto máquina-sensor y que mejor cumpla con las dos
condiciones anteriores.

Conexionado

Este apartado y el de configuración, son los que más problemas pueden presentar.

A la hora del conexionado, hay que tener en cuenta dos aspectos: la alimentación del
sensor y la forma en que entrega la señal de detección.

Veamos primero la alimentación.

Los sensores de proximidad, ya sean inductivos o capacitivos, se suelen conectar a la placa


de la impresora de la forma más sencilla: sustituyendo al interruptor mecánico de fin de
carrera del eje Z y utilizando su conector en la placa.

Esto presenta un problema: en los conectores de final de carrera solo hay 5V y no todos
los sensores pueden trabajar con tan poco voltaje.

Además, saber si un sensor funciona o no directamente conectado al conector de fin de


carrera, no es fácil sin probarlo. Externamente, los de un mismo modelo son todos iguales,
ya que hay una infinidad de fabricantes para las mismas referencias. Pero la construcción
interna varía mucho de unos a otros y unos sí funcionan y otros no.

Todos los sensores de proximidad que se venden para este fin, en sus características
indican una corriente de funcionamiento superior a 5V. Normalmente, 6-36V o 10-30V.
Pero, a pesar de ello, algunos pueden hacerlo solo con 5V.

Parece ser que el tipo SN04 es uno de ellos, a pesar de poner en sus características que
hay que alimentarlo con entre 10V y 30V. Este es del tipo inductivo.

Entre los capacitivos, el más utilizado es el tipo LJC18A3-H-Z/BX, que, aunque he visto por
ahí comentarios de que hay algunos que funcionan a 5V, a mí no me funcionaron ninguno
de los dos que probé (de dos fabricantes distintos).

El conexionado de estos sensores (suponiendo que funcionen a 5V) es muy sencillo e


incluso algunos ya traen colocado el conector. Todos los que conozco utilizan un convenio
estándar de colores para los cables: marrón, negro y azul.

El marrón es el positivo de alimentación del sensor (+VCC), el azul el negativo (GND) y el


negro el de señal.
La asignación de colores en el conector de la placa es el siguiente:

La señal es el otro aspecto a tener en cuenta.

Atendiendo a como entregan esa señal de activación, los sensores pueden ser de cuatro
tipos: NPN-NO, NPN-NC, PNP-NO y PNP-NC.

Las siglas antes del guion, nos indican que tipo de señal da el sensor. Estos sensores son
como interruptores electrónicos que, al activarse, conectan el cable de señal (negro) con
uno de los otros dos (marrón o azul). Los NPN son los que lo hacen con el azul, los PNP los
que lo hacen con el marrón.

Las siglas después del guion, indican el estado del sensor cuando está inactivo. El NO
indica que está abierto (es decir, no da señal) y el NC que está cerrado (da señal).

Para las Anet se necesita un sensor del tipo NPN-NO, ya que la placa interpreta como
activado el fin de carrera, cuando el pin de señal del conector se pone a 0V (GND).

En el caso de que nuestro sensor funcione con los 5V del conector, ya lo tenemos resuelto.
Pero si no lo hace (y queremos usarlo de todas formas), tendremos que alimentarlo con un
voltaje en su rango de funcionamiento.

En las placas Anet solo tenemos accesibles dos voltajes en CC: uno el ya mencionado de
5V y otro el general de 12V.
Por suerte, este último se encuentra dentro de los límites de todos los sensores, por lo que
nos sirve perfectamente, salvo por un aspecto: cuando el sensor NPN-NO no está activado
(no da señal), por el cable de señal da un voltaje ligeramente menor que el de
alimentación, es decir, más cercano a los 12V con los que lo estamos alimentando, que a
los 5V que admite la placa por el conector de fin de carrera.

Para solucionar esto, hay que implementar un divisor de voltaje que convierta los casi 12V
que da el sensor en esas condiciones, en los 5V que soporta la placa.

La forma más simple y efectiva, es usar un diodo Zener como regulador de tensión. Para
ello hay que conectarlo en polarización inversa. Es decir, con el cátodo a positivo y el
ánodo a negativo.

El esquema de conexión sería este:

En los diodos Zener, el cátodo se indica con una raya en uno de sus extremos.

Una vez colocado y conectado el sensor, antes de seguir adelante, habrá que probar que
funciona.

Para ello, colocaremos el carro del extrusor suficientemente alto para tener margen de
maniobra y le daremos una orden de movimiento hacia abajo en el eje Z.
Colocando un objeto apropiado delante del sensor, este tiene que actuar como si fuese el
interruptor de fin de carrera, deteniendo el avance.

Si no sucede así, apagaremos la impresora antes de que la boquilla choque con algo (para
eso el margen de maniobra) y comprobaremos qué es lo que está mal.

Una vez tengamos colocado, conectado y funcionando el sensor, solo nos queda regular su
altura. Para ello, deberemos tener la superficie de impresión tal y como la vayamos a usar.

Todos los sensores tienen una sensibilidad que fija la distancia máxima de detección. En
algunos esta sensibilidad es variable y se puede ajustar mediante un potenciómetro. Si
nuestro sensor es de sensibilidad regulable, conviene regularlo para obtener la distancia
máxima posible de detección.

Para medirla, movemos el eje Z con la mano hasta que se active el sensor (enciende la luz)
y medimos la altura a la que queda de la superficie detectada.

Una solución sencilla para la regulación de la altura del sensor, es dejarlo a una tal que
cuando se active, la boquilla del extrusor se encuentre a una distancia de la cama igual a la
mitad de la distancia de detección aproximadamente.
Tal que así:

Con ello, nos aseguramos que el sensor no choque con nada durante la impresión y que,
en caso de fallo en la detección (que ocurre algunas veces, no tengo claro el porqué),
tengamos algo de margen para parar todo antes de que choque la boquilla con la cama.
Una vez colocado probaremos, moviendo a mano el eje Z, que la luz del sensor se activa
en el lugar adecuado.

Un punto importante a tener en cuenta es que, una vez montado el sensor y hasta que se
configure adecuadamente el firmware, hay que tener cuidado de no hacer home al eje Z,
ya que podría hacerlo con el sensor fuera de la cama y al no activarse el fin de carrera,
podrían producirse daños.

Con esto quedaría lista la parte física, quedando solo ya la configuración del firmware para
que controle correctamente el sensor y el proceso de autolevel.

Esto lo veremos en el próximo y último capítulo de este tutorial.

En este último post, veremos lo único que queda por hacer para que el autolevel sea
operativo: la configuración del firmware.

Pero antes de meternos de lleno en ello y para que los que no lo conocen entiendan bien lo
que sigue, voy a explicar un poco cómo está definido el sistema de posicionamiento de la
impresora.

Como muchos ya sabréis, estas impresoras son de tipo cartesiano, lo que significa que la
impresión se realiza mediante movimientos en los tres ejes de un sistema de ese tipo. Este
sistema conforma lo que se denomina el volumen de impresión, que para una A8 tiene un
tamaño de 220x220x240 mm.

La pieza impresa se compone de varias capas apiladas en la dirección positiva del eje
vertical (Z). Dichas capas se conforman mediante movimientos en el plano que definen los
otros dos ejes (X e Y). El X va de izquierda a derecha y el Y de delante a atrás.

El origen de este plano (punto 0,0), se encuentra situado en la esquina delantera izquierda
del soporte de impresión y se extiende (para la A8 de serie) 220 mm en cada eje, siendo el
punto más alejado en el que se puede imprimir por tanto el (220,220).

El firmware, que es el software que controla la impresión, sabe dónde se encuentra en


cada momento gracias a que, antes de comenzar a imprimir, comprueba donde se
encuentra el punto (0,0,0) del espacio de trabajo. Esto lo realiza mediante los interruptores
de fin de carrera, de los cuales existe uno para cada eje. Esta comprobación es lo que se
denomina “hacer home”.

Los interruptores de los ejes X e Y (el del Z es caso aparte, ya que es ajustable) podrían
estar colocados de forma que, al activarse, el centro de la boquilla del extrusor estuviese
en el origen del plano de impresión (0,0), pero el “sumo hacedor” de la A8 no lo quiso así.

Por ello, hay que indicarle al firmware a que distancia se queda de dicho punto en cada
uno de esos ejes, para que lo tenga en cuenta y sepa dónde está realmente. Es lo que se
denomina el desfase (offset, en inglés). Los desfases siempre son negativos o 0, ya que si
no fuese así se perdería área de impresión.

Debido a estos desfases, la boquilla del extrusor puede moverse en un área mayor que el
área de impresión, ya que a esta se le añaden aquellos en cada eje. A este área ampliada
podemos denominarla el área de desplazamiento.

Esta es con la que realmente trabaja el firmware y, por defecto, está configurado para que
la boquilla del extrusor no pueda exceder sus límites. Aunque, como veremos más
adelante, eso se puede cambiar.

Con un esquema quedará más claro:

El software que crea el archivo que incluye los comandos gcode que definen la pieza (el
fileteador o “slicer”), posiciona los puntos referidos al área de impresión, por lo que el
firmware realiza una conversión al área de desplazamiento, que es la que él maneja,
simplemente restando el desfase que tenga programado. Por eso es importante tener bien
configurados esos desfases.
Teniendo todo esto en cuenta, vamos a configurar el firmware.

Para empezar, ejecutamos el IDE de Arduino y nos colocamos en la


pestaña configuration.h, como vimos en el cambio del firmware.

Lo primero que vamos a hacer, por si se nos va la mano y hacemos un home all, es
configurar lo que se denomina en inglés Z Safe Homing, que es definir un punto seguro para
que el eje Z haga home o, lo que es lo mismo, un punto donde el sensor esté sobre la
superficie a detectar.

Se realiza en las siguientes líneas (recordad lo que indiqué para encontrar parámetros):

//#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing
all axis (G28).
#define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing
all axis (G28).
#endif

y para activarlo, descomentamos la primera línea.

Por defecto, el punto que trae configurado es el centro de la cama (X_BED_SIZE / 2,


Y_BED_SIZE/ 2), ya que ahí es casi completamente seguro que el sensor estará sobre la
superficie de impresión, pero podemos indicar el que queramos siempre que se cumpla
para él ese requisito.

Aprovechando que estamos aquí, justo debajo se encuentran las líneas que definen la
velocidad con que se hace el home en los distintos ejes.

Son las líneas:

#define HOMING_FEEDRATE_XY (100*60)


#define HOMING_FEEDRATE_Z (4*60)

La primera define la de los ejes X e Y. Por defecto viene a 100 mm/s.


La segunda define la del eje Z. Por defecto está a 4 mm/s, lo que para mi gusto es un poco
lento. Yo la tengo a 6 mm/s:

#define HOMING_FEEDRATE_Z (6*60)

Con estos cambios, ya podemos volver a subir el firmware a la impresora y a partir de este
momento, ya podemos hacer un home all con seguridad.

La primera vez conviene tener una mano sobre el interruptor para que, en caso de que no
se active el sensor (cosa que pasa alguna vez, aún no sé muy bien porqué), parar la
impresora rápidamente.

Lo primero que tenemos que comprobar es que estén bien los desfases para nuestra
máquina. Son los valores de los parámetros X_MIN_POS e Y_MIN_POS.

Como vimos al realizar el cambio a Marlin, este trae unos archivos para la A8 ya
configurados con los valores que suele tener el montaje original (-33 para el X y -10 para el
Y).

Para comprobarlos no podemos emplear el home all, dado que tenemos activado el Z Safe
Homing y este nos lleva el extrusor al centro de la cama. Hay que hacer un home solo de X
e Y, enviando el comando gcode G28 X0 Y0.

Tendremos que conectar la impresora al ordenador mediante el cable USB y utilizar una
aplicación que permita enviar comandos gcode. Yo utilizo Pronterface, que podeis
descargar de aquí. Después de descomprimir el archivo zip, tendremos una carpeta con la
aplicación Pronterface.exe en su interior.

Al ejecutarla, nos sale esta pantalla:

En la parte superior izquierda de la ventana, configuramos el puerto COMx asignado a la


impresora y la velocidad de conexión a 115200 baudios. Pulsamos Conectar.

Nos aparecerá la información con la configuración actual de algunos parámetros de la


impresora.

Para enviar el comando, escribimos en el campo de texto de abajo a la derecha G28 X0 Y0 y


luego pulsamos Send (o la tecla Intro). El extrusor se colocará en el punto de activación de
los finales de carrera de X e Y. Después conviene pulsar en Motors off, que está debajo del
puerto, para desactivar los motores.

Una vez en esa posición, tenemos que medir a que distancia está el centro del agujero de
la boquilla del extrusor de los bordes izquierdo y delantero de la superficie de impresión.
Esos serán los desfases para nuestra máquina.

También tenemos que medir la distancia (en X y en Y), a la que se encuentra el centro del
sensor del centro del agujero de la boquilla del extrusor.

Si son hacia la izquierda o hacia delante, se toman como negativas (porque van en el
sentido negativo de los ejes X e Y, como vimos).

Anotamos esos cuatro valores para usarlos más tarde. Serían los valores A, B, C y D del
siguiente esquema:
En este ejemplo A, B y D serían negativas y C positiva.

Una vez tengamos esas medidas, comenzamos la configuración.

Cargamos el configuration.h en el IDE de Arduino y bajamos hasta la sección Z Probe


Options.

Dado que estamos usando para el sensor la conexión del final de carrera del eje Z,
descomentamos la línea:

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

Como utilizamos un sensor fijo, descomentamos la línea:

#define FIX_MOUNTED_PROBE

Más abajo, en la línea:


#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle]

en lugar del 0 pondremos el valor medido para C (positivo o negativo).

En la línea:

#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle]

en lugar del 0 pondremos el valor medido para D (positivo o negativo).

La línea:

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

la dejamos como está. El Z Probe Offset lo definiremos más tarde.

Más abajo, en la línea:

#define X_MIN_POS 0

en lugar del 0 pondremos el valor medido para A (debería ser siempre negativo o 0).

En la línea siguiente:

#define Y_MIN_POS 0

en lugar del 0 pondremos el valor medido para B (debería ser siempre negativo o 0).

Volvemos a la pestaña configuration.h.

Más abajo, en la sección Bed Leveling, debemos seleccionar el tipo de autolevel que
queremos utilizar. Yo utilizo el LINEAR, por lo que descomentaré este, quedando así:

//#define AUTO_BED_LEVELING_3POINT
#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

Más abajo, definimos el número de puntos de medición que tendrá la rejilla del autolevel.

En las siguientes líneas:

#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
se definen las filas y columnas de la rejilla.

Por defecto está configurada una de 3x3=9 puntos. He probado otras configuraciones con
más puntos, pero no he notado ninguna mejora apreciable, así que la dejaremos así.

Más abajo viene un ajuste con el que mucha gente tiene problemas: los límites de la rejilla
de medición.

ACTUALIZACIÓN
Gracias a la consulta realizada por @Ahyr0 en este post, tengo constancia de una
modificación que viene incorporada a las últimas versiones de Marlin (1.1.9 y 2.0) y que
cambia bastante la forma de definir la rejilla de medición del autolevel.
Se ha incorporado un nuevo parámetro, con la línea:

#define MIN_PROBE_EDGE 10

que indica lo que puede acercarse el sensor a los bordes de la cama definida.
Por otro lado, por defecto vienen comentadas las líneas donde se definen los límites de la
rejilla, ya que ahora si no se definen de forma explícita, se calculan de forma automática
para conseguir la rejilla máxima, por lo que no es necesario configurarlos a no ser que se
quiera centrar la rejilla.
Las líneas de definición de la rejilla, ahora vienen así:

//#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE


//#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE)
//#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
//#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE)

Por todo ello, ahora se puede configurar este tema de dos maneras: dejarlo como viene
por defecto y que sea él mismo quien calcule la rejilla máxima o bien haciéndolo como
hasta ahora, pero teniendo en cuenta el valor que se configure para MIN_PROBE_EDGE.
Si le damos el valor 0, estaríamos en la situación que teníamos hasta esta modificación y el
cálculo sería como se indicaba hasta ahora en el tutorial.
Si tiene un valor mayor que 0, hay que aplicárselo a los valores que calculábamos hasta
ahora, si estos están más cerca del borde de la cama que dicho valor.

Se configura en las siguientes líneas:

#define LEFT_PROBE_BED_POSITION
#define RIGHT_PROBE_BED_POSITION
#define FRONT_PROBE_BED_POSITION
#define BACK_PROBE_BED_POSITION

Y los problemas vienen porque a los valores que se indiquen ahí, tiene que poder llegar el
sensor. Si no es así, nos dará un error al compilar el firmware.

Esos valores están referidos al área de desplazamiento por lo que, para llegar a ellos, la
boquilla del extrusor no puede salirse de ella.

Dado que el sensor tiene que detectar la cama, tampoco deben estar fuera del área de
impresión o no habrá nada debajo de él que pueda detectar.

Los límites máximos para una rejilla funcional son (recordad que los valores A, B, C y D
pueden ser positivos o negativos):

Para #define LEFT_PROBE_BED_POSITION, con el sensor a la izquierda de la boquilla, 0. Con


el sensor a la derecha de la boquilla, A+C si es mayor o igual que 0. Sino, 0.

Para #define RIGHT_PROBE_BED_POSITION, con el sensor a la izquierda de la boquilla,


220+C. Con el sensor a la derecha de la boquilla, 220.

Para #define FRONT_PROBE_BED_POSITION, con el sensor hacia delante de la boquilla, 0.


Con el sensor hacia atrás de la boquilla, B+D si es mayor o igual que 0. Sino, 0.

Para #define BACK_PROBE_BED_POSITION, con el sensor hacia delante de la boquilla,


220+D. Con el sensor hacia atrás de la boquilla, 220.

Por esto es conviene colocar el sensor lo más cercano que se pueda a la boquilla, ya que
así maximizamos el tamaño de la rejilla que se puede usar.

Veámoslo con un ejemplo.

Supongamos que tenemos el sensor situado como vimos en el esquema de las medidas. Es
decir, a la derecha y por delante de la boquilla, por lo que A, B y D serán negativas y C,
positiva. Y que hemos obtenido para las mediciones los siguientes valores: A=-33 mm, B=-
10 mm, C=30 mm y D=-10 mm.

Con esos valores, los límites de la rejilla de medición máxima serían:

#define LEFT_PROBE_BED_POSITION 0 --> (A+C=-33+30=-3, menor que cero, luego 0).


#define RIGHT_PROBE_BED_POSITION 220 --> (sensor a la derecha, luego 220).
#define FRONT_PROBE_BED_POSITION 0 --> (sensor hacia delante de la boquilla, luego 0).
#define BACK_PROBE_BED_POSITION 210 --> (220+D=220+(-10)=210, luego 210).

Esa sería la rejilla máxima que se podría configurar en esta máquina sin que diese error al
compilar y con el sensor siempre dentro del área de impresión.

Pero es conveniente que la rejilla esté centrada y esta no lo está.

Para centrarla maximizando su tamaño, hay que mirar cual es la mayor distancia a la que
está del borde en cada eje e igualarla en el otro lado.
En este caso, solo hay que cambiar el eje Y, ya que está a 10 milímetros por la parte de
atrás.

Por lo tanto, la rejilla máxima centrada quedaría así:

#define LEFT_PROBE_BED_POSITION 0
#define RIGHT_PROBE_BED_POSITION 220
#define FRONT_PROBE_BED_POSITION 10
#define BACK_PROBE_BED_POSITION 210

Si queremos, a partir de esta, podremos reducirla aumentando por igual la distancia a los
distintos bordes de la cama.
En este caso sería conveniente reducirla en el eje X para que el centro del sensor no quede
justo en el borde de la cama.

Con los valores de los límites de la rejilla de medición, quedaría completa toda la
configuración. Ya se puede salvar y subir a la impresora el firmware.

Con esto, para poder utilizar el autolevel, ya solo nos queda configurar el desfase del
sensor en el eje Z (Z Probe Offset), que habíamos dejado pendiente.

Hay varias formas de hacerlo, pero yo creo que la más sencilla es mediante comandos
gcode.

Para ello, tenemos que conectar con la impresora como vimos antes y realizar el siguiente
proceso:

1º Calentar cama y fusor a sus temperaturas de impresión, esperando unos minutos para
que se estabilicen las dilataciones que se producen.

2º Fijamos el desfase a 0 con un comando M851 Z0 y lo guardamos en la EEPROM con


un M500.

3º Mandamos un comando G28 para hacer home a todos los ejes.

4º Dado que existe una limitación en el firmware que impide los movimientos hacia
posiciones negativas, hay que desactivarla mientras realizamos este ajuste. Para ello
enviamos el comando M211 S0. (¡Cuidado!, que desactiva las limitaciones de todos los
ejes).

5º Con los controles de movimiento del eje Z, tenemos que ajustar la altura de la boquilla
del extrusor para que roce ligeramente un folio de papel de 80 gr/m2 (lo que viene a ser
una décima de milímetro). Se pueden utilizar los movimientos de 10 mm y 1 mm (si está
aún lejos) y terminar con el de 0,1 mm para ajustarlo de forma precisa.

6º Fijamos el valor del desfase con un comando M851 Z-X.XX, siendo –X.XX el valor que
indica en este momento la pantalla para el eje Z. Guardamos el valor en la EEPROM con un
comando M500.

7º Volvemos a activar la limitación de movimientos negativos de los ejes, enviando un


comando M211 S1.

Y con esto la impresora está preparada para utilizar el autolevel.

Para probarlo, mandamos un comando G28 y cuando termine de hacer el home all,
mandamos un comando G29. Si todo está correcto, veremos cómo realiza la medición el
autolevel. Como siempre, la primera vez con la mano en el interruptor, por si acaso.

Ahora, para comenzar a imprimir solo queda configurar el fileteador (slicer) que utilicemos,
para que incluya el autolevel en los archivos gcode generados. Para ello, tendremos que
incluir en el script de inicio, una línea con un comando G29 justo después de la última línea
que tengamos con un G28.

Y con esto termino la serie de post sobre el autolevel. He revisado con cuidado todos los
post, pero siempre se cuela algún error. Agradeceré las correcciones.

Y si hay alguna duda o algo de la configuración que queráis conocer y que no he tratado,
preguntad e intentaré contestarlo.

Buenas impresiones para tod@s.

Edito 1:
En color granate está una corrección que he hecho sobre como centrar la rejilla máxima de
medición ya que, como lo tenía, no era realmente la máxima que se podia obtener.

Edito 2:
He cambiado el enlace para la descarga del Pronterface, pues el anterior ya no funcionaba.

Edito 3:
He modificado las indicaciones para ajustar el Z Offset, adaptándolas a como viene ahora
configurado por defecto el Z_AFTER_PROBING.

Edito 4:
He tachado todo el apartado en el que se indicaba como eliminar la limitación de
movimientos a valores negativos del eje Z, pues se puede hacer de una forma más sencilla
y manteniendo estos límites de seguridad.
He suprimido el punto 4 del ajuste del Z Offset, ya que era innecesario al tener activado
el Safe Homing y lo he sustituido por la forma de desactivar temporalmente el límite
anterior mientras se configura el Z Offset.
He añadido el punto 7 para volver a activar la limitación anterior.

Potrebbero piacerti anche