Tutorial sensores BLTOUCH y 3DTOUCH

Historia del  Sensor 

bltouch es un sensor desarrollado en 2015 por Paris K. Lee de Antclabs en Korea del Sur (la tierra del kimchi!) y que aparecio en indiegogo.com por primera vez.

Este esta basado en la detección de un sensor de efecto hall (magnético) sobre un perno metálico que se desplaza gracias a un electroimán y a la gravedad.

El desarrollo fue realizado para que fuera compatible con los sensores de autoleveling tipo servomotor y final de carrera, facilitando así su instalación y uso.

resim

bltouch mejora sustancialmente las mediciones de posición de la cama, ya que no tiene partes mecánicas complejas, ni depende del material de cama caliente que se utilice ni de la dilatación ni contracción de la misma debido a la temperatura.

Antclabs proporciona una tabla comparativa de precisión, repetibilidad y consumo:
resim

 

 

 

 

 

 

 

 

Gran cantidad de impresoras comerciales utilizan bltouch para la autocalibración.
Yo estoy encantado con el sensor y la tarea de imprimir se ha vuelto mas sencilla desde que instale bltouch a mediados de 2016.

En principio los clones funcionan correctamente y son compatibles totalmente con el original.

Diferencias original y copia

No existen diferencias electrónicas en el output generado por uno y otro sensor.
El ruido en la captura de potencia es debido a los motores y demás electrónica, la segunda captura se ha realizado con el sensor totalmente aislado de la electronica.

Detección, sensor original:
[Imagen: original_bltocuh_out.jpg]

Detección, sensor copia:
[Imagen: clone_bltocuh_out.jpg]

Instalación en el carro X
Ya que la posición respecto a X e Y la introduciremos en el firmware para la instalación física únicamente debemos tener en cuenta la distancia de la punta del sensor con la punta de nuestro nozzle, esta tiene que ser de unos 8mm tal como muestra la siguiente figura.
[Imagen: i4zz2mybcyeppzl7kdk1.jpg]

Existen diferentes carros, extrusores, y piezas que nos ayudaran a este cometido, ahí van algunas.

Pieza para ajustar el sensor con adaptadores mobiles http://www.thingiverse.com/thing:1765933
Un adaptador fijo y mobil para el Greg’s (esta es mía!!!) http://www.thingiverse.com/thing:1496029
Un Adaptador para el E3D v6 http://www.thingiverse.com/thing:1747443
El carro entero para el extrusor titan con soporte para bltouch http://www.thingiverse.com/thing:1560625
Otro extrusor entero para el titan, con ventilador de capa http://www.thingiverse.com/thing:1543232
Soporte para hephestos www.thingiverse.com/thing:1846913

Pruebas, ¿funciona mi bltouch?

Ya que da un poco de palo cambiar firmware y conectar el sensor a nuestras placas de las impresoras solo para probar si funciona, he desarrollado un pequeño programilla de arduino que nos permitirá probar el sensor un cualquier placa de arduino.

El programa utiliza la librería de servo controles de arduino para configurar la señal de control del sensor y el commandLine de basilfx para pasar comandos, este ultimo lo podéis descargar de https://github.com/basilfx/Arduino-CommandLine.

Por lo habitual necesitaremos alimentar externamente el sensor ya que un arduino conectado directamente al USB esta en el limite de consumo en el momento que el electroiman del sensor se desconecta. En el momento de desconexión de la bobina se inducen corrientes elevadas en la alimentación que harán que nuestro arduino se reinicie.
Si nuestro sensor funciona perfectamente conectado directamente al arduino, este paso no será necesario.

Para la alimentación podemos utilizar una fuente de alimentación externa o ATX de PC o un 7805 o un lm317 o cualquier dispositivo que nos proporcione 5V.

Un 7805 es lo mas sencillo, además es probable que lo necesitemos para alimentar el dispositivo en nuestras máquinas.
Para sistemas con lógicas de 3.3V deberemos añadir una resistencia de 240ohm, por lo habitual el vendedor nos enviará una junto con el sensor.

Con todo, el montaje con un arduino nano quedaría de la siguiente forma:
[Imagen: nano_touch.png]

Podemos ver los comandos permitidos enviando “help” a la consola serie:

resim

El modo de funcionamiento del terminal serie es “Both NL & CR“.

Podemos enviar el comando test para probar que funcione correctamente y despues rt para sacar el embolo y ht para meter el embolo.
Cuando el embolo esta fuera si tocamos con el dedo, el sensor detectara contacto y se encenderá el led (PIN 13) del arduino.

.zip   arduino-bltouch-test-@mashirito-v1


Instalación en la mega2560 y RAMPS

El sensor deberá conectarse a los pins de servo de nuestra RAMPS por un lado y a la entrada del final de carrera zmin por el otro, el conexionado se muestra en la imagen.

Tal y como se ha comentado anteriormente es probable que necesitemos alimentarlo externamente, en este caso el led del sensor parpadeará o el arduino se reiniciará, esto ultimo podeis identificarlo en la pantalla de LCD.

En principio conectado el jumper de 5V de la RAMPs (tal y como muestra la figura) deberíamos tener suficiente para alimentar el sensor, en mi caso no si las dos RAMPS y MEGAS que he probado están rotas, pero por mucho que conecte el jumper… el sensor no va ni a tiros, además algunas veces parpadea y algunas veces el led esta encendido y únicamente se reinicia el arduino. La solución alimentar con un regulador externo.

Para alimentar el sensor únicamente debemos proporcionar 5V al cable rojo y masa al cable marron, dejando el cable naranja conectado tal y como se muestra en la imagen.
resim

Si finalmente vamos a utilizar un 7805 para convertir la tensión de nuestra fuente de alimentación de 12V a 5V aseguraros de añadir un par de condensadores a Vin y Vout tal y como recomienda el fabricante.
[Imagen: ?u=http%3A%2F%2Fwww.piclist.com%2Ftechre...ic.gif&f=1]

Modificaciones en Marlin
Llega el momento de hacer las modificaciones pertinentes para que marlin-RC8 funcione con el bltouch.


Activamos el sensor BLTOUCH descomentando la linea

Código:
#define BLTOUCH

 


Configurar los offsets X, Y y Z, estos dependerán de donde tengamos posicionado nuestro sensor.
En mi caso utilizando el greg’s wade extruder y con el sensor posicionado a la derecha del nozzle tal y como muestra la figura:

[Imagen: bltouch_sensor_position.jpg]

Los offsets quedarian tal que asi:

Código:

#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // 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 -1.70 // Z offset: -below +above [the nozzle]

Si por ejemplo lo tenéis igual que yo pero a mano izquierda, el offset de Y deberá ser negativo.
Si el sensor esta demasiado pegado a la cama es probable que entre en modo error (led del sensor parpadea) cuando se hace la autocalibración.

Podemos incrementar la distancia del sensor entre prueba y prueba modificando:

Código:

#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 8 // Z Clearance between probe points

Donde:
Z_CLEARANCE_DEPLOY_PROBE es la distancia entre la punta y la cama al inicio, al final de la calibración y al hacer homming de Z.
Y Z_CLEARANCE_BETWEEN_PROBES es la distancia que se tomará entre los diferentes puntos de calibración.

Finalmente para ajustar el offset de z (Z_PROBE_OFFSET_FROM_EXTRUDER), podemos utilizar el comando m851 z <valor deseado>, ejemplo
m851 z -1.1;

Con el comando:
M500 ; almacenaremos el valor en EEPROM.

Recomiendo empezar con valores cercanos al 0 o al -1 e ir bajando progresivamente a -1.1, -1.2… para no romper nada.
Tened cuidado con este paso!


Activar el tipo de autoleveling que queremos para nuestra maquina, en mi i3steel con cama cuadrada es el modo “LINEAR”:

Código:

#define AUTO_BED_LEVELING_LINEAR

 

Seleccionar el numero de puntos que se tomarán para calcular la desviación del plano, por defecto este viene configurado a 2, lo que realizará 4 mediciones una en cada esquina de la cama.

Yo lo configuro a 3, lo que hará que se tomen 9 puntos de referencia en el calculo del plano.

Código:

#define ABL_GRID_POINTS_X 3

 

PUNTO critico!!!!
Configurar los limites donde el sensor puede llegar, estos dependen de las dimensiones de la cama y de los offsets del sensor, por ejemplo:

Las dimensiones de mi cama están definidas con:

Código:

#define X_MAX_POS 180
#define Y_MAX_POS 155
#define Z_MAX_POS 150

Los offsets del sensor con:

Código:

#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] #define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle]

En este caso y para que el sensor no intente hacer pruebas fuera del área accesible los limites que yo configuro son:

Código:

// Set the boundaries for probing (where the probe can reach).
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 170
#define FRONT_PROBE_BED_POSITION 0
#define BACK_PROBE_BED_POSITION 150

De esta forma se cumple:
LEFT_PROBE_BED_POSITION – X_PROBE_OFFSET_FROM_EXTRUDER >= XMIN
RIGHT_PROBE_BED_POSITION – X_PROBE_OFFSET_FROM_EXTRUDER <= XMAX
FRONT_PROBE_BED_POSITION – Y_PROBE_OFFSET_FROM_EXTRUDER >= YMIN
BACK_PROBE_BED_POSITION – Y_PROBE_OFFSET_FROM_EXTRUDER <= YMAX

Si no cumplimos con los anteriores requisitos, arduino nos dará un error de compilación, del estilo:

resim

Con esto hemos terminado las modificaciones en el marlin, al final os dejo un par de marlins  RC5 y RC8 para que modifiquéis los mínimos parámetros y lo pongais a funcionar.

 

Pruebas
Preparados para probar el nuevo sensor.

Con el comando G28 haremos homming de X y de Y y el extrusor se posicionará en el centro de la cama para hacer homming de Z.

Con el comando G29 haremos el autoleveling con lo que marlin calculará el plano de desviación que deberá aplicar cuando se realice la impresión.

De este modo deberemos añadir los comandos g28 g29 en nuestro fileteador para que éste se ejecute al inicio antes de empezar la impresión.

Yo utilizo slic3r así que en la pestaña “printer settings” añado:

resim

Si en durante su operación el led del sensor se queda parpadeando, deberemos resetearlo con el comando:
M280 P0 S160;

Finalmente podemos ejecutar el autotest del sensor con el comando:
M280 P0 S120;

Podemos activar los mensajes de depuracion del autolevel con el comando:
M111 S32;

El output que obtendremos es bastante duro asi que paciencia al analizarlo.

Para realizar pruebas de repetibilidad tenemos el comando M48 como se describe en  https://github.com/MarlinFirmware/Marlin/wiki/M48, por ejemplo:
M48 P4 X100 Y100 V2 E L2;

El output que obtendremos sera del estilo:

Código:

M48 P4 X100 Y100 V2 E L2
M48 Z-Probe Repeatability Test
1 of 4: z: 1.755
2 of 4: z: 1.758
3 of 4: z: 1.756
4 of 4: z: 1.759
Finished!
Mean: 1.756938 Min: 1.755 Max: 1.759 Range: 0.003
Standard Deviation: 0.001351

El sensor en trianglelab ,   

Aclaracion

Y tiempo para postear los resultados.
Pues eso, aquí paso el análisis que he hecho, primero de todo comentar que el output no es igual que el original ni el clon de geetech.

Como podéis ver en la imagen el sensor da una salida de nivel alto cuando se hace release del perno, además cuando el touch detecta por contacto, el pulso generado no es ni por asomo 5ms.resim

Comentar que es normal tener problemas para la detección con el sensor porque  tiene doble flanco de subida o de bajada para cada detección.

Me he puesto en contacto con el chino para comentarle que las especificaciones que envía juntamente con el sensor no tienen nada que ver con el funcionamiento real del mismo (son para despistar).
Tela con el chino, me ha dicho que no hay intención de solucionarlo. Yo creo que es más fácil programarlo bien que lo hay ahora o los los hacks necesarios para hacerlo funcionar con el marlin.

Me ha pasado un pdf con los cambios necesarios para hacerlo funcionar con marlin RC7 y RC8. Aquí lo tenéis
.pdf   TL-touch_firmware_settings1

Firmware utilizados  

Aclaración


.zip  arduino-bltouch-test-@mashirito-v1

• Instalación en la mega2560 y RAMPS
• Modificaciones en Marlin
.zip   marlin-RC8-bltouch-@mashirito-ny-2017
.zip   Marlin_RC5-autolevel-rerepack-@mashirito
.zip   marlin-RC8-bltouch-@mashirito-20170117 . Con la EEPROM,  el debug de autoleveling y el test de repitibilidad activados.

 

Aqui os dejo un video relacionado con este sensor y que puede servir de ayuda

Alterantivamente podéis utilizar un arduino para gestionar la salida y hacerla compatible con el original  o reprogramar el atiny que lleva dentro, opciones un poco mas complejas.

Espero que sea de ayuda para todos los que teneis problemas.

Saludos!

Fuente :  Este tutorial no es mio pero creo que pos su importancia y tal y como lo describe el autor tan detallado lo he querido traer hacia nuestra biblioteca para tenerlo mas a mano de todas formas le dejo aqui mi agradecimiento a su creador mashirito  de SpainLabs  pincha aqui para ver el original

Deja un comentario