Tutorial de implementação de Bed Auto Leveling (BAL)
Por Miguel D’Avila*
Esse tutorial de Bed Auto Leveling (BAL) é resultado de extensa pesquisa feita no grupo RepRapBR, com a ajuda de muitos, mas principalmente do README que o Alex Borro fez – ele é autor da implementação do BAL no Marlin – e também da tradução deste mesmo README pelo Bruno Cabral; pelo custo que representa (menos de R$ 10), considero um item mandatório em todas as RepRaps; não existe outra razão para não implementar, que não o puro masoquismo, prazer mórbido de sofrer nivelando mesa e ajustando o home z a cada impressão!
Vou descrever apenas a implementação em uma RAMPS 1.4, que é a única que fiz, porém em outras placas não deve haver muita diferença; na GEN7BR em princípio não era possível, tem um tal de BITBANG não sei o quê, que quer dizer ser possível utilizar; ainda não tenho essa informação;
Antes de mais nada, vou partir do pressuposto de que a impressora a ter o BAL implementado está funcionando perfeita e adequadamente, com todas as calibragens mecânica, eletrônica e de firmware implementadas; um pequeno deslize, contudo, é o suficiente para fazer a vaca ir para o brejo.
1. O servo motor
O servo que iremos usar é o de 9g, que pode ser adquirido no mercado “x” por menos de R$ 10 [pedimos encarecidamente aos nossos leitores que complemente noms posts abaixo os nomes dos mercado “x” que vocês conhecem, e onde encontrá-los!]; certamente o frete sairá mais caro, por isso, compre logo 2 ou 3, e negocie com o vendedor para enviar no mesmo frete; em geral, o servo vem com um flat em um código de cores padrão: marrom, vermelho e amarelo; o cabo que vem com ele é muito curto, de forma que você precisará fazer outro, maior, ou alongar o original; é recomendável comprar, em casas de eletrônica, um flat de 28 vias, de onde se pode tirar 3 com essa mesma sequência de cores, para seguir o padrão, e facilitar eventual manutenção futura.
Para conectar à RAMPS você precisará, invariavelmente, de um conector do tipo MODU de 3 vias, e crimpar na ponta do cabo maior; caso não tenha a possibilidade de conseguir o conector MODU, recomendo cortar o cabo que vem com o servo no meio, e soldar nas pontas do outro flat de 3 vias; sou inimigo das emendas, mas neste caso específico não encontrei outra opção.
Na RAMPS, você tem um conjunto de 4 conectores de 3 vias, destinados à ligação de servo-motores; vamos usar o primeiro jogo de 3 pinos, o mais próximo do botão de reset; Os conetores são marcados da seguinte forma: em amarelo, está o jogo de conectores que iremos usar para o nosso servo; em azul, está o botão de reset da RAMPS, apenas para servir de referência; em vermelho está o conetor de energia da RAMPS e do Arduino; você terá de jumpear VCC e 5V; eu usei um conetor MODU de 2 vias curto-circuitado; sem fazer esse jumper, a RAMPS não terá energia para alimentar o servo e, obviamente, a coisa toda não irá funcionar.
Pessoalmente tive muitos problemas nesta implementação por pular etapas simples, elementares, porém vitais; dessa forma, o método que irei seguir será o mais conservador possível, seguido passo-a-passo, literalmente, e testado cada a implementação; isto posto, é hora de testar o servo no sistema; claro que vamos partir do pressuposto de que, ao menos do ponto de vista eletrônico, o servo está funcionando…
O primeiro teste é de funcionamento e ligação; se você fez tudo direito, e ligou no lugar certo, ao energizar a placa, ouvirá um ruído no servo motor, característico de acionamento do eixo pois, ao ligar o servo, ele automaticamente colocará o eixo em sua posição inicial padrão, ou seja, 0º; experimente, com tudo desligado da energia – o cabo USB também deverá estar desconectado, pois também fornece alguma energia para a RAMPS – girar o eixo para uma posição qualquer, e depois ligar a fonte; o eixo deverá girar para a posição inicial; se ao ligar a fonte e conectar o cabo USB não ouvir nada, pode ter certeza de que ligou algo errado; muito provavelmente, você inverteu a posição do conector na RAMPS.
Em seguida, vamos fazer a alteração no firmware que vai informar à RAMPS que existe um servo ligado; procure, no configuration.h, ao final do código, a seguinte linha:
//#define NUM_SERVOS 4 // Servo index starts with 0 for M280 command
No meu código, está na linha 694; descomente esta linha, retirando o // do início, e altere o número de servos para 1 (o padrão é 4); logo abaixo, descomente as seguintes linhas:
//#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
Certifique-se de que fique como acima, sem o //; dessa maneira, estamos dizendo para o marlin que não temos nenhum servo nos eixos x e y, e temos um no eixo z, com índice 0; agora deixe a linha abaixo na forma inicial, também descomentada:
//#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles
Dessa forma, está definido o ângulo de acionamento da sonda como 70º e descanso como 0º; é um bom começo; o meu ficou assim mesmo, mas isso vai depender da posição em que o servo vai ser fixado no carro do extrusor; fixe um dos braços que acompanha o servo, preferencialmente o que só tem um lado, que é o que vamos usar.
Após compilar e “upar” o firmware com as alterações acima, o servo já pode ser testado no seu frontend preferido; eu uso o pronterface, pois o repetier-host não se dá muito bem com minha RAMPS com Marlin; o teste é muito simples; no lugar onde você digita os gcodes, digite M401 para acionar a sonda e M402 para voltar à posição de descanso.
Se tudo correu como deveria, você já pode partir pro abraço, e implementar o BAL na sua impressora, com 100% de chance de funcionar.
2. Fixação do servo na impressora
O servo deve ser fixado no carro do extrusor de forma tal que, quando acionada a sonda, ela fique o mais próxima possível do hotend, porém mais comprida; existem várias possibilidades; tem gente que acha uma posição boa e usa super-bonder para prender o servo; eu acho que o ideal é colocá-lo na horizontal, de forma tal que, quando acionado, ou seja, em posição de 0º, a sonda também fique na horizontal; na minha Mendel90, tive de ter muito cuidado para que a sonda não ficasse arrastando na correia do eixo x; É possível encontrar muitos suportes diferentes para fixar o servo no Thingverse; não achei nenhum que me agradasse e por isso desenhei um.
Em seguida, é necessário achar o ângulo ideal para as posições de “acionar” e “descansar” da sonda; via de regra, se fixar o servo de forma que ele fique na horizontal, os valores padrão do firmware são os ideais, mas pode ser que na sua impressora não haja espaço para colocá-lo exatamente na horizontal. Se for esse seu caso, então basta seguir o procedimento a seguir: digite o gcode M280 P0 SX, onde “X” nós experimentaremos valores até achar a posição em que a sonda fique o mais levantada possível, sem esbarrar em correia, nem em nada – nem mesmo abaixo do nível do bico; na realidade, é melhor que fique bem acima (preferencialmente na horizontal); esse será o valor de descanso da sonda; agora mude o “X” para um valor em que a sonda fique perpendicular ao vidro, ou ligeiramente inclinada, de forma tal que o acionamento do endstop seja perfeito. Reparei que quando colocava a sonda exatamente na perpendicular, a haste metálica do endstop não ficava em uma boa posição, mas isso é de cada um.
3. Habilitação do BAL no firmware
Estamos “nos finalmente”, quando tudo inevitavelmente e provavelmente vai funcionar! Precisamos achar a parte do código, no configuration.h, que trata do BAL, e descomentar a seguinte linha:
#define ENABLE_AUTO_BED_LEVELING
Eu me esqueci de fazer isso, e não sabia o porquê do meu BAL não funcionar! Agora, descomente (se já não o tiver feito) a seguinte linha:
#define AUTO_BED_LEVELING_GRID
Nesse estágio do código, você vai definir as coordenadas limite do grid de medição do plano virtual, bem como o número de pontos da matriz a serem testados; inicialmente, deixe com uma margem de 50 mm de distância da borda da mesa; depois melhoraremos isso:
#define LEFT_PROBE_BED_POSITION 50
#define RIGHT_PROBE_BED_POSITION 150
#define BACK_PROBE_BED_POSITION 150
#define FRONT_PROBE_BED_POSITION 50
Agora é hora de definirmos o número de pontos da matriz; Não é necessário medir mais de 9 pontos, ou seja, uma matriz de 3 x 3; então fica assim:
#define AUTO_BED_LEVELING_GRID_POINTS 3
Sugiro deixar inicialmente com 3 x 3; depois de ver funcionando, você pode alterar para mais ou para menos; depois de colocar um espaçador decente entre a mesa e o suporte, que não deforme (inicialmente usei de ABS), e ter certeza de que está usando uma superfície uniforme, como por exemplo um vidro de boa qualidade (porque existem vidros que têm verdadeiras ondulações na superfície), você pode colocar até mesmo uma matriz de 2 x 2, pra agilizar.
Por ora, vamos parar de mexer no firmware, para acharmos os valores de offset da sonda em relação ao bico, ou seja, o firmware tem de “saber” com exatidão, qual a distância da ponta da solda, com o endstop acionado, para a ponta do bico, nos eixos X, Y e Z.
O procedimento é muito simples:
- Cole, mais ou menos no centro da mesa, um pedaço de papel pequeno, com um pequeno ponto ou X no meio; use cola bastão da 3M, que ainda ajuda a “benzer” o vidro, bastando limpar depois, com alcool isopropílico;
- Digite o gcode M402, pra ter certeza de que a sonda está devidamente levantada;
- Com o controle manual do seu programa preferido (eu uso pronterface, na maioria das vezes), faça alterações leves de milímetro em milímetro, até o bico ficar bem próximo da marca;
- Agora, siga passos de 0.1 mm, até o bico efetivamente encostar na mesa, e suba de novo 0.1 mm, que é a altura mínima de camada que vamos trabalhar;
- Digite o gcode G92 X0 Y0 Z0, para definir o ponto atual como referência;
- Levante o bico cerca de 30 mm, para poder baixar a sonda com segurança, pois a maioria dos suportes para colocar o endstop Z no servo tem comprimento em torno de 20 mm, então é melhor ter segurança, e evitar quebrar a haste;
- Digite o gcode M401 para baixar a sonda;
- Posicione a sonda o mais precisamente possível, em cima da marca que serviu de referência para encostar o bico; quando a haste metálica do endstop encostar ou estiver na iminência de encostar na mesa, vá descendo em passos de 0.1mm, até ouvir o clique característico de acionamento do endstop; suba tudo de novo, até ouvir o “desclique”, e baixe de novo, para ter certeza de que o movimento seja interrompido após o acionamento; se tiver dúvida, vá testando o endstop com o gcode M119.
* Miguel reuniu contribuições relevantes para escrever este artigo, entre elas de Alex Borro (autor vídeo exibido no post, e Bruno Cabral).
Boa tarde, minha impressora tem o nivelamento automático, porém todas as vezes que coloco pra rodar com o G29 eu noto que parte da peça fica sem plástico na primeira camada, me levando a crer que o nivelamento não está sendo feito em um dos eixos, alguém poderia me ajudar faz um mês que implantei e não consigo usar
Boa tarde, minha impressora tem o nivelamento automático, porém todas as vezes que coloco pra rodar com o G29 eu noto que parte da peça fica sem plástico na primeira camada, me levando a crer que o nivelamento não está sendo feito em um dos eixos, alguém poderia me ajudar faz um mês que implantei e não consigo usar
Boa tarde, cara me diz uma coisa… qual a placa que tu usa, pois eu tenho uma Infitary e ela não possui nivelamento, queria comprar uma placa com nivelamento… teria como passar o nome da sua pra dar uma olhada no google. Valewww.