Controle su impresora 3d con su Rasbperry Pi


Si cuenta con una impresora 3D   y  aun no conoce OctoPrint puede  que se sorprenda lo que puede hacer este software gratuito, pues permite controlar su impresora USB conectada por USB a una Raspebrry PI  a  la red .

Como vamos a ver  una vez instalado el sw en su Raspberry Pi desde su interfaz web  se puede controlar la impresora  desde cualquier dispositivo conectado a al  misma red como smartpthone, tableta  y por supuesto un ordenador.

Algunas de las funciones más interesantes de este sw son la visualizar el estado de impresion a traves de  una web cam usb conectada  a la Raspberry pi o por ejemplo subir los archivos STL  por red  hacia la impresora.

printer3d

Control remoto completo y monitoreo

OctoPrint es un software open source, desarrollado por Gina Häußge y patrocinado por bq, que nos permite controlar toda la impresora 3D desde cualquier parte del mundo desde un ordenador, teléfono o tablet. Gracias a este software podemos precalentar el extrusor y la base caliente, lanzar una impresión, detenerla, ver la posición actual, configurar parámetros de la impresora, ver la evolución mediante video en tiempo real, crear timelapses de cada impresión, vamos todo, otra increíble maravilla del mundo open-source.

Puede controle y supervisar cada aspecto de su impresora 3D y sus trabajos de impresión directamente desde su navegador:

  • Accediendo a la  la cámara web incorporada y mirando de forma remota cómo su impresora está creando lo más nuevo.
  • Obteniendo comentarios constantes sobre el progreso actual de su trabajo de impresión .
  • Echando un vistazo al visualizador GCODE integrado para ver una representación del GCODE que está imprimiendo actualmente.
  • Vigilando las temperaturas del hotends y cama de impresión y adaptándolas sobre la marcha.
  • Moviendo el cabezal de impresión a lo largo de todos los ejes , extrudiendo, retrayendo o simplemente definiendo sus propios controles personalizados .
  • Comience, pare o simplemente pause su trabajo de impresión actual , usted tiene el control total en cualquier momento.

Compatible y extensible

De fábrica, OctoPrint es compatible con la mayoría de las impresoras 3D de consumo disponibles . Y su potente sistema de complementos permite ampliar su funcionalidad de varias maneras. Para nombrar unos pocos:

  • Haciendo que OctoPrint le envíe notificaciones automáticas sobre el progreso del trabajo mediante Pushbullet o Pushover .
  • Reemplazando completamente la interfaz de usuario de OctoPrint en dispositivos móviles a través de TouchUI .
  • Integrando OctoPrint en su herramienta de mensajería de preferencia, como Telegram o Slack .
  • Recopilando estadísticas de su impresora e imprima trabajos a través del Historial de impresión o el plugin Estadísticas de la impresora .
  • Agregando soporte para impresoras específicas como impresoras Flashforge o Makerbots anteriores o la impresora Micro 3D .

El repositorio de plugins oficial de OctoPrint está integrado en OctoPrint y la instalación de un complemento está a solo un clic de distancia. ¡Y comenzar con el desarrollo de complementos es fácil!

100% de código abierto

OctoPrint es un software gratuito y de código abierto publicado bajo la licencia pública general Affero de GNU (AGPL).

Todo su código fuente está disponible en su repositorio Github y todos pueden modificarlo para sus propias necesidades.

¡Y aún más!

  • ¡Creando increíbles grabaciones de timelapse de tus impresiones!
  • Cortando sus archivos STL directamente dentro de OctoPrint.
  • Controlando quién puede controlar su impresora con los controles de acceso integrados.
  • Agregando comandos del sistema al menú para apagar fácilmente o reinicie su servidor OctoPrint o incluso su impresora.
  • Configurando los ganchos de evento para reaccionar a ciertos eventos dentro de OctoPrint llamando a comandos externos o enviando GCODE personalizado a su impresora.
  • y mucho más…

Instalación desde la fuente

Las instrucciones genéricas de configuración se reducen a

  1. Instalar Python 2.7 incluyendo pip y virtualenv .
  2. Obteniendo la fuente a través de cualquiera de:
    1. clonando el repositorio fuente : git clone https://github.com/foosel/OctoPrint.git
    2. descargando un archivo de la versión estable actual de Github y desempaqueándolo
  3. Crear un entorno virtual (propiedad del usuario) en la carpeta fuente: virtualenv venv
  4. Instalando OctoPrint en ese entorno virtual : ./venv/bin/python setup.py install
  5. Es posible que OctoPrint se inicie a través de ./venv/bin/octoprint o con una ruta /path/to/OctoPrint/venv/bin/octoprint acceso absoluta /path/to/OctoPrint/venv/bin/octoprint

Las instrucciones de configuración más específicas para los entornos de tiempo de ejecución más comunes se pueden encontrar a continuación.

Comenzando con OctoPi

Por favor, sigue estos pasos después de descargar

  1. Vaya al sitio  y descargue el software https://octoprint.org/download/
  2. Descomprima la imagen e instala el archivo .img contenido en una tarjeta SD como cualquier otra imagen Raspberry Pi .
  3. Configure su conexión WiFi editando octopi-network.txt en la raíz de la tarjeta flasheada cuando la utiliza como una memoria USB.
  4. Arranque el Pi de la tarjeta.
  5. Inicie sesión en su Pi vía SSH (está ubicado en octopi.local si su computadora admite Bonjour o la dirección IP asignada por su enrutador), el nombre de usuario predeterminado es «pi», la contraseña predeterminada es «frambuesa». Cambia la contraseña usando el comando passwd . No necesita expandir el sistema de archivos, las versiones actuales de OctoPi lo hacen automáticamente.
  6. Acceda a OctoPrint a través de http://octopi.local o http://<your pi's ip address> . https también está disponible, con un certificado autofirmado.

Consulte también el archivo README de OctoPi , especialmente la sección «Cómo usarlo» .

Conectar con OctoPrint desde el ordenador

Pasados un minuto o dos, tiempo para que le de tiempo a la Raspberry a arrancar el sistema operativo, podemos conectarnos a OctoPrint de la siguiente manera:

  1. Desde el navegador de tu ordenador accede a la dirección: http://octopi.local
  2. Si es la primera vez que ejecutamos OctoPrint debemos añadir una cuenta de usuario para poder controlar la impresora.
  3. Entramos con nuestro usuario y contraseña
  4. Tras entrar con nuestro usuario y contraseña podemos usar OctoPrint. En la pantalla principal nos muestra:
  • El estado de conexión con la impresora 3D.
  • El estado de la impresión en curso.
  • Los ficheros de la tarjeta SD
  • La evolución y control de la temperatura del Hot-end y base caliente.

Controlar la impresora 3D desde OctoPrint

Ya tenemos acceso a OctoPrint desde nuestro navegador, ahora debemos hacer que OctoPrint controle nuestra impresora 3D, para ello nos conectamos a la impresora en el botón Connect dejando todo en AUTO, además podemos hacer que guarde esta configuración y que se conecte automáticamente al iniciar OctoPrint

Ahora ya podemos enviar nuestro primer archivo para imprimir, esto lo podemos hacer subiendo directamente el archivo .gcode a la tarjeta SD, o desde Slic3r. Una vez subido, seleccionamos el archivo, y pulsamos Print, y listo, ya podemos esperar a que nuestra impresora termine y ver la evolución desde el panel Control.

Mejorar una impresora 3d


No todos los dispositivos electrónicos que adquirimos son «perfectos» ,admitiendo sin duda casi siempre mejoras ( algunas muy simples y otras bastante complejas) , las cuales a veces pueden significar llegar a superar características de otros productos con precios mucho mas elevados pertenecientes a otros rangos de calidad y características.

Si nos centramos en las impresoras 3d, es evidente que, dado el gran abanico de precios y opciones disponibles, partiendo de un modelo genérico tenemos un gran margen de mejora. A continuación presentamos algunas ideas:

  1. Actualizar el firmware: Actualizar el firmware de la impresora 3D puede mejorar su rendimiento y corregir posibles errores.
  2. Calibración: Asegurarse de que la impresora 3D esté correctamente calibrada es esencial para lograr impresiones precisas y de alta calidad.
  3. Actualización de software: Actualizar el software de la impresora 3D, como el software de control de impresión y el software de diseño de modelos 3D, puede mejorar su funcionalidad y capacidad.
  4. Cambio de boquilla: Cambiar la boquilla de la impresora 3D puede mejorar la calidad de impresión y permitir la impresión con diferentes materiales.
  5. Mejora de la cama de impresión: Mejorar la cama de impresión, por ejemplo, utilizando una superficie de vidrio o una base magnética, puede mejorar la adherencia del filamento y la calidad de la impresión.
  6. Mejora del extrusor: La extrusora es un componente clave en la impresora 3D, por lo que actualizarla o reemplazarla por una más avanzada puede mejorar la velocidad y la calidad de impresión.
  7. Mejora de la fuente de alimentación: Actualizar la fuente de alimentación de la impresora 3D puede mejorar su estabilidad y la calidad de la impresión.
  8. Utilización de ventiladores de enfriamiento: Agregar ventiladores de enfriamiento para enfriar el filamento durante la impresión puede mejorar la calidad de la impresión y prevenir el pandeo.
  9. Añadir nuevas características, como por ejemplo el «autolevel» , proteger con carcasas impresas en 3d partes muy expuestas, mejorar el guiado del filamento , cerrar el volumen ocupado por la impresora ,etc.

Es importante recordar que cualquier modificación o mejora realizada en una impresora 3D debe realizarse con cuidado y siguiendo las instrucciones del fabricante para evitar dañar la impresora o poner en riesgo la seguridad del usuario.

Cómo está definido el sistema de posicionamiento de la impresora.

Las 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 en la A8 no es 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:

AutoLevel

El autonivel o autonivelado en una impresora 3D es una función que permite a la impresora ajustar automáticamente la posición de la cama de impresión para asegurarse de que la distancia entre la boquilla y la superficie de impresión sea constante en toda la superficie de impresión.

El proceso de nivelación manual de la cama de impresión puede ser complicado y requiere cierta habilidad y paciencia. Con la función de autonivelado, se utiliza un sensor o sonda para medir la distancia entre la boquilla y la superficie de impresión en diferentes puntos de la cama de impresión. Una vez que se mide la altura de la cama en diferentes puntos, la impresora ajusta automáticamente la altura de la boquilla para asegurarse de que esté a la misma distancia de la superficie de impresión en toda la superficie de impresión.

El autonivelado es especialmente útil en impresoras 3D con una cama de impresión grande o curva, ya que la superficie de impresión puede ser irregular y difícil de nivelar manualmente. El autonivelado también puede ayudar a mejorar la calidad de impresión y evitar que la boquilla se dañe si se encuentra con una superficie desigual.

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 decide hacerlo, será por su cuenta y riesgo. En este post como ejemplo lo vamos a ver para la A8, pero es evidente que para otros modelos es una operación muy similar

Actualización del Firmware de la impresora

Marlin es un firmware de código abierto para impresoras 3D que se utiliza comúnmente en impresoras 3D de escritorio y de código abierto siendo por tanto uno de los firmware más populares y utilizados en la comunidad de impresión 3D debido a su flexibilidad, capacidad de personalización y estabilidad.

Marlin se puede personalizar para adaptarse a las necesidades específicas de cada impresora 3D, lo que significa que es compatible con una amplia gama de hardware y componentes. El firmware proporciona una variedad de funciones avanzadas para la impresión 3D, como el autonivelado, el control de temperatura y la protección contra fallas de energía. Además, Marlin también admite una variedad de características avanzadas, como la impresión de varias piezas al mismo tiempo, la detección de filamentos y la impresión en múltiples extrusoras.

El firmware Marlin se ejecuta en la placa controladora de la impresora 3D y se comunica con el software de host de la impresora a través de una conexión USB. Marlin se puede configurar y personalizar utilizando un archivo de configuración, que es un archivo de texto que contiene información sobre las características de hardware y las opciones de configuración para la impresora 3D.

Marlin es un proyecto de código abierto, lo que significa que cualquier persona puede contribuir a su desarrollo y mejora. La comunidad de impresión 3D ha creado muchas versiones personalizadas de Marlin que incluyen características específicas, como la compatibilidad con diferentes sensores y componentes.

Antes de nada 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:

  • Permitir un control total sobre todos los parámetros de la configuración del mismo.
  • Da la posibilidad de implementar funciones que no permite el original como por ejemplo, el autolevel.

Como se ha comentado 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 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í:

resim

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í en este post asumiremos que la máquina es una A8 ( obviamente amigo lector si tiene una impresora distinta, tendra 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:

resim

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. En este fichero vamos a personalizar algunos parámetros que se acomoden a nuestra impresora. Antes de continuar mencionar que hay muchas personas que se desespera buscando un parámetro concreto de configuración en un fichero tan extenso. Para que no le pase esto, puede usar la utilidad de búsqueda: en el menú Editar, seleccione Buscar, en el cuadro de diálogo se pone el parámetro que esta buscando como por ejemplo, LCD_LANGUAGE y desmarque la opción Buscar en todas las Pestañas de Sketchs, para que solo busque en la pestaña que estamos y al pulsar Buscar, se posicionará en el primer punto donde se encuentre ese parámetro.

resim

Como era de esperar , si no es el que buscamos, pulsando de nuevo buscará el siguiente y así hasta que no encuentre más.

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.
  • Para lo segundo, al principio del configuration.h debera 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 quiera que aparezca. Tenga en cuenta que la línea de la pantalla original tiene un tamaño de 19 caracteres y que el nombre que ponga se mostrará así: nombre lista.. .Por cierto 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 tener la impresora conectada por USB al ordenador y tener 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:

resim

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):

resim

Ahora, pulsando sobre el botón circular con una flecha dentro (Subir), se compilará y se cargará en la impresora el firmware.

resim

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.

ELECTRONICA NECESARIA PARA IMPLEMENTAR EL AUTOLEVEL


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. 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.

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
  • Hay que colocarlo de forma que se pueda regular su distancia a la superficie a detectar.


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


El aspecto de la adición del nuevo sensor y el de configuración (extraido de la página de spainlabs.com ), es evidente que son las partes 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 entre 6-36V o 10-30V (pero, a pesar de ello, algunos pueden hacerlo solo con 5V). Parece ser que el tipo SN04 de tipo inductivo es uno de ellos, a pesar de poner en sus características diga que hay que alimentarlo con entre 10V y 30V.

Entre los capacitivos, el más utilizado es el tipo LJC18A3-H-Z/BX, que, aunque haya algunas personas que digan que funcionan a 5V parece ser que no es asi

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)
  • El negro el de señal.

La asignación de colores en el conector de la placa es el siguiente:

resim

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, podemos usar un regulador de tension de 5v ( por ejemplo el 7805 genérico o el 78L05 para baja corriente) o bien implementar un divisor de voltaje usando un diodo Zener 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:

resim


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í:

resim

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.

Configuración del firmware

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:

resim

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:

resim

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).

Ahora viene un punto importante.
 
Como vimos cuando comentamos el sistema de posicionamiento, el firmware viene configurado por defecto para impedir los movimientos más allá de la activación de los finales de carrera.
 
Pero, dado que el sensor se activa mucho antes de que la boquilla del extrusor esté a la distancia correcta para comenzar la impresión, hay que sobrepasar ese punto de activación del sensor para llegar a ella, por lo que hay que eliminar esa limitación.
 
Se encuentra aquí:

// If enabled, axes won’t move below MIN_POS in response to movement commands.
#define MIN_SOFTWARE_ENDSTOPS
 
Para evitar la limitación, hay que comentar esa línea. Pero es una cosa que no me gusta mucho, ya que afecta a todos los ejes y al estar fijos los interruptores de fin de carrera para los ejes X e Y, se podrían producir desperfectos en caso de órdenes de movimiento incorrectas.
 
Marlin no lo tiene por separado para el eje Z, pero vamos a solucionarlo pues en la versión 1.1.8 han separado por ejes la desactivación de los límites. Si se utiliza ya esta última versión, ya no es necesario realizar lo que viene después :

Para ello, vamos a definir un nuevo parámetro que llamaremos MIN_SOFTWARE_ENDSTOP_Z, quedaría así:
 
// If enabled, axes won’t move below MIN_POS in response to movement commands.
#define MIN_SOFTWARE_ENDSTOPS

// Si está activado, el eje Z no se podrá mover por debajo de su MIN_POS en respuesta a comandos de movimiento.
//#define MIN_SOFTWARE_ENDSTOP_Z

// If enabled, axes won’t move above MAX_POS in response to movement commands.
#define MAX_SOFTWARE_ENDSTOPS
 
Ahora vamos a la pestaña Marlin_main.cpp y buscamos las líneas:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
      #if DISABLED(DELTA)
        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
      #endif
      NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);

y lo dejamos así:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
      #if DISABLED(DELTA)
        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
      #endif
      #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
        NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
      #endif
 

Ahora el código viene así:

#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
  #define MIN_SOFTWARE_ENDSTOP_X
  #define MIN_SOFTWARE_ENDSTOP_Y
  #define MIN_SOFTWARE_ENDSTOP_Z
#endif

Y solo tendremos que comentar la línea del eje Z para deshabilitar la limitación de ese eje.

Dado que han denominado igual que yo el nuevo parámetro, el texto puede seguir igual a partir de aquí.

Con eso ya tendremos desactivada la limitación únicamente para el eje Z. Si queremos activarla, solo tendremos que des-comentar la línea //#define MIN_SOFTWARE_ENDSTOP_Z en configuration.h.

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. Si utilizamos el LINEAR, por descomentaremos 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 3×3=9 puntos. Se puede probar otras configuraciones con más puntos, pero no parecen mejoras apreciable, así que la dejaremos así. A continuación vamos a ver un ultimo ajuste con el que muchas persona tiene problemas: los límites de la rejilla de medición.

DEFINIR LA REJILLA DE MEDICION

La forma de definir la rejilla de medición del autolevel es posible gracias a que se ha incorporado un nuevo parámetro, con la línea:

#define  MIN_PROBE_EDGE 10

Lo cual 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 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.

En resumen, Marlin es un firmware de código abierto muy popular y flexible para impresoras 3D que proporciona muchas funciones avanzadas para mejorar la calidad de impresión y la estabilidad de la impresora. Además, debido a su capacidad de personalización, es compatible con una amplia gama de hardware y componentes, lo que lo convierte en una opción popular en la comunidad de impresión 3D sobre todo a la hora de implementar ciertas mejoras como el autolevel. Como hemos visto en este post el proceso no es una tarea sencilla pero tampoc imposible.