3DTouch es un sistema de nivelación automática para impresoras 3D que puede medir las inclinaciones o variaciones de la superficie de impresión de una forma precisa y sencilla.

 

Es compatible con cualquier tipo de superficie: cristales, metal, etc. ya que a difrencia de otros sistemas funciona por contacto, lo cual es una gran ventaja frente a otros sensores capacitivos, inductivos y otros.

 

Este dispositivo cuenta con una sonda que recoge los datos de posición diferentes puntos de la superficie de impresión, de modo que puede calcular las desviaciones que ésta tiene y corregirlo durante la impresión.

 

En este post vamos a explicar cada paso necesario para configurar el sensor utilizando Marlin y placa Ramps. Mencionar que hay múltiples opciones para la configuración de este sensor, nosotros vamos a explicar las que estamos utilizando y consideramos más útiles.

 

Funciones principales:

  • Funciona como si estuviera compuesto por un servo RC y un micro interruptor.
  • Pequeño, ligero y fácil de ensamblar.
  • Autoprueba al encenderse: el pin actúa dos veces, de forma que si hay algo que impide el libre movimiento del vástago o sonda, se mostrará una luz roja intermitente.
  • Dispone de alarma LED: si encuentra un problema durante su funcionamiento la luz parpadeará.
  • Gran precisión, de 0.005mm.
  • Gran versatilidad en la configuración del muestreo.

 

Montaje

 

Dependiendo de cada extrusor, se podrá montar usando diferentes piezas que lo adapte, pero siempre debe instalarse perpendicular a la superficie.

En un montaje correcto, la altura de la sonda contraída debe quedar unos 2mm por encima de la altura de la boquilla.
 

 

Si se va a montar en nuestra P3steel de un extrusor, podéis utilizar esta pieza que lo adapta compartida en thingiverse.com:

https://www.thingiverse.com/thing:3403967

 

 

Precaución

 

Es importante probar bien el sensor antes de hacer homing o nivelar la plataforma. Una colocación o instalación incorrecta puede dañar la impresora.

 

 

Conexiones electrónicas

 

3DTouch tiene dos conexiones, una corresponde a la función de final de carrera de Z y la otra a la función de autonivelado.

 

Para realizar las conexiones, simplemente para cada cable o línea tenemos que preparar el cable con el conector dupont suministrado.

 

La conexión en la Ramps es la siguiente:

 

Como vemos, el cable negro y blanco (señal) se conecta en la posición del final de carrera de Zmin.

 

El otro cable, se conecta en la posición de Servo, con el orden del esquema (Señal, 5V, Tierra). Además, hay que colocar un jumper para que lleguen los 5V.

 

 

Modificaciones Marlin Firmware

 

Tenemos que cargar de nuevo el firmware con la configuración para nuestro 3DTouch.

 

Para configurar el sensor debemos modificar en Configuration.h de Marlin:

 

Asegurarnos de que el final de carrera Zmin esté habilitado:

 

#define USE_ZMIN_PLUG

 

 

Habilitar la línea que asigna el PIN del sensor del final de carrera Zmin al sensor 3DTouch, de esta forma el sensor será también el final de carrera Zmin:

 

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

 

 

Ahora entramos en la configuración del 3DTouch. Vamos a poner las líneas que recomendamos activar con los valores que recomendamos como ejemplo o punto de partida, según en la impresora que se instale, puede necesitar otros valores, estos son sólo valores der referencia.

 

Habilitamos el sensor BLTouch (equivalente al 3DTouch)

 

#define BLTOUCH


 

 

En esta línea elegimos el tiempo que tardará en tomar la lectura desde que saca la sonda, hemos puesto 50 milisegundos. Si con el uso el sensor se ensucia o deja de funcionar correctamente podemos modificar este valor:


#define BLTOUCH_DELAY 50   // (ms) Enable and increase if needed


 

Las líneas para situar nuestro 3Dtouch con respecto a nuestro nozzle:

 

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

 

En este caso de ejemplo el sensor estará a 22mm a la derecha de la boquilla, para cada modelo de impresora será diferente.
 

 

En las siguientes líneas asignamos cuanto queremos que contraiga la sonda dependiendo de en qué momento esté ejecutando el muestreo:

 

#define Z_CLEARANCE_DEPLOY_PROBE   9 // Distancia en mm que despliega o recoge la sonda en un primer sondeo
#define Z_CLEARANCE_BETWEEN_PROBES  6 // Distancia en mm que despliega o recoge la sonda entres diferentes puntos de muestreo
#define Z_CLEARANCE_MULTI_PROBE     3 // Distancia en mm que despliega o recoge la sonda en diferentes mediciones de un mismo punto de muestreo (cuando se habilita)
#define Z_AFTER_PROBING           5 // Distancia en mm en la que se queda la sonda respecto a la superficie de impresión después del muestreo

 

 

Elegimos el tipo de muestro que queremos: Bilinear:

 

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

 

 

Elegimos el número de puntos que queremos para el muestreo, en este caso 9:

 

#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

 

 

En estas líneas, ponemos los límites para el muestreo, de manera que no realice la medición en la parte exterior de la superficie de impresión, donde puede encontrarse, por ejemplo, pinzas que sujeten el cristal:

 

#define LEFT_PROBE_BED_POSITION 25
#define RIGHT_PROBE_BED_POSITION 175
#define FRONT_PROBE_BED_POSITION 25
#define BACK_PROBE_BED_POSITION 175


 

Para que realice Z Safe Home, es decir, compruebe la posición 0 del eje Z en el centro de la superficie de impresión, debemos habilitar las siguientes líneas:
 

#define Z_SAFE_HOMING

#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
#define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
#endif


 

Opcionalmente, podemos habilitar una función rápida para el Babystepping o Desfase en Z. Habilitando esta línea, podremos acceder a esta función pulsando dos veces en el potenciómetro del LCD. Lo vemos en Configuration_adv.h:

 

#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z

 

 

Añadir en gcode

 

Tenemos que añadir ciertos comandos a nuestros gcodes para ejecutar la nivelación correctamente:

 

G28 ; home global
G29; nivela plataforma
G1 Z5 F5000 ; eleva la boquilla
G1 X-10 Y100 Z3 F5000; evita pinzas

 

Con estos códigos, realizará un Home y realizará la autonivelación antes de empezar a imprimir.

 

 

Para más información sobre estos códigos visite:

 

http://marlinfw.org/docs/gcode/G028.html

http://marlinfw.org/docs/gcode/G029-mbl.html

http://marlinfw.org/docs/gcode/G000-G001.html

 

 

Comprobación del desfase en Z

 

Una vez empiece a imprimir, debemos ver si la altura del nozzle respecto a la cama es correcta.

 

De no serla, debemos ajustar el desfase en Z.

 

Para ello, pulsando dos veces el potenciómentro del LCD, si hemos activado esta función,  entramos en la opción de Desfase en Z, ahí ajustamos el desfase. Y una vez terminada la impresión debemos Guardar en memoria.