Neopixel

Como personalizar y aprovechar el uso de Neopixel en Klipper

Configurando nuestro Neopixel

Para poder configurar nuestros Neopixel en Klipper es tan sencillo como añadir la configuración necesaria para nuestra electrónica/mcu en la sección neopixel de nuestro printer.cfg o include cfg que consideremos oportuno.

IMPORTANTE!!!

  • Normalmente es aconsejable usar una resistencia 300-500ohms entre el pin de SGN de nuestro controlador de neopixel y el pin de datos de nuestra tira neopixel

  • Hay que tener en cuenta que las conexiones de alimentación y datos han de seguir la dirección de la tira led tal como podéis ver en la siguiente foto

  • Es aconsejable alimentar externamente desde una fuente la tira led, asegurandote que el pin -/GND este compartido entre la tira led y la MCU que los controle

  • También es importante usar una fuente de alimentación que aguante correctamente el consumo de nuestra tira led, a modo de ejemplo para calcular lo que necesitamos en W/A podéis usar la siguiente calculadora para tener una estimación

El método más sencillo, si queremos gestionar unos pocos leds es usar un pin PWM de nuestra electrónica:

## Ambient Leds on SKR Mini E3 V3
[neopixel led_ambient]
pin: PA1 
chain_count: 15
#initial_RED: 0.0
initial_GREEN: 0.5
#initial_BLUE: 0.0

En nuestra configuración:

  • usamos el pin para indicar cual es el pin de señal usado para controlar nuestra tira de leds inteligente

  • en chain_count definiremos el número de leds que queremos usar, es importante recordar que el número que soporte la electrónica vendrá definido por la capacidad del DCDC 5V que lleve y el consumo por led de nuestra tira. Normalmente, solo aguantan unos 20 leds como máximo, si superamos o llegamos a límites de lo soportado lo ideal es alimentar los leds con un DCDC externo

  • en initial_XXXX indicaremos el color que queremos que tengan inicialmente donde XXX es el color (RED GREEN BLUE) y el número la intensidad de 0 a 1

Podemos gestionar nuestros leds desde el interfaz de Mainsail o Fluidd. En el caso de Mainsail veremos los controles dentro de Dashboard -> Miscellaneous:

Extensión para efectos

Podemos utilizar nuestros neopixel para algo más que iluminar nuestra máquina, pudiendo emitir eventos o información interesante.

Para ello vamos a usar una extensión de terceros para Klipper que permite de una forma sencilla aplicar diferentes efectos a nuestros leds podéis encontrar diferentes módulos similares, en nuestro caso usamos este por lo versátil y potente... en el caso de usar WLED como tenéis en el punto anterior no sería necesario.

Instalación LED EFFECTS

Podemos instalar de una forma sencilla la extensión desde el terminal SSH lanzando estos comandos:

cd ~
git clone https://github.com/julianschill/klipper-led_effect.git
cd klipper-led_effect
./install-led_effect.sh

También es interesante añadir lo siguiente a nuestro moonraker.conf para poder enterarnos de actualizaciones de esta extensión:

// moonraker.conf
[update_manager led_effect]
type: git_repo
path: ~/klipper-led_effect
origin: https://github.com/julianschill/klipper-led_effect.git
is_system_service: False

Configurando efectos

Disponemos de diferentes efectos que podemos aplicar.

En el propio repositorio contamos con una aplicación (Windows y Mac) con la que podemos simular estos efectos.

Podéis descargarla desde la sección Assets de las Releases del repositorio:

Controlando los efectos

Podemos controlar los efectos usando la nueva macro que nos brinda LED EFFECTS usando SET_LED_EFFECT EFFECT=xxxxx donde xxxx es el nombre del efecto que definamos y que a continuación os proponemos algunos.

Podemos activar un ejemplo usando SET_LED_EFFECT EFFECT=panel_idle y pararlo con SET_LED_EFFECT EFFECT=panel_idle STOP=1 aunque podemos usar STOP_LED_EFFECTS para parar todos los efectos que tengamos funcionando.

También es posible usar el parámetro FADETIME con el que podemos deshabilitar durante x segundos un efecto SET_LED_EFFECT EFFECT=panel_idle FADETIME=1.0 en este ejemplo lanzamos el effecto panel_idle haciendo el efecto fade durante 1 segundo.

Lo ideal es lanzar estos efectos por ejemplo en determinadas fases de nuestras macros de inicio o fin de impresion o cualquier otra que creamos oportunas.

Algunos efectos como veremos más adelante se pueden asignar directamente al inicio de la máquina o asociarlos con un estado/valor de un componente/pin de nuestro sistema

Por otro lado al momento de crear nuestros efectos tendremos diferentes parámetros interesantes:

  • en el apartado leds indicaremos neopixel:xxxxxx donde xxxxxx es el nombre o ID del neopixel que definimos en nuetro printer.cfg (o un include si lo pusimos) También podemos asignar varios leds neopixel o incluso secciones de los mismos:

// usando varias tiras leds para un efecto
leds:
    neopixel:panel_ring
    neopixel:tool_lights
    dotstar:bed_lights
// usando secciones de leds de nuestras tiras para un efecto
leds:
    neopixel:tool_lights
    neopixel:panel_ring  (1-7)
    neopixel:panel_ring  (9-16)
    dotstar:bed_lights   (1,3,5)
  • autostart: true permite que el efecto se inicie al iniciar la máquina

  • fame_rate: indica el numero de refrescos del led por segundo

  • heater: en determinados efectos podemos asociarlo con el estado/valor de un heater también podemos asociarlo con un ventilador de temperatura en ese caso lo incluiremos dentro de "" (heater: "temperature_fan myfan")

  • analog_pin: si queremos que dependa del estado/valor de un pin analógico

  • stepper: igual que los anteriores pero de un stepper

Os aconsejamos visitar la página del creador para mas información detallada:

https://github.com/julianschill/klipper-led_effect/blob/master/docs/LED_Effect.md

En especial os aconsejamos leer detenidamente la sección que hace referencia a como definir las capas de efectos.

Efecto "fade"

Básicamente hace que nuestros leds bajen/suban el brillo continuamente

[led_effect panel_idle]
autostart:              true
frame_rate:             24
leds:
    neopixel:ambient_led
layers:
    breathing  10 1 top (.5,.5,1)

Efecto "fade" en error

En caso que nuestro sistema tenga un error critico los leds mostraran un color rojo con efecto fade

[led_effect critical_error]
leds:
    neopixel:tool_lights
    neopixel:bed_lights
layers:
    strobe         1  1.5   add        (1.0,  1.0, 1.0)
    breathing      2  0     difference (0.95, 0.0, 0.0)
    static         1  0     top        (1.0,  0.0, 0.0)
autostart:                             false
frame_rate:                            24
run_on_error:                          true

Efecto barra progreso

Podremos mostrar el progreso de la impresión, en este caso pasa de un azul claro a oscuro

[led_effect progress_bar]
leds:
    neopixel:progress_lights
autostart:                          true
frame_rate:                         24
layers:
    progress  -1  0 add         ( 0, 0,   1),( 0, 0.1, 0.6)
    static     0  0 top         ( 0, 0, 0.1)

Leds de notificación en tu cabezal de impresion

Aunque inicialmente esta enfocado al uso del neopixel en un cabezal Voron Stealthburner podemos adaptarlo a nuestras necesidades.

El script de post-procesado es el siguiente:

Como añadir el script de post-procesado

SuperSlicer/PrusaSlicer:

  • Copiaremos el script stealthburner_colors.py (o el nombre que le queramos dar) a nuestro ordenador, es importante que el directorio no tenga ningún espacio

  • Nos aseguraremos de tener instalado Python (si usas Windows puedes instalarlo desde su Store de forma sencilla)

  • Añadiremos el script de post-procesado en nuestra configuración del laminador:

  • Ahora ya podremos laminar como hacemos normalmente y si todo funciona correctamente veremos que se nos abre una ventana de terminal ejecutando el script

Cura

  • Copiaremos el script stealthburner_colors.py en el directorio scripts:

    • Para Windows, %APPDATA%\cura\<CURA VERSION>\scripts

    • Para Linux, ~/.local/share/cura/<CURA VERSION>/scripts

    • Para MacOS, ~/Library/Application Support/Cura/<CURA VERSION>/scripts

  • Añadiremos el script de post-procesado en Cura

    • Menú de extensiones -> Post procesado -> Modificar GCode

    • Añadiremos Stealthburner Colors

  • Ahora ya podremos laminar como hacemos normalmente y si todo funciona correctamente veremos que se nos abre una ventana de terminal ejecutando el script

¿Como validar que el script funciono correctamente?

Podemos abrir el gcode generado con un editor de texto y buscaremos referencias SET_LED LED=stealthburner... que deberían de coincidir con el cambio del tipo de trazada.

Personalizar el script a nuestro gusto

  • usar otro neopixel para las notificaciones, en este caso deberemos de asegurarnos que en LED= usemos el nombre del neopixel que nos interese

  • cambiar el color de un trazado en concreto... en ;TYPE: encontramos el tipo de trazada y en RED=1 GREEN=0.6 BLUE=0 podemos ajustar el color que más nos guste, aunque lo ideal es dejarlo como está, ya que coincide con el preview

  • ajustar los leds que queremos usar para estas notificaciones, en este caso podemos jugar con el valor de INDEX= para decirle que led o leds queremos usar para estas notificaciones

Última actualización