Recientemente un compañero me envió un sensor BLTouch / 3DTouch de la marca Geeetech. Para mis impresoras suelo utilizar sensores de infrarrojos ópticos, pero deseaba probar los sensores BLTouch ya que aún no había caído ninguno por mis manos. Así que me puse manos a la obra para Configurar BLTouch con BabyStepping en el último Marlin disponible a día de hoy y saciar mi curiosidad.

Siempre he utilizado sensores de nivelación en mis máquinas, ya que lo de nivelar con un folio las cuatro esquinas de la superficie de impresión definitivamente no es lo mío. Ni lo veo práctico y ni mucho menos preciso, aunque llegado a este punto seguro que discrepo con algún lector 🙂

He de decir que probé bastantes sensores inductivos y capacitivos, incluso opté por el PINDA 2 original, el cual es muy cómodo de instalar ya que es de los pocos que realmente se alimenta a 5v. y da bastante precisión. Pero tampoco me convenció. En todos y cada uno de ellos un denominador común, la distancia de detección varía dependiendo del metal e incluso de la temperatura de la cama.

Es algo que no me gusta para nada. No me da sensación alguna de precisión, ya que lo que yo busco es una medición inmutable (o al menos mínima). Tener un componente que según las condiciones de uso funcione de distinta manera carece de sentido alguno. No quiero calibrar de nuevo esa distancia si cambio el filamento de PLA a ABS, es un engorro.

Con los sensores ópticos, los cuales me encantan, nos olvidamos de esas variaciones ya que en condiciones normales no les afecta el tipo de metal ni la temperatura. Y con los BLTouch lo mismo, ya que son sensores completamente mecánicos (de allí mis ganas por probarlo).

 

 

 

 

Introducción

Antes de comenzar he de confesar que no dispongo de una impresora 3D comercial como podéis tener muchos de vosotros (Anet A8, Ender3 o Artillery X1 por ejemplo). Tuve una comercial al principio (un desastre de impresora), así que opté por diseñar y fabricar una propia a mi gusto y necesidades.

No obstante eso no debe preocuparte ya que a la hora de configurar el sensor BLTouch las opciones a modificar en el firmware Marlin serán exactamente las mismas. Lo único que variará serán las conexiones, pero indicaremos algunos ejemplos para que no tengas problema alguno en su sección correspondiente.

En este artículo solamente vamos a comentar las opciones a modificar para dar soporte a BLTouch / 3DTouch. Si necesitaras configurar completamente Marlin no dudes en visitar la Guía completa: Configurar Marlin 2.0.3 desde cero y no morir en el intento que también tienes disponible en nuestra página web.

 

 

 

¿Porqué utilizar BLTouch / 3DTouch?

La principal razón para mi sería no tener que estar nivelando 4 esquinas con un folio o haciendo cuadrados en la cama. Si efectuamos la nivelación de la superficie de impresión en las 4 esquinas, cuando nivelas una, modificas otra, y yo siempre acababa haciendo varias pasadas ya que soy un maniático del control.

Si por el contrario efectuamos una impresión de prueba y calibras en tiempo real modificando la altura del Nozzle, lo cual es una excelente función de Marlin (todo hay que decirlo), pues lleva su tiempo y como todos sabemos, el tiempo es oro.

¿Por qué no instalar un sensor de nivelación para nivelar en un solo punto central de la cama (SAFE_HOMING), y dejar que Marlin genere la malla de puntos y se preocupe del resto? Para eso está Marlin, para facilitarnos la vida ciertamente.

Más razones, puedes instalar sensores capacitivos o inductivos, pero este tipo de sensores varían dependiendo de la temperatura de la cama y del metal. A mayor temperatura, menor rango de detección. Con lo cual no puedes dejar un valor fijo para PLA y otro para ABS.

Además, sobre aluminio se ve mermado considerablemente el rango de detección de los sensores capacitivos y conductivos respecto a usar acero o hierro. Otro punto negativo ya que si usas cristal vas a ir muy justo y en cualquier fallo tu Nozzle atravesará el cristal con el consiguiente riesgo de rotura.

Los sensores BLTouch / 3DTouch son mecánicos, así que no les afecta calor, humedad o tipo de material de tu superficie de impresión.

Además, la conexión de los sensores BLTouch / 3DTouch a las placas es relativamente sencilla y no precisas de efectuar ninguna modificación electrónica como sí pasa en otros sensores. Algunos sensores chinos, te indican rangos de funcionamiento desde 6-36v, nada más lejos de la realidad. Si los alimentas a valores mínimos no funcionan, así que has de alimentarlos a 12v.

El problema viene cuando has de enviar la señal (S) a tu placa electrónica, si no regulas ese voltaje (con electrónica adicional) puedes llegar a quemar el puerto como me pasó a mi en mi MKS Gen v1.4. El resultado fue que el conector Z- se me quedó completamente inservible al haber metido 12v. en una entrada de 5v. No es mayor problema, puedes cambiar dentro del firmware de Marlin e indicarle que para Z- vamos a usar el Z+, pero ya has de hacer modificaciones innecesarias.

 

 

 

¿Donde puedo adquirir un BLTouch / 3DTouch?

Puedes adquirir este tipo de sensores en cualquier tienda online,  ya que son muy comunes en el mundo de la impresión 3D. Más abajo te dejo dos enlaces de afiliado a Amazon y Banggood. Por supuesto puedes adquirirlos donde desees, existen decenas de páginas.

Si decides adquirirlo a través de estos enlaces, es mi deber comentarte que una pequeña comisión se destinará al proyecto 3DWork.io y te estaremos eternamente agradecidos. De esta forma podremos continuar redactando guías de impresión 3D y artículos de interés. O como alternativa, puedes seguirnos en nuestras redes sociales 🙂

 

Sensor 3D Touch (Geeetech) x 1
Sensor BL Touch (Two Trees) x 1

 

 

 

Configurar BLTouch / 3DTouch en Marlin

Bueno, pues comencemos a configurar nuestro firmware Marlin para dar soporte a los sensores BLTouch / 3DTouch. Tal y como expliqué en el articulo previo de Configurar Marlin 2.0.3 desde cero, para activar las opciones hay simplemente que descomentarlas. Eso se efectua eliminando las dos barritas que hay delante de cada #define, de esta forma el compilador podrá hacer uso de ellas y añadirlas al firmware finalizado.

Empezaremos la configuración editando el archivo Configuration.h con tu editor de textos favorito (el mío es Sublime). Una vez que lo has editado, vamos a indicarle a nuestro querido Marlin que nuestra impresora 3D dispone de un final de carrera (sensor) en el eje Z. Procederemos a descomentar las opciones USE_ZMIN_PLUG.

// Specify here all the endstop connectors that are connected to any endstop or probe.
// Almost all printers will be using one per axis. Probes will use one or more of the
// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

 

 

Ahora descomentamos la opción Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN.

/**
 * Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
 *
 * Enable this option for a probe connected to the Z Min endstop pin.
 */
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

 

 

Y en esta otra línea del código le vamos a indicar que nuestro sensor instalado es un BLTouch / 3DTouch, que para Marlin vienen a ser lo mismo.

/**
 * The BLTouch probe uses a Hall effect sensor and emulates a servo.
 */
#define BLTOUCH

 

 

Si usamos un sensor de autonivelación (sea BLTouch o cualquier otro), deberemos indicarle a Marlin la posición del mismo respecto a nuestro Nozzle de impresión. Este obligatoriamente se encontrará separado y lo definiremos como coordenadas y en milímetros.

Mi BLTouch de nivelación se encuentra 37mm a la derecha del fusor, y 2 mm más atrás del mismo, así que pondría la siguiente configuración. Deberás medir en tu impresora estos valores a introducir (no uses los míos)

/**
 * Z Probe to nozzle (X,Y) offset, relative to (0, 0).
 *
 * In the following example the X and Y offsets are both positive:
 *
 *   #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 }
 *
 *     +-- BACK ---+
 *     |           |
 *   L |    (+) P  | R <-- probe (20,20)
 *   E |           | I
 *   F | (-) N (+) | G <-- nozzle (10,10)
 *   T |           | H
 *     |    (-)    | T
 *     |           |
 *     O-- FRONT --+
 *   (0,0)
 *
 * Specify a Probe position as { X, Y, Z }
 */
#define NOZZLE_TO_PROBE_OFFSET { 37, -2, 0 }

 

 

Ahora debemos descomentar la función AUTO_BED_LEVELING_BILINEAR y después la función RESTORE_LEVELING_AFTER_G28, para que queden activas en nuestro firmware.

/**
 * Choose one of the options below to enable G29 Bed Leveling. The parameters
 * and behavior of G29 will change depending on your selection.
 *
 *  If using a Probe for Z Homing, enable Z_SAFE_HOMING also!
 *
 * - AUTO_BED_LEVELING_3POINT
 *   Probe 3 arbitrary points on the bed (that aren't collinear)
 *   You specify the XY coordinates of all 3 points.
 *   The result is a single tilted plane. Best for a flat bed.
 *
 * - AUTO_BED_LEVELING_LINEAR
 *   Probe several points in a grid.
 *   You specify the rectangle and the density of sample points.
 *   The result is a single tilted plane. Best for a flat bed.
 *
 * - AUTO_BED_LEVELING_BILINEAR
 *   Probe several points in a grid.
 *   You specify the rectangle and the density of sample points.
 *   The result is a mesh, best for large or uneven beds.
 *
 * - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
 *   A comprehensive bed leveling system combining the features and benefits
 *   of other systems. UBL also includes integrated Mesh Generation, Mesh
 *   Validation and Mesh Editing systems.
 *
 * - MESH_BED_LEVELING
 *   Probe a grid manually
 *   The result is a mesh, suitable for large or uneven beds. (See BILINEAR.)
 *   For machines without a probe, Mesh Bed Leveling provides a method to perform
 *   leveling in steps so you can manually adjust the Z height at each grid-point.
 *   With an LCD controller the process is guided step-by-step.
 */
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

/**
 * Normally G28 leaves leveling disabled on completion. Enable
 * this option to have G28 restore the prior leveling state.
 */
#define RESTORE_LEVELING_AFTER_G28

 

 

Una vez configurado el tipo de autonivelación que deseamos que Marlin efectúe, le indicaremos con los parámetros GRID_MAX_POINTS el número de sondeos (o pruebas) a efectuar. Yo suelo realizar 9 puntos de comprobación antes de cada impresión, podéis ampliarlo o reducirlo, eso queda a vuestra elección.

// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

 

 

Y como me gusta hacer siempre el HOMING en el centro de la cama por seguridad, activo la opción Z_SAFE_HOMING.

#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 axes (G28).
#define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28).
#endif

 

 

Ahora guardaremos el archivo Configuration.h y editaremos un nuevo archivo denominado Configuration_adv.h. La diferencia respecto a Configuration.h es que nos ofrece opciones de personalización más detalladas, y funciones experimentales o en desarrollo.

Yo en mi impresora uso una función de nivelación disponible en Marlin 2 denominada BABYSTEPPING. Esta función me permite calibrar con un folio la altura de mi sensor de nivelación en el centro de la cama una sola vez.

Más tarde, la impresora efectuará 9 puntos de testeo (probe points) automáticamente al comenzar cada impresión. De esta forma no tendré que ir esquina por esquina innecesariamente para calibrar mi cama. Por defecto viene desactivada, así que activaremos la opción BABYSTEPPING tal y como os muestro a continuación:

#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
#define BABYSTEP_MULTIPLICATOR_Z 20 // Babysteps are very small. Increase for faster motion.
#define BABYSTEP_MULTIPLICATOR_XY 1

#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
// Note: Extra time may be added to mitigate controller latency.
#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
//#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
#if ENABLED(MOVE_Z_WHEN_IDLE)
#define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size.
#endif
#endif

//#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28

#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
//#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
#endif
#endif

 

Bueno, pues estas serían las opciones básicas para configurar tu BLTouch. Por supuesto, puedes configurar mucho más parámetros como límites, sondeos, velocidades de desplazamiento, etc. Pero para empezar es más que suficiente.

 

 

 

Instalar BLTouch / 3DTouch en tu cabezal

Configurar sensor BLTouch / 3DTouch con Babystepping en Marlin 2.0.3 (MKS Gen v1.4)

Independientemente de donde se ubique respecto a los ejes X e Y, que son los que debes configurar en Marlin, tienes que posicionar el sensor BLTouch / 3DTouch a una distancia determinada en altura de tu Nozzle.

Está lógicamente tiene que estar dentro del rango de acción del mismo. Cuando la sonda se encuentre retraída deberá estar por encima del Nozzle (sino tendremos problemas). Y cuando se encuentre extendida deberá bajar varios milímetros por debajo del Nozzle para poder actuar.

Lo recomendable es 2mm. según he visto en algunos sitios, pero a mi se me hacía algo corto tras unas pruebas y decidí ponerlo a 3mm. que me funciona correctamente. Por supuesto, esta distancia queda a tu absoluta elección, solo es un valor orientativo.

 

 

 

Conexión de BLTouch / 3DTouch a tu electrónica

Como puedes observar en esta imagen, los sensores de nivelación BLTouch / 3DTouch disponen de dos cables de conexión. Uno de tres pines y otro de dos pines, que serán los que necesitaremos conectar a nuestra electrónica.

En mi caso, utilizo una MKS Gen v1.4, así que la conexión no puede ser más sencilla (al igual que en RAMPS). Abajo os dejo 2 imágenes para que podáis ver donde se conectaría el BLTouch en mi placa, y en una placa RAMPS, bastante más común que la que yo poseo.

 

 

Conexión en placa MKS Gen v1.4

Configurar sensor BLTouch / 3DTouch con Babystepping en Marlin 2.0.3 (MKS Gen v1.4)

Muy fácil como habéis podido comprobar, pinchar en esos 2 sitios y listo. Cuando enciendas la impresora verás que el sensor hace una pequeña comprobación (despliega y retrae la sonda).

 

 

Conexión en placa RAMPS

Configurar sensor BLTouch / 3DTouch con Babystepping en Marlin 2.0.3 (MKS Gen v1.4)

Esta conexión es similar, pero deberás asegurarte que tienes el jumper activado, así nos aseguraremos de que le lleguen al sensor de nivelación los 5v. necesarios (muy importante).

 

 

Conexión en placa SKR v1.3

Configurar sensor BLTouch / 3DTouch con Babystepping en Marlin 2.0.3 (MKS Gen v1.4)

 

 

Conexión en placa SKR v1.4

Configurar sensor BLTouch / 3DTouch con Babystepping en Marlin 2.0.3 (MKS Gen v1.4)

 

 

 

Script de inicio (Comandos GCODE)

Deberás añadir la función de autonivelación al principio de cada impresión. Eso se hace muy fácilmente configurándose en tu Slicer favorito (Repetier, Simplify3D, Cura, etc.). Simplemente es añadir el comando G29 para nivelar vuestro cabezal antes de cada impresión.

Os dejo un ejemplo de mi script de inicio en cada impresión:

G28          ; Efectuar HOME en todos los ejes
G29          ; Comando de nivelar cabezal
G1 Z5 F5000  ; Subir boquilla
M75          ; Arrancar contador (timer)

 

 

 

Configurando el desfase

Guía completa para configurar Marlin 2.0.x desde cero y no morir en el intento

Ya para acabar, y al haber activado BabyStepping dispondrás de un menú propio llamado Desfase. Podrás acceder a él antes del proceso de impresión y durante (si, me has leído bien) el proceso de impresión pulsando el botón dos veces en tu display.

De esta forma, y en tiempo real, podrás ajustar el desfase mientras te está haciendo los primeros perímetros de impresión, y dejar un ajuste perfecto. A mi esto me ha salvado alguna que otra impresión, la verdad es que es bastante útil.

Una vez que hayas efectuado la configuración del desfase, no olvides guardar el valor en memoria. Deberías tener una opción llamada Grabar en EEPROM, siempre y cuando le hayas dado soporte en tu Marlin. Si no la encuentras, puedes como alternativa ejecutar el comando M500 (Save settings). Este almacenará toda la configuración actual en tu EEPROM de forma permanente.

 

 

Y bueno, si has leído hasta aquí te mereces un gallifante, te felicito. No sería de extrañar que me hubiera dejado algo en el tintero, si es así no dudes en notificarlo en los comentarios al final del artículo Instalar y configurar BLTouch / 3DTouch en Marlin 2.0.3 (MKS Gen v1.4 y RAMPS).

Por último recordarte, como siempre, que puedes encontrarnos en nuestro canal de Whatsapp lleno de trastornados por la impresión 3D en el siguiente enlace, o en nuestras redes sociales (no olvides seguirnos si te gusta la web).

 

 

Otras guías de impresión que pueden interesarte en 3DWork.io: