Firmware GRBL + Fresadora CNC --> Impressora 3D

Olá Pessoal,

Este tópico tem como objetivo agregar opiniões e dicas para transformar uma fresadora CNC utilizando o firmware GRBL para que faça uma fresadora CNC trabalhar como uma impressora 3D.

Alguns detalhes são de fácil compreensão, outros dependem de experiência acumulada.

O que já observei nas impressoras 3D é que além dos três eixos, X, Y, e Z, disponíveis no firmware GRBL, existe um quarto eixo para a extrusão do plástico, sendo esse um problema a ser solucionado posteriormente.

Para que a quantidade de plástico ejetado tenha a mesma espessura em todo o perímetro, deve existir uma relação entre a velocidade do movimento horizontal e a velocidade do sistema de ejeção do plástico.

Outro detalhe que merece atenção é o formato do Gcode para as impressões 3D, ou seja, como os movimentos são representados em cada linha para uma programação básica de impressão de uma peça simples, por exemplo um quadrado com altura h.

Opiniões, sugestões e críticas construtivas são bem-vindas.

 

Exibições: 26489

Responder esta

Respostas a este tópico

Estou trabalhando num projeto de Arduino sem cabeça e o protótipo já está funcionando para três eixos.
Estou utilizando um Arduino para leitura de arquivos de um cartão SD e gerenciando o envio das linhas Gcode para o Arquino com Grbl 0.8c, mantendo o buffer controlado.
Minha idéia é que utilizando dois arduinos com Grbl em cada um é possível controlar 6 eixos, sendo que três podem ser para rotação dada em graus.
Para isso é necessário entender a finalidade dos eixos de rotação A, B e C, porque para cada tipo de máquina as características podem mudar.
Fiz um código simples para separar cada linha Gcode em duas partes, uma para o Arduino com Gcode para controlar os eixos X, Y e Z e a outra para controlar o outro Arduino para controlar os eixos A, B e C.
O código segue abaixo e se os colegas puderem simplificar o código ou sugerir modificações, a ajuda será bem-vinda.

/*
Desmembramento de linhas Gcode em eixos X, Y e Z e eixos A, B e C para
expandir o firmware Grbl de 3 para 6 eixos. Versão 1.03

Código criado 07 de maio de 2013
por Milton Vilela
*/

int aa;
String isString;
String isStringABC;
int w_x;
int w_y;
int w_z;
int xyz;
int abc;
int xyz2ABC;
int numespXYZ; // número de espaços
int numespABC; // número de espaços
int w_len;
uint32_t i; //contador

void setup()
{
Serial.begin(9600);
}

void loop()
{
xyz = 0;
abc = 0;
isString = "";
isStringABC = "";
String stringTeste = String("G01 X28.5 Y13.75 Z10 A27 B35 C44 F450"); //crinado uma nova string

w_len = stringTeste.length();
Serial.println(stringTeste);

for (i=0; i<=w_len; i++) //
{
aa = stringTeste.charAt(i);
if ( (aa == 88) || (aa == 120) ) // X x
{
w_x = 1;
xyz++;
}
if ( (aa == 89) || (aa == 121) ) // Y y
{
w_y = 1;
xyz++;
}
if ( (aa == 90) || (aa == 122) ) // Z z
{
w_z = 1;
xyz++;
}
if ( (aa == 65) || (aa == 97) ) // A a
{
abc++;
xyz2ABC = 65; //(char)aa;
}
if ( (aa == 66) || (aa == 98) ) // B b
{
abc++;
xyz2ABC = 66; //(char)aa;
}
if ( (aa == 67) || (aa == 99) ) // C c
{
abc++;
xyz2ABC = 67; //(char)aa;
}
if (aa == 0x20) // espaço
{
xyz = 0;
abc = 0;
}
//-----------------------------------------------------------------------
if (xyz == 1)
{
//-----------------------------------------------------------------
if (aa == 0x20) // espaço
{
numespXYZ++;
if (numespXYZ == 1)
{
isString += (char)aa; // acumula os caracteres
}
}
else
{
isString += (char)aa; // acumula os caracteres
numespXYZ = 0;
}
}
//-----------------------------------------------------------------------
if (abc > 0)
{
if (abc == 1)
{
isStringABC += (char)xyz2ABC; // acumula os caracteres
abc++;
}
else
{
//-----------------------------------------------------------------
if (aa == 0x20) // espaço
{
numespABC++;
if (numespABC == 1)
{
isStringABC += (char)aa; // acumula os caracteres
}
}
else
{
isStringABC += (char)aa; // acumula os caracteres
numespABC = 0;
}
//-----------------------------------------------------------------
}
}

if ((xyz == 0) && (abc == 0) )
{
//-----------------------------------------------------------------
if (aa == 0x20) // espaço
{
numespXYZ++;
if (numespXYZ == 1)
{
isString += (char)aa; // acumula os caracteres
}
}
else
{
isString += (char)aa; // acumula os caracteres
numespXYZ = 0;
}
//-----------------------------------------------------------------
if (aa == 0x20) // espaço
{
numespABC++;
if (numespABC == 1)
{
isStringABC += (char)aa; // acumula os caracteres
}
}
else
{
isStringABC += (char)aa; // acumula os caracteres
numespABC = 0;
}
//-------------------------------------------------------------------
}
}
Serial.println("");
Serial.println("Gcode para Arduino com Grbl (X, Y e Z)");
Serial.println(isString);
Serial.println("");
Serial.println("Gcode para Arduino com Grbl (A, B e C)");
Serial.println(isStringABC);
while(1);
}

no caso so foi adicionar mais 1 eixo e 1 sensor de fim de curso?

Interessante,pretendo fazer isso e transformar em impressora 3D futuramente. Estou gostando de ver Milton,valew por contribuir com a comunidade. Assim que adquirir experiencia e terminar minha CNC irei postar tambem ^^.

Att,Renato

Para facilitar quem quiser testar a rotina de desmembramento de Gcodes, segue anexado o arquivo para Arduino Uno com versão 022.

Anexos

Olá Milton, eu estou construindo uma CNC, não tenho muita experiência em programação e tal, mas adoro projetos ligados a CNC e impressoras 3D. Estou seguindo esse tópico porém me surgiram umas dúvidas, que são: Eu precisaria de 2 Arduinos ou apenas 1 daria conta? (Você diz que cada um rodaria 6 eixos, então com dois eu teria 12 eixos). Como ele lê arquivos de um cartão SD, eu poderia colocar um display de LCD e nem precisaria de um computador?

Agora uma última dúvida, quatro eixos não bastariam para uma impressora 3D? Porque no seu projeto usaria 6?

Abraços e achei demais seu projeto, antes mesmo de postar eu já esdtava seguindo o tópico. Abraços e desculpa as perguntas muito noob.

Olá Marcos,

Eu também acompanho outros tópicos e um deles é o tópico Arduino + L297 + TIP 122 Stepper Motor Driver do Luís

http://labdegaragem.com/forum/topics/arduino-l297-tip-122-stepper-m...

Ele também utiliza o firmware Grbl no Arduino para os testes do drive que ele está ajustando.

O firmware Grbl é um código hexadecimal que é gravado no Arduino e uma forma de utilizá-lo é através da mesma porta usb utilizada para as gravações dos programas do Arduino.

Normalmente são utilizados softwares sendo o mais famoso o Mach3 que utiliza a porta paralela do computador para controlar os drives dos motores de passo.

A diferença entre utilizar um software como o Mach3 e um arduino com o firmware gravado é que não é necessário gastar de registro $175,00 pois a cópia para uso gratuito libera apenas 500 linhas para Gcode.

Neste link você pode fazer o download do manual em português do Mach3:

http://www.guiacnc.com.br/mach-23/manual-do-mach3-em-portugues/

Para download do software Mach3 o link é: 

http://www.machsupport.com/downloads.php

Com apenas um arduino é possível controlar 3 eixos, gravando o firmware (programa em hexadecimal) no Arduino e ligando nele 3 drives do tipo BigEasydrive vendido no Laboratório de Garagem:

http://www.labdegaragem.org/loja/index.php/36-motores-afins/big-eas...

ou ainda montar um drive como o que o Luís já testou gastando bem menos.

Para mandar os comandos Gcode para o Arduino com o Grbl gravado é necessário apenas instalar por exemplo o software gratuito gcodesender.exe que pode ser feito download pelo link: 

https://github.com/OttoHermansson/GcodeSender

Para controlar a fresadora CNC  sem necessidade de um computador a abordagem é ter um arduino com SD, teclado e LCD para ler o arquivo do cartão e enviar os Gcodes para o arduino com o Grbl que controlará até 3 drives.

Estou trabalhando para conseguir resolver alguns pontos complicados para controlar mais de 3 eixos.

Estou preparando um desenho novo para postar as ligações necessárias para para o conjunto:

Arduino + SD + teclado + LCD ---> controlando um Arduino com Grbl ---> controlando 3 motores.

Agradeço pelo interesse.

Abç,

Milton Vilela

Opa Milton, valeu pela explicação. Eu também acompanho o driver do Luís, muito interessante, eu pretendo fazer um dia, pois no momento, os drivers que eu fiz para a minha CNC são mais simples, eu fiz com os L298 como mostrado nesse site:

http://txapuzas.blogspot.com.br/2009/12/paperstepperl298n-driver-de...

O projeto no caso é esse:

http://txapuzas.blogspot.com.br/2009/12/txapu-cnc-hardware.html

É um projeto beeeeem simples, porém para começar acredito que vale a pena.

Controlar a máquina pelo LCD é bem interessante, a Makerbot se não me engano tem essa possibilidade, só que ela é muito cara, então uma alternativa gratuita seria muito legal para toda a comunidade. 

Eu já usei o Mach3 porém não me dei muito bem com ele hehehe, mas acredito que foi por causa do driver que eu usava na época, hoje eu uso o programa que é mostrado na CNC Txapuzas, ele só roda em Linux mas é bem interessante.

Bom, continuo acompanhando o projeto e boa sorte. Abraços. 

Ola Marcos,

No comeco achei uma alternativa para um driver porem esse sistema nao aceita micro-step , acabei comprando easydrivers da china mas la tambem tem da pololu.

Att,Renato

Olá Renato. Então, eu fiz esses drivers (Apesar de serem mais "rústicos" digamos assim) pois o preço do pololu (Que era o driver que eu queria usar, estavas muito alto no Brasil e como era minha primeira CNC, eu não quis gastar muito. 

Uma pergunta, você foi taxado quando seus drivers chegaram aqui no Brasil? E quanto tempo demoraram para chegar até a sua casa?

Abraços. 

fui taxado nao,chegou hoje, demora um pouco,foi 1 mes pra chegar mas valeu a pena pois paguei 12 dolares no easydriver mas eh o mesmo preco a pololu na dx.com.Dificilmente eh taxado desde que nao exagere nos pedidos. Pedi uns 4 easydriver e passou de boa.

Valeu, vou tentar, quem sabe hehehe. Abraços.

Milton segue uma dúvida, para mandar o código g para o Arduino já com o grbl pode enviar por outro programa tem esse GRBL Controller ele envia também ?

Simplificação da montagem utilizando placa padrão e 2 Garaginos, sendo um com o firmware Grbl e o outro com o programa gerenciador de Gcode.

As ligações do teclado 3x4 foram modificadas para oferecer estabilidade e precisão.

O SDcard utiliza as portas A4 e A5 

Para o próximo passo preciso treinar a criação de placas no Eagle para tornar a montagem mais compacta.

Se algum colega tiver sugestão para criação do PCB será bem-vinda.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço