Skip to content

Instantly share code, notes, and snippets.

@Foxandxss
Last active November 24, 2021 16:07
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Foxandxss/86b8321ea4c56f241cc69acb2254dd27 to your computer and use it in GitHub Desktop.
Save Foxandxss/86b8321ea4c56f241cc69acb2254dd27 to your computer and use it in GitHub Desktop.
Tutorial de autolevel

Instalando el sensor

Lo primero será imprimir el soporte, y para ello en vez de usar el soporte ofrecido por skynet, vamos a usar uno alternativo de thingiverse.

Para sensores de 18mm (LJ18A3-8-Z/BX -- LJC18A3-H-Z/BY) necesitáis la pieza de 18mm que se instalará entre el ventilador y el disipador:

// FALTA FOTO, TENGO QUE INSTALAR EL SOPORTE NUEVO

También tendremos que conectarlo a la placa en lugar del final de carrera Z:

El sensor debería de quedar a la misma altura que la punta del nozzle, pero luego veremos el por qué y alternativas.

Descargando, configurando e instalando skynet

Lo primero es bajar skynet desde aquí. Le damos a la flechita arriba a la derecha para que nos descargue el paquete.

Lo primero es ir a la carpeta SkynetV2.3.1 -> Configuration y abrir la carpeta con nuestra configuración, por ejemplo en mi caso sería A8- 5buttonkeypad- autolevel- front left sensor (A8 con pantalla de 5 botones, con autolevel y sensor delantero izquierdo).

Dentro de dicha carpeta encontraremos un Configuration.h que copiaremos y pegaremos en la carpeta SkynetV2.3.1.

Ahora vamos a la carpeta de arduino, y dentro clickamos en arduino.exe

Primero asegurarnos que tenemos Anet V1.0 como placa:

Luego abrimos Archivo > Abrir y buscamos dentro de SKYNETV2.3.1 el fichero SKYNETV2.3.1.ino y lo abrimos.

Con esto se nos abre el proyecto. En las distintas pestañas, buscad y clicar la que pone "Configuration.h". Éste es el fichero que configura el firmware. Ya lo tendremos preconfigurado para nuestra impresora, pero vamos a ver qué opciones podemos tocar y por qué. Muchas de estas opciones se pueden cambiar desde la propia impresora a posteriori pero otros no, así que vamos a configurarlo ahora:

Vamos a buscar el apartado donde pone:

#define X_PROBE_OFFSET_FROM_EXTRUDER -26  // X offset: -left  +right  [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER -40  // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0   // Z offset: -below +above  [the nozzle]

Aquí no tenemos que tocar nada, ya está configurado para nuestro sensor, pero está bien entender qué hace: le estamos indicando la posición de nuestro sensor respecto a la punta del nozzle. Básicamente aquí pone que el sensor está a 26 milímetros a la izquierda, 40 hacia delante y a la misma altura, clavado. Por eso decía antes que el sensor tenía que estar a la misma altura.

El problema de tenerlo a la misma altura es que el sensor pasará rozando muy mucho con las piezas, y tener la impresora minimamente mal calibrada haré que golpee las piezas, por eso recomiendo subirlo al menos 1mm.

Tenemos 2 opciones, corregimos la distancia aquí y ahora, colocándole un +1 en vez de un 0, o lo hacemos luego mediante offset, lo cual, recomiendo. Así que lo dejamos a 0 aquí.

Ahora busca:

/**
 * Default Axis Steps Per Unit (steps/mm)
 * Override with M92
 *                                      X, Y, Z, E0 [, E1[, E2[, E3]]]
 */
#define DEFAULT_AXIS_STEPS_PER_UNIT   {100,  100, 400,90}

/**
 * Default Max Feed Rate (mm/s)
 * Override with M203
 *                                      X, Y, Z, E0 [, E1[, E2[, E3]]]
 */
#define DEFAULT_MAX_FEEDRATE          {400, 400, 8, 50}

/**
 * Default Max Acceleration (change/s) change = mm/s
 * (Maximum start speed for accelerated moves)
 * Override with M201
 *                                      X, Y, Z, E0 [, E1[, E2[, E3]]]
 */
#define DEFAULT_MAX_ACCELERATION      {2000,2000,100,10000}
/**
 * Default Acceleration (change/s) change = mm/s
 * Override with M204
 *
 *   M204 P    Acceleration
 *   M204 R    Retract Acceleration
 *   M204 T    Travel Acceleration
 */
#define DEFAULT_ACCELERATION          650    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  1000    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   1000    // X, Y, Z acceleration for travel (non printing) moves

En concreto nos interesa:

#define DEFAULT_MAX_ACCELERATION {2000,2000,100,10000}

Esto indica las aceleraciones máximas de X, Y, Z y Extrusor respectivamente. Personalmente lo tengo a:

#define DEFAULT_MAX_ACCELERATION {800,800,100,5000}

NOTA: El firmware oficial no parece tener una aceleración máxima, pero quiero suponer que sería algo así, tengo que probarlo:

#define DEFAULT_MAX_ACCELERATION {1000,1000,100,5000}

Además bajaría (o subiría):

#define DEFAULT_ACCELERATION 1000 #define DEFAULT_RETRACT_ACCELEREATION 3000 #define DEFAULT_TRAVEL_ACCELERATION 3000

A 1000, 3000 y 1000 respectivamente (la de en medio no la he tocado).

El oficial presumiblemente lo tiene a 1000, xxxx, 1000. Desconozco el valor del medio.

Todas estas opciones hará que la impresora vaya algo más lenta, pero es que si no pegará unos zumbidos de la muerte. Conforme vayamos metiendo mejoras, agarremos la impresora en una tabla, podríamos ir subiendo esos valores.

Otros valores que influyen en las velocidades son los jerks. Los jerks son los cambios de sentido y velocidad que hace la impresora. Esto influye bastante en el tiempo total de la impresión, pero baja un poco el ruido y para mi gusto deja bastante más calidad.

#define DEFAULT_XJERK                 20.0
#define DEFAULT_YJERK                 20.0
#define DEFAULT_ZJERK                  0.4
#define DEFAULT_EJERK                  5.0

Personalmente los tengo a 12.0 / 12.0 / 0.2 / 5.0.

Por otro lado, y de forma opcional, podemos poner el firm en castellano donde pone:

#define LCD_LANGUAGE en

Ponemos:

#define LCD_LANGUAGE es

Ahora solo nos quedaría enchufar la impresora, y darle a subir:

Que es el segundo botón comenzando por la izquierda, la flecha que apunta a la derecha.

Eso subirá el firmware a la impresora.

Cuando abajo ponga "Subido" y en nuestra impresora ya diga "SkyNet", ya podemos pasar al siguiente paso.

Calibrando el sensor

Si ya estábamos hartos de tanto rozamientos de folios, todavía tenemos que hacer más. El sensor será capaz de ver la cama, ajustar la impresión si no está totalmente recta... Aunque tenemos que decirle a qué altura empezar a imprimir. Podrá ver que la cama está ahí, ¿pero a qué altura empieza a imprimir? Lo mismo tenemos cristal y no se lo va a comer, ¿no?

Para hacer esto usaremos la app de impresión que usamos a diario, no hace falta el cura antiguo. Podemos usar repetier, octoprint, pronterface... Cualquiera que nos permita poder mover la Z a golpe de ratón.

Lo primero será calentar la cama y hotend, no podemos hacer una buena calibración si la cama está fría (y la usamos para imprimir). Para ello nos vamos a Prepare -> Preheat PLA -> Preheat PLA.

Lo segundo será poner la impresora en el home. Si vuestra aplicación no tiene un botón para ir al home (octoprint no tiene), pues os vais al menu Prepare -> Auto home y esperáis a que termine. Como medida cautelar, comprobaremos que ambas varillas de la Z estén a la misma altura. Si no, las ponemos a la misma altura y repetimos el home. Una vez estén bien, pasamos al siguiente punto.

Al terminar estará en Z10, entonces desde nuestra aplicación, bajamos el Z 10 mm, por ejemplo con octoprint sería:

Tenemos el 10 marcado, y le damos a la flecha hacia abajo de la Z. Una vez hecho, estará a Z0, pero en la mayoría de los casos, seguirá siendo mucho. La idea es colocar el folio, e ir bajando a razón de 1 o 0.1 (dependiendo de lo que quede por bajar) hasta que roce. Por ejemplo en mi caso está a -3.69 y ya el folio entra rozando, a -3.79 ya va mal. Si somos muy muy sibaritas, podemos ajustar más enviando G1 Z-3.70 F200, probar folio, si se puede ajustar más, pues -3.71 y así hasta que lo veamos bien.

¿Qué es este 3.69 (o el valor que os de a vosotros)? Es la distancia de la punta del sensor conforme al nozzle sumándole el tamaño del cristal. Si tenemos un cristal de 3mm, podemos decir que el sensor está a 0.69mm del nozzle. Gracias a esto, y mientras no toquemos ni el sensor, ni el nozzle, ya podemos desmontar la cama 20 veces, que siempre imprimirá bien.

Para guardarlo tenemos dos opciones.

  • Desde la impresora, Control -> Motion -> Z offset y lo ponemos a -3.69. Luego desde Control buscamos Store memory y le damos (hasta que el Load memory que hay debajo desaparezca un segundo, nota: en skynet V2.2 parece que ya no desaparece eso, así que darle varias veces y ya).
  • Desde nuestra app, le enviamos un M851 Z-3.69 (para establecer el offset) y un M500 para guardar la memoria. Si hacemos esto, recomiendo mirarlo de todos modos en la impresora, porque a veces no lo guarda.

Probablemente veréis que tire la capa un poco alta, recomiendo ir subiendo el valor de 0.02 en 0.02. Lo más probable es que si os dio -3.69 terminaréis por -3.76 o similar.

El Gcode de inicio

¿Ya está? Bueno, no, hace falta el Gcode que hace el autolevel.

G21        ;metric values
G90        ;absolute positioning
M82        ;set extruder to absolute mode
M107       ;start with the fan off
G28 X0 Y0  ;move X/Y to min endstops
G28
G29
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
G92 E0                  ;zero the extruded length
G1 F200 E3              ;extrude 3mm of feed stock
G92 E0                  ;zero the extruded length
G1 F{travel_speed}
M117 Printing...
@jdelolmosanchez
Copy link

Hola. Estoy intentando cargar el autolevel tal y como indicas pero me da un error.
void MarlinSerial::flush(void) {
// RX
// don't reverse this or there may be problems if the RX interrupt
// occurs after reading the value of rx_buffer_head but before writing
// the value to rx_buffer_tail; the previous value of rx_buffer_head
// may be written to rx_buffer_tail, making it appear as if the buffer
// were full, not empty.
CRITICAL_SECTION_START;
rx_buffer.head = rx_buffer.tail;

rx_buffer was nos declared in this scope

Podrías hecharme una mano a ver si lo saco adelante.
Muchas gracias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment