Instalando o firmware Klipper na impressora 3D

 

Klipper é um firmware para impressora 3D desenvolvido para praticamente qualquer dispositivo que rode Linux, normalmente tem sido muito usado com Raspberry Pi devido ao pequeno tamanho da placa, baixo custo e acesso fácil (lá fora). Mas pode ser usado até mesmo um PC mais antigo, ou pelo que vi placas como Orange Pi. O Klipper inicialmente foi desenvolvido para trabalhar junto com o OctoPrint, que é um software que roda um Web Server e amplia muito as opções de uso para impressoras que trabalham com base no Arduino rodando o conhecido firmware Marlin.Porém o OctoPrint é bem conhecido também por ser pesado e no caso de um Raspberry Pi, exigi no minimo o modelo 3 conforme citado na pagina de download ("Raspberry Pi 3B, 3B+, 4B or Zero 2 strongly recommended, Raspberry Pi Zero/Zero W not officially supported!"). Com isso surgiram outros ambientes mais leves, como o Mainsail e o Fluidd, eu optei por usar o Mainsail que é o que vou citar aqui.

Para usar o Klipper ainda é necessário ter um Arduino ou outra placa que vai continuar acionando os motores, o que o Klipper faz é todo o processamento do G-Code e além de dados de temperatura, entregando apenas os dados necessários prontos para o Arduino, aliviando assim seu processamento. A comunicação com Arduino fica via USB serial.

Como o Raspberry Pi roda ARM ou um PC roda x86/64, eles tem um poder de processamento inúmeras vezes maior que o Arduino, e com isso o ganho é imenso. Impressões mais rápidas com mesma qualidade, impressora mais silenciosa devido ao firmware trabalhar para não gerar ruído audível, controle muito melhor do fluxo do filamento, resultando também em maior qualidade da impressão e o web server rodando o que permite acessar a aplicação de qualquer browser.

Instalação:

Vou mostrar como fazer a instalação Mainsail mais o Klipper rodando em um Raspberry Pi 3 e uma placa Melzi que é bem próxima do Arduino Mega com RAMPS, este é o setup que possuo, mas entendendo o processo é facilmente instalado em outros setups.

Uma boa dica é assistir esse vídeo abaixo do Ricardo Miranda bem instrutivo de todo o processo:


Primeiro é necessário instalar o Mainsail e Klipper, no meu caso do Raspberry Pi, ele possui um instalador padrão para várias distribuições incluindo o Mainsail que pode ser baixado aqui:

https://www.raspberrypi.com/software/

Em um PC baixe e abra o instalador, escolha em (choose OS) Other Specific-purpose OS / 3D Printing / Mainsail OS 32-bits e faça a instalação no cartão SD. Habilite e configure o SSH, escolha uma senha de usuário, escolher também um nome para o host name, essas opções aparecem ao clicar na engrenagem.






Para instalar o Mainsail em outros hardwares e sistemas Linux siga o Kiauh ou manualmente:

https://docs.mainsail.xyz/setup/getting-started/kiauh

https://github.com/dw-0/kiauh

https://docs.mainsail.xyz/setup/getting-started/manual-setup

Configuração:

É aconselhável buscar e salvar em um .txt as configurações atuais da impressora no Arduino com o comando m503, no meu caso usei o Pronterface para executar o comando.

>>> M503
SENDING:M503
echo:Steps per unit:
echo:  M92 X80.303 Y80.001 Z2572.000 E616.073
echo:Maximum feedrates (mm/s):
echo:  M203 X300.000 Y300.000 Z3.000 E45.000
echo:Maximum Acceleration (mm/s2):
echo:  M201 X800 Y800 Z30 E250
echo:Acceleration: S=acceleration, T=retract acceleration
echo:  M204 S1000.000 T1000.000
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s),  Z=maximum Z jerk (mm/s), K=advance_k
echo:  M205 S0.000 T0.000 B20000 X15.000 Z0.400 E15.000
echo:  M206 X0.000 Y0.000 Z0.000
echo:  M208 X140.000 Y185.000 Z80.000
echo:PID settings:
echo:   M301 P12.000 I2.200 D80.000 W125
echo:Thermistor settings: M304 Hh Bb Rr Tt, H0=Bed, H1..n=nozzle, b=thermistor beta value, r=series resistor, t=thermistor resistance as 25C
echo: M304 H0
 B3850 R10000 T100000 M304 H1
 B3950 R10000 T94000
 FPU Enabled no

Após colocar o cartão com a instalação, pluge o cabo USB entre o Raspberry Pi e o Arduino da impressora e ligue o Raspberry Pi, aguarde um tempo (1 min ou um pouco mais) para o sistema carregar e por um browser de um PC acesse o host name que foi colocado na instalação ou tente encontrar o IP dele pelo roteador que fornece sua rede. No meu caso usei mainsail como host, portanto ficou:

http://mainsail.local/ (não tem https)

O mainsail não libera saída de vídeo HDMI, a única forma de acesso é pelo browser ou terminal via SSH.

Após acessar vá em Machine no menu esquerdo e faça as atualizações a direita primeiro. 


O Mainsail vai continuar indicando erro por não conseguir conectar ao Arduino, para isso será preciso regravar o firmware do Arduino pelo Klipper, não pelo Mainsail.


O acesso ao Klipper é via ssh onde não vou descrever detalhes ssh por ter vários tutoriais sobre isso na internet. Com acesso ssh concedido, vá na pasta klipper:

cd klipper

e digite:

make menuconfig
Em "Micro-controller Architecture (Atmega AVR)" escolha a placa que sua impressora usa, para Arduino será "Atmega AVR", em "Processor model" confira se está de acordo com o seu Arduino, e a opção "Enable extra low level configuration options" habilita mais detalhes de configuração.


Após configurado, aperte "Q" para sair e "Y" para salvar as configurações.

Para compilar o firmware execute:

make

Após compilado é hora de gravar o firmware no Arduino, execute o comando para saber qual a serial está sendo usada:

ls /dev/serial/by-id/*

Será retornado algo como abaixo:

pi@mainsail:~/klipper $ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9KFR55H-if00-port0

Com o valor da serial execute a sequencia dos três comandos abaixo, lembrando de colocar a serial correta:

sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9KFR55H-if00-port0
sudo service klipper start

Para meu caso que uso a placa Melzi, o comando make flash não funciona e é necessário fazer a gravação com o comando, também colocando a serial correta:

avrdude -p atmega1284p -c arduino -b 57600 -P /dev/ttyUSB0 -U out/klipper.elf.hex

Após gravado o firmware vá no Mainsail novamente e em Machine, Config Files, no menu dropdown selecione "config_exemples" e procure o arquivo de acordo com sua placa Arduino, para Arduino RAMPS, será "generic-ramps.cfg", para minha Melzi "generic-melzi.cfg", baixe esse arquivo.



Volte no menu dropdown, selecione novamente Config e suba o arquivo .cfg baixado, renomeie ele para "printer.cfg" e clique em "FIRMWARE RESTART". 

Edite o arquivo printer.cfg e na linha onde tem "serial" dentro de [MCU] coloque o serial que encontrou para gravar o firmware anteriormente, como abaixo:

[mcu]
serial: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9KFR55H-if00-port0

Clique em "SAVE & RESTART" e agora o Mainsail tem que constar como conectado, porém indo em Dashboard ainda vai retornar alguns erros de arquivos de configuração.


Volte o arquivo "printer.cfg", edite ele, abaixo das linhas comentadas coloque:

[include mainsail.cfg]

Clique em "SAVE & RESTART" e a partir daqui o Mainsail tem que conectar sem nenhum erro.

Mais detalhes dessas configurações podem ser encontradas nos dois links abaixo:

https://www.klipper3d.org/Installation.html

https://docs.mainsail.xyz/setup/configuration

Dessa forma a impressora já vai funcionar e aceitar comandos, porém será necessário fazer as configurações corretas de fim de curso, passos por unidades (steps per unit), direção dos eixos, etc. Vou entrar nesses detalhes em um outro post, mas todas essas configurações são feitas no arquivo printer.cfg com a ajuda do arquivo salvo anteriormente com o comando M503.

Todas essas configurações estão detalhadas na documentação:

https://www.klipper3d.org/Config_Reference.html

Comentários