Links

Creality K1 & K1 Max - Klipper

Root... ajusta tu máquina al detalle

Como ya hemos comentado la K1 tiene acceso limitado a su firmware Klipper, la propia Creality ha liberado el proceso aquí, en nuestro caso usaremos el método del compañero Guillouz que también tenéis disponible en su Github.
El porqué es importante, dependiendo del tipo de usuario que utilice la máquina, disponer de acceso root a la máquina?
Principalmente por el hecho de que Creality emplea una versión de Klipper personalizada, capada en ciertas funciones y desactualizada con respecto a las versiones oficiales lo que nos puede limitar en el uso y disfrute de ciertas funciones de Klipper que podrían mejorar considerablemente nuestra K1.
AGRADECIMIENTOS!!!
Os invitamos, por el gran trabajo y aporte, a invitar a un café al compañero Guillouz a través de su Ko-fi.
En los siguientes pasos os vamos a describir el proceso de tener acceso root a nuestra Creality K1 y K1 Max y añadir mejoras en la configuración y gestión de esta que, a día de hoy, no están disponibles en la máquina.
IMPORTANTE!!!
  • este proceso puede invalidar la garantía de tu máquina
  • el uso y modificación de la configuración y firmware de la máquina puede hacer que esta no funcione correctamente o se produzcan fallos
Si no tienes conocimientos de lo que vas a realizar te recomendamos NO realizar estos pasos.
Es responsabilidad de cada uno proceder a realizar estos cambios y cualquier posible fallo o daño originado en el proceso o uso.
Comenzamos el proceso:
En el caso de que nuestro firmware instalado no tenga opción de root, actualmente las versiones 1.3.2.1 (changelog) y 1.3.2.8 (changelog) o superiores ya cuentan con opciones root, deberemos actualizar.
ATENCIÓN!!!
Cuando actualizamos a una nueva versión de firmware el fichero gcode_macros.cfg será eliminado por lo que es aconsejable realizar un backup antes de realizar el proceso. Os incluiremos una forma de realizar esos backups a un repositorio de Github y tenerlo automatizado.
Por otro lado tu printer.cfg suele no ser modificado aunque en cualquier caso también es aconsejable realizar un backup.
Por supuesto lo anteriormente comentado solamente es posible una vez tengamos acceso root a nuestra máquina.
  • Utilizaremos un USB con formato FAT32/4096 donde copiaremos el .img del firmware, en el punto anterior tienes un link a ellos, que copiaremos en la raíz el USB. Los links a los firmwares de la parte superior son válidos tanto para el modelo K1 como el K1 Max.
  • Conectaremos, con la impresora encendida y en la pantalla de home, el USB y nos aparecerá un aviso indicando que tenemos un nuevo firmware. Pulsaremos Upgrade y esperaremos a que finalice el proceso.
  • Una vez finalizado el proceso, la impresora se reiniciará, cuando nos aparezca la pantalla home de nuevo podremos retirar el USB
  • Es más que aconsejable realizar un Reset Factory para restaurar los valores a los de fábrica.
Reset Factory:
Como ya hemos comentado es aconsejable realizar un Reset Factory antes de realizar el proceso de root. La forma más sencilla de realizar el proceso normalmente es utilizando la herramienta que Creality nos facilita que podemos descargar desde aquí.
Simplemente descomprimir el zip descargado y abrir el fichero con nuestro navegador web favorito (Chrome, Edge, Safari, etc..) Creality_K1_Reset_Utility.html.
Tan solo tendremos que poner la IP de nuestra impresora que podremos obtener en la parte de configuración de red desde la pantalla de la impresora y pulsar el botón RESET.
Si ya contamos con una versión de firmware que soporta root, realizaremos los siguientes pasos:
  • Desde la pantalla iremos a la opción Settings -> Root account information
  • Os aconsejamos leer detenidamente el texto y los avisos sobre realizar root sobre la máquina, si estamos de acuerdo marcaremos el check de I have understood the risks of root login y pulsaremos OK
IMPORTANTE!!!
El acceso root ha de reactivarse cada vez que realicemos un reset de nuestra impresora a los valores de fábrica.

Instalación de Helper Script para K1

Klipper está basado en Linux y su manejo interno va a requerir de ciertos conocimientos básicos de este para poder realizar ciertas acciones.
En este caso, para facilitar el proceso, el compañero Guillouz nos ha facilitado mucho la vida con una herramienta a base de menús, al estilo Kiauh. Para poder instalar este más que interesante asistente de instalación:
  • Accederemos por SSH, utilizando nuestro cliente favorito, a nuestra K1 utilizando la IP de esta y los datos de usuario/password que obtuvimos en el paso anterior. En nuestro caso utilizamos como cliente Terminus que es sencillo, potente, muy visual además de multiplataforma, también se puede usar otros como Putty:
  • desde la línea de comandos lanzaremos el siguiente comando para la instalación del Helper Script K1:
SSH CLI
cd && wget --no-check-certificate https://raw.githubusercontent.com/Guilouz/Creality-K1-and-K1-Max/main/Scripts/installer.sh
Actualización Helper Script K1:
En el caso que ya lo tengamos instalado y queramos simplemente actualizarlo lanzaremos el siguiente comando:
cd && rm -f installer.sh && wget --no-check-certificate https://raw.githubusercontent.com/Guilouz/Creality-K1-and-K1-Max/main/Scripts/installer.sh
Aunque, una vez instalado, también disponemos de una opción dentro de los menús para poder comprobar actualizaciones con la opción u (Check Script Updates)
  • Una vez instalado lanzaremos el Helper Script K1 utilizando el siguiente comando:
SSH CLI
cd && sh ./installer.sh

Instalación componentes Klipper en K1

En este punto ya tenemos todo listo para verdaderamente transformar nuestra K1 para poder personalizarla y ajustarla a nuestro gusto libremente.
Utilizando el Helper Script K1 procederemos a:
ATENCIÓN!!! Errores durante la instalación de componentes/paquetes:
En el caso que tengamos errores durante la instalación de los componetes, ejamplo:
Connecting to github.com (20.248.137.48:443) wget: TLS error from peer (alert code 80): 80 wget: error getting response: Connection reset by peer Download failed. Exit code: 1 [/CODE]
Pueden estar relacionados con diferentes problemas:
  • Nuestra K1 se conectó a nuestra red pero no tiene acceso a internet, os aconsejamos revisar la configuración de red de vuestra K1 o vuestro router
  • Que necesitemos instalar el gestor de paquetes Entware, desde el Helper Script K1 elegiremos la opción 1 (Install) pulsaremos ENTER y en el siguiente menú la opción 5 (Entware) y volveremos a intentar la instalación.
  • Falta del paquete wget-ssl, en el caso que veamos errores de TSL/SSL es posible que nos falte este paquete en nuestro sistema. Desde la linea de comandos lanzaremos
    opkg install wget-ssl
  • Instalación Moonraker and Nginx, paso previo e imprescindible es la instalación de Moonraker que es la API que va a permitir a otros componentes que instalemos "hablar" con Klipper. Por otro lado, Nginx es un demonio web que permitirá el funcionamiento de Moonraker además de las UI que queramos instalar.
  • Instalación de UI Web, será la interfaz web con la cual podremos gestionar nuestra máquina y tenemos tres opciones en este caso:
Mainsail
Fluidd
Mainsail/Fluidd Cloud
Mainsail es una de las interfaces web para Klipper más utilizadas y con más opciones que podemos contar.
Para poder instalarla elegiremos la opción 1 (Install) pulsaremos ENTER y en el siguiente menú la opción 3 (Mainsail) y procederemos a la instalación.
Recuerda que una vez instalado y para acceder iremos a nuestro navegador de nuestro ordenador/móvil/tablet y pondremos <IP_K1>:4409 (donde sustituiremos <IP_K1> por la IP que obtuvimos en pasos anteriores y utilizamos para conectar por SSH).
Ya podremos gestionar nuestra impresora!!!
Fluidd es otra de las interfaces web para Klipper más utilizadas aunque su desarrollo no es tan activo como Mainsail tiene funciones muy interesantes.
Para poder instalarla elegiremos la opción 1 (Install) pulsaremos ENTER y en el siguiente menú la opción 2 (Fluidd) y procederemos a la instalación.
Recuerda que una vez instalado y para acceder iremos a nuestro navegador de nuestro ordenador/móvil/tablet y pondremos <IP_K1>:4408 (donde sustituiremos <IP_K1> por la IP que obtuvimos en pasos anteriores y utilizamos para conectar por SSH).
Ya podremos gestionar nuestra impresora!!!
Otra opción con la que podemos utilizar tanto Mainsail como Fluidd sin necesidad de utilizar nada es mediante las versiones Cloud de estas
Con poner en nuestro navegador:
Servicio
URL
Mainsail
https://my.mainsail.xyz
http://my.mainsail.xyz
Fluidd
https://app.fluidd.xyz
http://app.fluidd.xyz
Nos solicitará añadir una nueva impresora donde pondremos, dependiendo del interfaz, la IP y puerto de nuestro Moonraker.

Instalación componentes extras de sistema

El sistema utilizado por Creality para estas K1 como ya hemos comentado está muy limitado lo cual de por si no es malo para un usuario que quiera utilizar la máquina tal como viene pero si queremos sacar más provecho de ella necesitaremos instalar componentes extras a este.

Entware

Entwaare es un respositorio de software para sistemas Linux que nos va a permitir la instalación de componentes extras a nuestro sistema.
La instalación es muy sencilla:
  • Lanzaremos Helper Script desde nuestro cliente SSH favorito cd && sh ./installer.sh
  • Una vez ya tenemos los menus de Helper Script iremos a la opción 1 [Install] y de las opciones, dentro de UTILITIES, elegiremos 4 [Install Entware]
  • Una vez instalado:
    • podemos encontrar la lista que paquetes/software disponibles aquí
    • podremos instalar un paquete/software mediante opkg install <packagename>
    • podremos revisar si tenemos actualizaciones pendientes y actualizar utilizando opkg update y opkg upgrade

Nano

Uno de los paquetes que os aconsejamos instalar es Nano que es un editor por linea de comandos y que seguro que nos va a ser util en algún momento.
Lo instalaremos lanzando opkg install nano
Para más información o como usarlo os aconsejamos revisar el siguiente link.

SFTP

El siguiente paquete a instalar es SFTP ya que no viene habilitado por defecto y en el caso que necesitemos transferir ficheros hacia o desde otro ordenador nos va a ser de gran ayuda.
Instalaremos el paquete con opkg install openssh-sftp-server; ln -s /opt/libexec/sftp-server /usr/libexec/sftp-server
Una vez instalado ya podremos utilizar cualquier cliente SFTP para poder acceder y transferir ficheros de forma cómoda, en nuestro caso os aconsejamos Cyberduck ya que es multiplataforma, fácil y sencillo de usar.

Copias de seguridad

Antes de empezar a añadir todas las mejoras que podréis ver a continuación nos gustaría que tuvierais en cuenta que en alguno de los procesos siguientes algo puede fallar por lo que es más que aconsejable disponer de un backup/copia de seguridad de los datos más importantes.
Para ello el Helper Script nos facilita la tarea con opciones para realizar un backup de nuestros ficheros de configuración Klipper.
Backup/Copia de seguridad
Restore/Restaurar copia de seguridad
Lanzaremos desde el Helper Script la opción 4 [Backup & Restore] y la opción 1 [Backup configuration files]:
Esto nos va a dejar un fichero backup_config.tar.gz con todo nuestro backup de configuraciones Klipper en el directorio /config (/usr/data/printer_data/config/) accesible desde nuestro interfaz web:
Seguiremos el mismo proceso pero en este caso seleccionaremos la opción 2 [Restore configuration files] que realizará la restauración de los ficheros de nuestro último backup.

Mejoras con root

A continuación y ya que tenemos root en la máquina vamos a realizar algunos cambios que permitan mejorar el rendimiento y funcionalidad de nuestra K1:

Nivelación manual de cama asistida

Una funcionalidad muy interesante es Screws Tilt Adjust, la cual nos permite ajustar la nivelación manual de nuestra cama utilizando la precisión del sensor de nivelación de nuestra K1.
Es interesante, como veremos en siguientes puntos, que no siempre la cama de nuestras K1 se encuentra en las mejores condiciones. Para poder corregir esto este mod nos va a ir sensacional.
El proceso es muy sencillo gracias al Helper Script desde el cual seleccionaremos la opción 1 [Install] > 15 [Install Screws Tilt Adjust Support]:
Una vez instalado ya tendremos disponible las nuevas macros de Screws Tilt Adjust (SCREWS_CALIBRATION) y/o podremos lanzar el proceso desde nuestra interfaz web:
Mainsail
Fluidd

Nivelación automática de cama Klipper

Creality por defecto usa lagrange como método de interpolación en el cálculo de nuestra malla de nivelación mientras que el método que puede ser más beneficioso puede ser bicubic. Para modificar esto iremos a nuestro printer.cfg y en la sección [bed_mesh] añadiremos las siguientes lineas al final de dicha sección:
algorithm: bicubic
bicubic_tension: 0.1
Quedando nuestra sección [bed_mesh] así:
[bed_mesh]
speed: 150
mesh_min: 5,5
mesh_max: 295,295
probe_count: 6,6
fade_start: 3.0
fade_end: 10.0
algorithm: bicubic
bicubic_tension: 0.1
Estado del mallado de cama por defecto
Estado del mallado de cama usando bicubic

KAMP... nivelación y purga adaptativa

KAMP siempre es un componente que nos gusta añadir a nuestras impresoras, esta extensión a Klipper nos permite generar un mallado adaptativo al área de impresión de los objetos a imprimir con lo cual tendremos un área de mallado más definido a las necesidades mejorando considerablemente el resultado de nuestras primeras capas.
KAMP calcula el área de mallado teniendo en cuenta la información que proporciona el laminador al habilitar la función en estos de etiquetado de objetos.
Comenzamos con la instalación para nuestra K1:
  • Volveremos a utilizar el Helper Script K1 desde SSH, en este caso usaremos las opciones 1 (Install) y 7 (Klipper Adaptative Meshing & Purging):
  • Una vez finalizada la instalación y desde el interfaz web iremos a nuestro moonraker.conf y buscaremos por la sección [file_manager] para poner el valor enable_object_processing a True
moonraker.conf
[file_manager]
queue_gcode_uploads: False
# Set to 'True' if you use KAMP
enable_object_processing: True
  • Continuando en moonraker.conf añadiremos las siguientes lineas, o si ya las tenemos las habilitaremos eliminando el símbolo # del inicio de la linea, para habilitar las actualizaciones desde el interfaz:
moonraker.conf
# Remove '#' from the lines below if you use KAMP
[update_manager KAMP-for-K1-Series]
type: git_repo
channel: dev
path: /usr/data/KAMP-for-K1-Series
origin: https://github.com/Guilouz/KAMP-for-K1-Series.git
primary_branch: main
is_system_service: False
  • Guardaremos los cambios pulsando sobre el botón de SAVE AND RESTART si todo ha ido bien y después del reinicio tendremos disponible en el panel de actualizaciones KAMP
  • Tal como hemos comentado KAMP se basa en la función del laminador para etiquetar los objetos a imprimir por lo que tenemos que tener habilitada esta función para que KAMP funcione correctamente.
OrcaSlicer
PrusaSlicer
En OrcaSlicer podemos encontrarla en Others y marcaremos Exclude Objects y Label Objects.
En el caso de PrusaSlicer activaremos el etiquetado de objetos:
  • Ahora añadiremos la carga de nuestras macros KAMP a nuestro printer.cfg:
[include KAMP_Settings.cfg]
  • Dependiendo de que queremos utilizar de KAMP, el nivelado adaptativo/Linea de purga normal o Voron adaptativa o el aparcado del cabezal al finalizar la impresion (este no se incluye en la guía dado que el proceso de la K1 ya lo hace), tenemos que habilitar unas líneas u otras del fichero KAMP_Settings.cfg que encontramos en el directorio raiz de ficheros de configuración:
  • El siguente paso será adaptar la macro START_PRINT para asegurarnos que KAMP se activa correctamente, para ello editaremos en gcode_macro.cfg la sección [gcode_macro START_PRINT] en dos puntos dependiendo de si queremos habilitar la malla o linea de purga adaptativa respectivamente (ojo, revisar el punto anterior para asegurarnos que tenemos el include correspondiente habilitado):
    • Reemplazando la macro CX_PRINT_LEVELING_CALIBRATION, colocaremos una # delante, de la siguiente forma:
      # CX_PRINT_LEVELING_CALIBRATION
      ## KAMP Enabled - 3DWORK
      BED_MESH_CLEAR
      BED_MESH_CALIBRATE
    • Reemplazaremos también la macro CX_PRINT_DRAW_ONE_LINE de igual forma:
      # CX_PRINT_DRAW_ONE_LINE
      ## KAMP Enabled - 3DWORK
      SMART_PARK
      M109 S{extruder_temp}
      M190 S{bed_temp}
      LINE_PURGE
En el caso que utilicemos PrusaSlicer o algún fork similar:
Si no definimos las aceleraciones en nuetra perfil de impresión deberemos añadir la siguiente línea debajo de _LINE_PURGE para poder tener las aceleraciones de nuestro printer.cfg
SET_VELOCITY_LIMIT ACCEL={printer.configfile.settings.printer.max_accel}
Por otro lado tambien es aconsejable, si vemos errores en la consola durante una impresion relacionados con las siguientes macros, añadir estas macros:
[gcode_macro DEFINE_OBJECT]
gcode:
EXCLUDE_OBJECT_DEFINE {rawparams}
[gcode_macro START_CURRENT_OBJECT]
gcode:
EXCLUDE_OBJECT_START NAME={params.NAME}
[gcode_macro END_CURRENT_OBJECT]
gcode:
EXCLUDE_OBJECT_END {% if params.NAME %}NAME={params.NAME}{% endif %}
[gcode_macro LIST_OBJECTS]
gcode:
EXCLUDE_OBJECT_DEFINE
[gcode_macro LIST_EXCLUDED_OBJECTS]
gcode:
EXCLUDE_OBJECT
[gcode_macro REMOVE_ALL_EXCLUDED]
gcode:
EXCLUDE_OBJECT RESET=1

Ajuste fino de KAMP para nuestra K1

En los siguientes apartados encontrareis información de como customizar KAMP a nuestro gusto, estos cambios los realizaremos dentro del fichero KAMP_Settings.cfg ajustando las variables que mencionamos:
Mallado Adaptativo
Linea de Purga Adaptativa
Para el mallado adaptativo contamos con algunas variables que pueden ser muy útiles:
  • mesh_margin : indica el margen en mm entre el área de impresión y la que KAMP realizará el mallado de cama. Por defecto es 0 pero en ocasiones puede ser interesante un valor de 10 (u otro) que permita crear un mallado más óptimo
  • fuzz_amount : en el caso de sensores de nivelación integrados en el propio nozzle, como la K1 permite que el punto de sondeo sea un poco random en base a este valor para por ejemplo si imprimimos de forma repetida el mismo modelo no acabemos dañando la superficie de impresión. Por defecto es 0 pero para la K1 podemos usar un valor entre 1 y 3.
Para la linea de purga daptativa también contamos con algunas opciones de personalización interesantes:
  • purge_height : indica la altura de capa que usará para realizar la linea de purga, por defecto 0.8, no suele ser necesario tocarlo si no instalamos un nozzle de más de 0.8.
  • tip_distance : es la distancia entre la posición de entrada del filamento en el hotend y la salida de este por el nozzle, normalmente en la macro de final de impresión PRINT_END se suele hacer una retracción y el valor de este tip_distance debería de coincidir con este.
  • purge_margin : no tiene mucho misterio, el margen en mm entre la pieza impresa y la linea de purga
  • page_amount : la distancia en mm de filamento que vamos a realizar la purga, por defecto 30, es aconsejable ir jugando con este valor para encontrar el que mas nos guste
  • flow_rate : el valor de flujo a utilizar durante el purgado, es aconsejable ajustarlo teniendo en cuenta las caracteristicas de nuestro hotend... en el caso de la K1 y dependiendo del material y boquilla un valor entre 12 y 20 suele ir bien.

Mejoras en ventilación

Nuestra K1 cuenta con tres ventiladores gestionables que utiliza por defecto en diferentes acciones durante la impresión.
  • Ajustando la ventilación capa durante los procesos de impresión, por defecto al finalizar una impresión vemos como el ventilador de capa se ponen al 100% haciendo que sea verdaderamente molesto en ocasiones. Aprovechando el acceso root vamos a ajustar esto a nuestro gusto. Abriremos el fichero de configuración de macros gcode_macro.cfg y buscaremos la sección [gcode_macro WAIT_TEMP_START] y la ajustaremos tal como vemos a continuación, que es bajando el % de ventilación del 100% al 80% para el ventilador de capa del hotend y 85% para el auxiliar:
    [gcode_macro WAIT_TEMP_START]
    gcode:
    UPDATE_DELAYED_GCODE ID=wait_temp DURATION=1
    M106 P0 S200
    M106 P2 S216
    También ajustaremos la siguiente sección [gcode_macro WAIT_TEMP_END] y la ajustaremos de la siguiente forma:
    [gcode_macro WAIT_TEMP_END]
    gcode:
    UPDATE_DELAYED_GCODE ID=wait_temp DURATION=0
    M106 P0 S0
    M106 P2 S0
    Una vez aplicados los cambios hacemos un SAVE & RESTART para guardar y aplicar los cambios.
  • Mejoras en ventilación de cerramiento (chamber fan), K1 cuenta con un sistema de ventilación de cerramiento que puede activarse dependiendo de la temperatura lo cual esta genial para imprimir filamentos como PLA/TPU en los que no interesa que tengamos mucha temperatura interna y se produzcan atascos. O por contra en filamentos más técnicos como ABS/ASA/etc que si que nos interesa altas temperaturas estas no sean tan altas como para afectar a la impresora. Para poder tener disponible este control nos iremos a nuestro printer.cfg y añadiremos estas lineas... RECUERDA!!! siempre por encima de la sección SAVE_CONFIG!!!:
    [duplicate_pin_override]
    pins: PC0, PC5
    [temperature_fan chamber_fan]
    pin: PC0
    cycle_time: 0.0100
    hardware_pwm: false
    max_power: 1
    shutdown_speed: 0
    sensor_type: EPCOS 100K B57560G104F
    sensor_pin: PC5
    min_temp: 0
    max_temp: 70
    control: watermark
    max_delta: 2
    target_temp: 35.0
    max_speed: 1.0
    min_speed: 0.0
    Y guardamos los cambios con SAVE & CLOSE, ahora vamos a editar nuestro gcode_macro.cfg y añadiremos una macro gcode que nos permita controlar este ventilador desde los laminadores mediante el gcode M141:
    [gcode_macro M141]
    description: Set Chamber Temperature with slicers
    gcode:
    SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={params.S|default(35)}
    Ahora sí haremos un SAVE & RESTART para guardar y aplicar los cambios. Si todo ha ido correctamente desde nuestra UI podremos tener acceso a la gestión de temperatura para ajustar la activación del ventilador.
    También tendremos el gcode M141 Sxx que usan los laminadores para controlar las temperaturas del cerramiento, en nuestro caso con OrcaSlicer solemos añadir el comando M141 Sxx en el gcode de filamento:
  • Control de ventilación durante el proceso de limpieza del nozzle, otro proceso que root nos va a permitir ajustar es durante el paso de limpieza del nozzle donde los ventiladores funcionan al 100% siendo también bastante molestos y normalmente innecesario tanta ventilación. En este caso necesitaremos nuestro Helper Script K1 utilizando las opciones 1 (Install) y 11 (Nozzle Cleaning Fan Control Files):
    A continuación iremos a nuestro printer.cfg y añadiremos las siguientes lineas... RECUERDA!!! siempre por encima de la sección SAVE_CONFIG!!!:
    [prtouch_v2_fan]
    max_speed: 0.5
    Donde ajustaremos el valor de max_speed a nuestro gusto, siendo 1 una velocidad del 100% y, por ejemplo, 0.5 un 50%. Pulsaremos sobre SAVE & RESTART para guardara y aplicar nuestros cambios.
  • Ajustes extras en el laminador, en el caso que usemos OrcaSlicer o similares es aconsejable fijarse en la configuración de este si usamos perfiles creados por terceros. Para que el ventilador auxiliar de capa, el que se encuentra en uno de los laterales de la máquina, funcione correctamente hemos de asegurarnos habilitar la función correspondiente en la configuración del perfil de impresora:
    Podremos posteriormente ajustar el % dentro de las opciones de nueestro filamento en refrigeración/cooling:
Velocidades ventilador auxiliar de capa:
Para nuestro caso, K1 Max, el ventilador auxiliar de capa apenas genera flujo de aire hasta el 85% donde el nivel de ruido vs flujo de aire creemos que es bueno. A partir del 90% el flujo de aire es excelente pero por otro lado el ruído que genera puede ser considerablemente alto. Haz tus pruebas para obtener tu valor óptimo para tu máquina ya sea utilizando los controles desde tu interfaz web (Fan2), desde la propia pantalla de la impresora (Side Fan) o desde la consola también desde la interfaz web con el comando M106 P2 Sxxx o SET_PIN PIN=fan2 VALUE=xxx donde xxx será un valor de 0 a 255 que se traducirá en el % de ventilación.

Mejoras en Input Shaping

Creality parece que ha limitado el funcionamiento de Input Shaping solamente para el eje Y (y este es copiado para usarse como valores del X, lo cual no siempre es aconsejable) cuando por su cinemática y el sensor que lleva puede realizarlo para los ejes X e Y. Para solventar esto iremos a nuestro gcode_macro.cfg y buscaremos por la sección [gcode_macro AUTOTUNE_SHAPERS] donde deshabilitaremos (poniendo # al inicio de la línea) el valor variable_autotune_shapers:
[gcode_macro AUTOTUNE_SHAPERS]
#variable_autotune_shapers: 'ei'
gcode:
A continuación, y también en nuestro gcode_macro.cfg, buscaremos la sección [gcode_macro INPUTSHAPER] y eliminaremos AXIS=Y de la línea SHAPER_CALIBRATE, en el primer ejemplo tenemos la macro original y en el segundo la modificada:
[gcode_macro INPUTSHAPER]
gcode:
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
G90
G28
{% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
{% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
G1 X{POSITION_X} Y{POSITION_Y} F6000
G1 Z10 F600
SHAPER_CALIBRATE AXIS=y
CXSAVE_CONFIG
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
[gcode_macro INPUTSHAPER]
gcode:
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
G90
G28
{% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
{% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
G1 X{POSITION_X} Y{POSITION_Y} F6000
G1 Z10 F600
SHAPER_CALIBRATE
CXSAVE_CONFIG
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
En el siguiente ejemplo podemos ver las diferencias entre hacer un Input Shaping como lleva por defecto la máquina y una vez ajustados los valores anteriores:
Input Shaping desde nuestra interfaz para poder lanzarlo manualmente!!!
Es una función muy interesante para poder lanzar nuestro proceso de calibración de vibraciones de forma manual.
Para ello añadiremos la siguiente macro a nuestro gcode_macro.cfg :
[gcode_macro MANUAL_INPUT_SHAPER]
description: Measure X and Y axis resonances
gcode:
G90
{% if printer.toolhead.homed_axes != "xyz" %}
G28
{% endif %}
SHAPER_CALIBRATE
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
G1 X{x_park} Y{y_park} F20000
M84

Input Shaping manual y generando gráficas

En nuestro caso preferimos revisar las gráficas generadas para ver el estado de la máquina y realizar cualquier ajuste en esta, tal como puedes ver en nuestra guía de Input Shaper, para mejorar la efectividad de las correcciones Input Shaper.
Para ello en nuestra UI web lanzaremos las siguientes macros para generar el fichero de resonancias para cada eje:
TEST_RESONANCES AXIS=X
TEST_RESONANCES AXIS=X
Por descracia y dadas las limitaciones en el sistema de nuestras K1 vamos a necesitar otro Klipper para poder generar nuestras gráficas o si disponemos de una máquina Windows podemos usar esta herramienta.
Si optamos por generarlo desde otro Klipper subiremos los csv al directorio tmp, nos conectaremos por SSH y lanzaremos los siguientes comandos:
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
Una vez finalice el proceso tendremos nuestras gráficas estarán disponibles y podemos descargarlas para revisarlas:
Gráficas eje X, que han de mejorarse
Gráficas eje Y, que son correctas
La cinemática de la K1 es bastante mejorable, la falta de consistencia de la construcción del chasis y el sistema de cinemática hace que sea susceptible de que a poco que algo se desajuste afectar significativamente a las vibraciones.
Una de las cosas a revisar, si como en nuestro caso tenemos un resultado poco óptimo como el mostrado en el ejemplo anterior del eje X y que va a mermar significativamente el rendimiento si queremos evitar vibraciones y que Input Shaper sea efectivo, es la tensión de las correas. Tenéis un sistema que podéis imprimi vosotros mismos y que puede ayudaros a ajustar parcialmente esto.
Consta de dos partes:
  • el primero es para alinear perpendicularmente el gantry de X y evitar que pequeñas desviaciones introduzcan vibraciones y errores de geometría en nuestras piezas
  • la segunda es para verificar las tensiones en ambas correas que también es clave para un correcto rendimiento en máquinas Core XY
En el siguiente video tenéis como poder utilizar lo anterior para mejorar nuestra máquina!!!

Macro cambio de filamentos M600

Normalmente los laminadores suelen usar el gcode M600 para indicar a la máquina cuando se va a realizar un cambio de filamentos. Por desgracia la K1 no lleva una macro de este tipo por defecto y dado que si no tenemos root es complicado poder añadir estas a nuestra K1 podemos aprovechar el realizar root para mejorar esta y otras macros.
Vamos a utilizar una macro muy sencilla para hacer el M600 que viene en el propio core de Klipper como ejemplo pero siempre podéis utilizar otras más complejas y que mejoran el proceso como la que usamos en nuestro bundle para Klipper.
Revisaremos el fichero de ejemplos de macro de Klipper desde aqui. Y cogeremos la sección Filament Change :
https://github.com/Klipper3d/klipper/blob/master/config/sample-macros.cfg
######################################################################
# Filament Change
######################################################################
# M600: Filament Change. This macro will pause the printer, move the
# tool to the change position, and retract the filament 50mm. Adjust
# the retraction settings for your own extruder. After filament has
# been changed, the print can be resumed from its previous position
# with the "RESUME" gcode.
[pause_resume]
[gcode_macro M600]
gcode:
{% set X = params.X|default(50)|float %}
{% set Y = params.Y|default(0)|float %}
{% set Z = params.Z|default(10)|float %}
SAVE_GCODE_STATE NAME=M600_state
PAUSE
G91
G1 E-.8 F2700
G1 Z{Z}
G90
G1 X{X} Y{Y} F3000
G91
G1 E-50 F1000
RESTORE_GCODE_STATE NAME=M600_state
Abriremos el fichero de configuración gcode_macro.cfg tal como hemos hecho en ocasiones anteriores desde nuestra interfaz web y copiaremos la macro M600 anterior al final de el y guardaremos los cambios SAVE AND RESTART. Al reiniciar deberemos tener disponible en el panel de macros nuestra M600.
A continuación iremos a nuestro laminador, en nuestro caso OrcaSlicer, y dentro del perfil de nuestra impresora en la pestaña de Machine G-code y apartado Change filament G-code donde pondremos nuestra macro M600, recordar guardar los cambios al perfil :) :

Guardado automático del Z Offset

Un problema recurrente es que si ajustamos nuestro Z Offset durante una impresión (babystepping) para realizar ajustes tenemos que recordar guardar estos cambios en nuestra configuración desde el interfaz web para poder conservarlos.
Con los siguientes cambios vamos a hacer que el Z Offset se guarde automáticamente y se cargue automáticamente al iniciar el sistema.
  • En nuestro printer.cfg añadiremos estas lineas:
[save_variables]
filename: /usr/data/printer_data/config/variables.cfg
[respond]
  • Ahora en gcode_macro.cfg añadiremos lo siguiente:
[gcode_macro SET_GCODE_OFFSET]
description: Saving Z-Offset
rename_existing: _SET_GCODE_OFFSET
gcode:
{% if printer.save_variables.variables.zoffset %}
{% set zoffset = printer.save_variables.variables.zoffset %}
{% else %}
{% set zoffset = {'z': None} %}
{% endif %}
{% set ns = namespace(zoffset={'z': zoffset.z}) %}
_SET_GCODE_OFFSET {% for p in params %}{'%s=%s '% (p, params[p])}{% endfor %}
{%if 'Z' in params %}{% set null = ns.zoffset.update({'z': params.Z}) %}{% endif %}
{%if 'Z_ADJUST' in params %}
{%if ns.zoffset.z == None %}{% set null = ns.zoffset.update({'z': 0}) %}{% endif %}
{% set null = ns.zoffset.update({'z': (ns.zoffset.z | float) + (params.Z_ADJUST | float)}) %}
{% endif %}
SAVE_VARIABLE VARIABLE=zoffset VALUE="{ns.zoffset}"
[delayed_gcode LOAD_GCODE_OFFSETS]
initial_duration: 2
gcode:
{% if printer.save_variables.variables.zoffset %}
{% set zoffset = printer.save_variables.variables.zoffset %}
_SET_GCODE_OFFSET {% for axis, offset in zoffset.items() if zoffset[axis] %}{ "%s=%s " % (axis, offset) }{% endfor %}
{ action_respond_info("Loaded Z-Offset from variables.cfg file: %s" % (zoffset)) }
{% endif %}
Básicamente lo que hacemos es crear un fichero dentro del sistema para guardar nuestras propias variables /usr/data/printer_data/config/variables.cfg.
Se crea una nueva macro que sobreescribe a la de sistema llamada SET_GCODE_OFFSET que captura el valor usado durante ajuste babystepping lo aplica al sistema y lo guarda en nuestras variables comentado anteriormente.
Por último tenemos otra macro LOAD_GCODE_OFFSETS que se encarga de cargar de nuestro fichero de variables el valor Z Offset y aplicarlo al sistema.

Impresión directa desde laminadores no Creality

Una vez finalizados los pasos anteriores vamos a tener acceso a una funcionalidad que nos va a ahorrar mucho tiempo. Si bien el uso del laminador de Creality, un Cura personalizado, no esta mal en ocasiones se puede quedar corto en opciones o preferencias de uso. Por otro lado, y por defecto sin hacer root, el sistema va a estar capado para enviar nuestras impresiones únicamente desde el laminador de Creality, el Cloud de Creality o mediante un USB a la maquina. Ahora que tenemos más acceso al sistema podremos imprimir desde nuestro laminador favorito, en el siguiente ejemplo basado en OrcaSlicer que es nuestro laminador favorito tan solo tenemos que ir a la configuración de nuestra impresora a nivel de red, seleccionar en Host Type - Octo/Klipper y en Hostname, IP or URL poner la IP:puerto de nuestra K1... en nuestro caso usaremos como puerto el 4409 al tener instalado Mainsail:

Configurar cámara K1 en Mainsail/Fluidd

Teniendo en cuenta que el interfaz web de la K1 es bastante limitado en opciones una de las primeras cosas que aconsejamos, con root, es la instalación de otro interfaz con más opciones y funciones.
Una vez tenemos nuestro Mainsail, o Fluidd depende del que más te guste, podemos añadir a este la visualización de nuestra cámara. También si queremos hacer algo que nos sirva en ambos caso podemos hacerlo en Moonraker:
Mainsail
Fluidd
Moonraker
Personalmente nos gusta más Mainsail, para añadir nuestra cámara:
  • Iremos a Interface Settings, icono engranajes en la esquina superior derecha, y dentro de las opciones a WEBCAMS
  • Añadiremos una nueva cámara con las siguientes opciones:
    • Sustituiremos xxx.xxx.xxx.xxx por tu IP:
      • URL Stream: http://xxx.xxx.xxx.xxx:4409/webcam/?action=stream
      • URL Snapshot: http://xxx.xxx.xxx.xxx:4409/webcam/?action=snapshot
      • Service: MJPEG-Streamer o Adaptative MJPEG-Streamer (experimental)
En el caso que usemos Fluidd añadir la cámara es un proceso muy sencillo, simplemente tenemos que habilitarla.
Para habilitar la cámara iremos a Settings/Cameras y la habilitaremos. En el caso que no nos funcione eliminaremos la creada y crearemos una nueva con la siguiente configuración:
Editaremos nuestro moonraker.cong y añadiremos lo siguiente substituyendo las xxx.xxx.xxx.xxx por nuestra IP:
[webcam Camera]
location: printer
enabled: True
service: mjpegstreamer
target_fps: 15
target_fps_idle: 5
stream_url: http://xxx.xxx.xxx.xxx:8080/?action=stream
snapshot_url: http://xxx.xxx.xxx.xxx:8080/?action=snapshot
flip_horizontal: False
flip_vertical: False
rotation: 0
aspect_ratio: 4:3
Guardaremos y reiniciamos Klipper mediante SAVE & RESTART y automáticamente deberiamos tener la cámara habilitada.

Personalización del logo/animación de la pantalla al inicio

Aunque no nos va a mejorar ninguna función relacionada con la calidad o uso de nuestra impresora queda muy chulo personalizar esta.
El proceso es relativamente sencillo:
  • Crearemos nuestra animación utilizando cualquier herramienta que conozcamos... en nuestro caso os aconsejamos Canva porque es gratuita, potente y muy sencilla de utilizar. Creáis un proyecto de 480x800 pixeles... la exportaremos como Gif o Video
  • Una vez tengamos la animación, os aconsejamos llamarla pic.<el formato que hayáis elegido> podéis ir a un conversor de video a jpg y vamos al siguiente link donde podremos convertir, no es necesario tocar ningun ajuste tan solo que el nombre del fichero a convertir se llame pic para que las imágenes generadas sean pic_000.jpg (000 será numérico en orden de cada uno de los frames de nuestra animación). Una vez finalizado el proceso descargaremos las imágenes a nuestro ordenador
  • Ahora desde SSH y sobre nuestra K1 lanzaremos Helper Script con cd && sh ./installer.sh
  • Desde el menú seleccionaremos 3 [Customize] y 1 [Install Custom boot Display], tenemos opciones para poder restaurarlo después :)
  • Una vez aplicado el cambio desde Helper Script salimos de este y aplicamos un reboot para reiniciar nuestra impresora... si todo ha ido bien veremos la animación nueva instalada por Helper Script.
  • Ahora procederemos a sustituir la animación por la nuestra, para mayor comodidad os aconsejamos instalar SFTP, borrando los ficheros jpg en /etc/boot-display/part0/ por los creados por nosotros
Si no queréis habilitar SFTP podéis hacerlo de forma manual:
  • en nuestra interfaz web (Mainsail/Fluidd) crearemos una carpeta llamada part0 y dentro de esta subiremos todas las imágenes de nuestra animación creada anteriormente
  • borraremos todas las imágenes de la animación por defecto con rm /etc/boot-display/part0/*.jpg
  • una vez copiado y desde SSH lanzaremos el siguiente comando que copiará todas las imágenes cp /usr/data/printer_data/config/part0/pic_*.jpg /etc/boot-display/part0/
Y ya está!!! solamente tendremos que reiniciar nuestra máquina y ver nuestra obra de arte!!!

Personalización UI pantalla

El interfaz de nuestra K1 es bastante intuitivo y funcional pero carece de muchas opciones avanzadas de gestión como las que podamos encontrar en KlipperScreen
Gracias al compañero ballaswag que ha creado una nueva UI, llamada Guppy,con funciones avanzadas podemos mejorar significativamente el control desde esta en nuestra K1.
Como podéis ver en las capturas anteriores si bien el interfaz no esta tan pulido como el de Creality se cuentan con un montón de opciones avanzadas que seguro son del agrado de cualquier buen maker :).
A destacar...
  • lanzar Input Shaper para XY además de comprobar la tensión de correas y lo más cool poder ver las gráficas del test para ayudarnos a ajustar nuestra K1 de una forma sencilla
  • Acceso al nivelado de cama donde podremos ver el mapa de nuestra cama
  • Controles avanzados durante la impresión para ajustar flujo, factor de velocidad, etc...
  • Integración con Spoolman
La instalación es muy muy sencilla:
Helper Script
SSH
Como siempre nuestro mejor aliado para la K1 es nuestro Helper Script desde el cual tenemos la posibilidad de instalar, y desinstalar, facilmente este nuevo interfaz Guppy.
  • Lanzaremos el Helper Script desde SSH cd && sh ./installer.sh
  • Iremos a 3 [Customize] > 5 [Install Guppy Screen]
  • Nos solicitará confirmación y que tipo de interfaz queremos utilizar (material,zbolt) y si queremos eliminar los servicios Creality Cloud
  • Es todo!!! ya tendremos el nuevo interfaz listo!!!
En el caso que queramos desinstalarlo y volver al interfaz de Creality tan solo iremos a 3 [Customize] > 6 [Remove Guppy Screen].
También podemos instalar el interfaz Guppy desde SSH:
  • Desde nuestro cliente favorito de SSH lanzaremos:
    • Si queremos el interfaz Material Design: sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/ballaswag/guppyscreen/main/installer.sh)"
    • Si preferimos el Z-bolt: sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/ballaswag/guppyscreen/main/installer.sh)" -s zbolt
En el caso que queramos volver al de Creality lanzaremos el siguiente comando /usr/data/guppyscreen/reinstall-creality.sh

Habilitar el Buzzer/Altavoz integrado

Otra mejora que podemos realizar, y que puede ser muy útil, es habilitar el buzzer/altavoz que cuenta la electrónica de nuestra K1.
El proceso es muy sencillo gracias al Helper Script desde el cual seleccionaremos la opción 1 [Install] > 9 [Install Buzzer Support]:
Al finalizar el proceso ya dispondremos de la macro de sistema BEEP que podremos utilizar en nuestras macros como pausa, cambios de filamentos o finalización de impresión para tener una notificación sonora. Os ponemos un ejemplo del uso en la macro de final de impresión END_PRINT:
[gcode_macro END_PRINT]
gcode:
Qmode_exit
EXCLUDE_OBJECT_RESET
PRINT_PREPARE_CLEAR
M220 S100
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
TURN_OFF_HEATERS
M107 P1
M107 P2
END_PRINT_POINT
BEEP
WAIT_TEMP_START
M84
La macro que se instala no es visible desde el interfaz pero disponemos de un mp3, dentro de nuestro host en /usr/data/beep.mp3, donde podemos personalizar el tono del sonido, aquí disponemos de más información:
Este proceso hemos de volver a realizarlo cada vez que restauremos nuestra impresora a los valores de fábrica!!!

Paths de Sistema

Os incluimos la ubicación de paths en el sistema de nuestra K1:
Función
Path
Videos time-lapse (Creality)
/usr/data/creality/userdata/delay_image/video/
Videos time-lapse (Moonraker)
/usr/data/printer_data/timelapse/
Gcodes
/usr/data/printer_data/gcodes/
Configuración Klipper
/usr/data/printer_data/config/
Animación pantalla al iniciar
/etc/boot-display/

Mods

Os dejamos algunos mods interesantes para vuestras máquinas:
Mod
K1
K1 Max
Link
Podéis encontrar más en nuestra colección de Printables para Creality K1 & K1 Max!!!

Cinemática

Ya sea por resolución de problemas o simplemente para realizar modificaciones en la cinemática de nuestra máquina os facilitamos paso a paso como desmontar esta, gracias al equipo D3vil Design donde podéis encontrar mucha información y mods de nuestra K1:
  • Desmontaremos los anclajes del portón frontal:
    Anclaje portón inferior
    Anclaje portón superior
  • Cortaremos la goma foam del perfil derecho donde apoya el portón al estar cerrado, lo haremos en la parte superior donde vemos la unión entre la parte superior de la carcasa con la central, para tener acceso a los tornillos de anclaje:
  • Haremos lo mismo en la parte izquierda retirando en este caso la pieza plástica con cuidado:
  • Quitaremos los tornillos inferiores en ambos lados: