Uma parte importante da configuração da impressora é a alteração e instalação do firmware. Antes de tudo, vou ressaltar que esse firmware nada mais é do que um código arduino com um monte de arquivos C++ (*.cpp e *.h).
O firmware que estamos usando é o Marlin. Esse firmware pode ser encontrado neste link.
Em geral, a calibração da impressora requer que você defina os parâmetros da
impressora, ou seja, o tamanho da mesa, o tipo de motor, como é feita a
transmissão mecânica em cada um dos eixos, etc. Essa definição é feita fazendo
alterações em um único arquivo do firmware chamado Configuration.h
Nesse arquivo você vai encontrar uma série de variáveis que você pode alterar de acordo com a impressora. Após todas as alterações necessárias, basta fazer o upload para o arduino.
Essas variáveis estão todas em firmware/Configuration.h
. Os valores listados
a seguir foram os que sofreram alteração a partir do firmware genérico do Marlin
baixado do link citado acima. Existem muitas outras opções que foram deixadas
conforme já estavam.
#define SERIAL_PORT 0
#define BAUDRATE 115200
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif
No arquivo firmware/boards.h
tem uma lista de todas as placas suportadas pelo
firmware Marlin. A nossa é a de número 43 que é o valor da MACRO BOARD_RAMPS_14_EFB
.
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
os endstops são os sensores de parada. Atualmente a impressora possui apenas 4
no total. Todavia, no momento apenas 3 estão sendo usados que são respectivos
aos eixos X,Y e Z. Eles servem para indicar a coordenada cartesiana 0
de cada
eixo. Tendo em vista que essa impressora tem os limites de X:[0,200], Y:[0,200]
e Z:[0,200] dados em milímetros, seria interessante instalar mais 3 endstops e
configurá-los para que as coordenadas X200 Y200 e Z200
também sejam
identificadas. Quando estamos fazendo a calibração, é muito fácil mover os
motores para o lado errado de forma não intensional.
Também existe o endstop para fazer o nivelamento automático da mesa. Todavia ainda não conseguimos configurar essa funcionalidade.
Em resumo, o estado atual da impressora é que ela identifica apenas as coordenadas
(0,0,0)
que são conhecidas como home (x,y,z)
.
// Travel limits after homing (units are in mm)
#define X_MIN_POS 0
#define Y_MIN_POS -10
#define Z_MIN_POS 0
#define X_MAX_POS 198
#define Y_MAX_POS 201
#define Z_MAX_POS 196
esses valores foram obtidos com a ajuda do pessoal do Fablab. Todavia, eu não sei explicar como eles chegaram neles. Aparentemente esses valores são aproximações dadas com alguma folga para evitar que os motores ultrapassem os limites físicos da impressora.
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,527.667} // default steps per unit for Ultimaker
#define DEFAULT_MAX_FEEDRATE {150, 150, 2, 50} // (mm/sec)
#define DEFAULT_MAX_ACCELERATION {1000,1000,5,500} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
#define DEFAULT_ACCELERATION 500 // X, Y, Z and E acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION 500 // E acceleration in mm/s^2 for retracts
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
#define DEFAULT_XYJERK 20.0 // (mm/sec)
#define DEFAULT_ZJERK 0.4 // (mm/sec)
#define DEFAULT_EJERK 5.0 // (mm/sec)
Esses valores correspondem às configurações de movimentação padrões da impressora. A primeira parte são referentes ao seguinte:
-
DEFAULT_AXIS_STEPS_PER_UNIT
: Número de passos(neste caso micropassos) dos motores nos eixos X,Y,Z e E. Esses valores foram obtidos através de fórmulas que envolvem vários parâmetros como: Número de passos por revolução, tipo de correias e barras roscadas, etc. Apenas para citar alguns! -
DEFAULT_MAX_FEEDRATE
: feedrate nesse caso significa velocidade em mm/seg
quanto as outras configurações ainda não sabemos explicar os valores. Não lembro se elas já vieram do firmware original do Marlin ou se foram configuradas por outra pessoa. Esses detalhes ainda precisam ser visto durante a calibração da impressora
#define LCD_LANGUAGE pt-br
#define ULTRA_LCD // Character based
#define SDSUPPORT
#define REVERSE_MENU_DIRECTION
Quanto a essas configurações:
LCD_LANGUAGE
: Português BrasilULTRA_LCD
: é o tipo de display da ImpressoraSDSUPPORT
: habilita suporte para ler do cartãoREVERSE_MENU_DIRECTION
: sem isso fica estranho controlar pelo display LCD
Uma vez que as alterações foram feitas, chegou a hora de fazer o upload do firmware para o Arduino da impressora. Esse procedimento é tão fácil quanto fazer o upload do blink led. Existem duas maneiras: Pela IDE do Arduino e pela linha de comando.
Além disso, o firmware só vai conseguir ser compilado corretamente se você
instalar a biblioteca "LiquidCrystal" pela IDE do Arduino. Se o seu arduino
estiver instalado em Inglês, é só ir em Sketch->Include Library->Manage Libraries...
. Dai vai abrir uma janela onde você pode pesquisar por "liquid"
por exemplo. Depois que você abrar, clica em cima dela e depois em install
. Se
ainda assim você obter erros de compilação o jeito vai ser fazer depuração. Leia
qual é o erro. Se ele reclamar de que não reconhece o include "alguma coisa" vá
de novo em Manage Libraries e pesquise por esse alguma coisa e instale a
biblioteca necessária. Se der erro de sintax possivelmente tem alguma coisa
errada no código do firmware.
- Abra a IDE do arduino
- Abra o arquivo que está em
firmware/Marlin.ino
- Click no botão upload.
- Só isso!
A IDE do Arduino possui uma interface pela linha de comando.
- Entre no diretório
firmware
- Dai é só executar o comando
arduino --upload Marlin.ino
- Só isso!
Dentro do diretório firmware
tem um Makefile
com o comando acima. Se você
tiver o make instalado é só fazer o seguinte:
- Entre no diretório
firmware
- Execute
make upload
- Pronto!
É claro que em todos os casos, você deve ter o Arduino conectado pela USB do seu computador.
-
Tentar fazer a configuração a partir do zero: Baixar o firmware do Marlin no link dado e tentar entender e refazer todas as opções obtendo os dados precisos para esta impressora. Ainda existe muita incerteza sobre alguns valores.
-
Experimentar as opções em
Configuration.h
uma a uma afim de melhor a precisão. Essa é uma das partes da calibração que será descrita a seguir. -
Configurar o
AUTO_BED_LEVELING_FEATURE
emConfiguration.h
. Essa função é importante para fazer peças que exigem uma precisão maior. Isso seria no caso mais um refinamento do que calibração.
Host softwares são programas que podem ser instalados no computador e que dão uma interface com a sua impressora atravez da comunicação USB com o Arduino. Dessa forma, você pode executar vários comandos da impressora através desses programas.
Atualmente estamos usando o Pronterface pois foi o único que está rodando dentro dos conformes no Línux. Todavia, ele só foi testado no Arch Línux de forma que ainda não sabemos o comportamento em outros sistemas operacionais como o Windows e o Ubuntu por exemplo.
A instalação no Arch Linux pode ser feita pelo pacote do AUR: printrun-git
.
Esse programa é escrito em python e conta com duas interfaces, uma gráfica e a outra pela linha de comando.