Manual

do

Maker

.

com

Como fazer uma CNC com drive de DVD velho

Como fazer uma CNC com drive de DVD velho

Com o tanto de sucata de computador que tem por aí, você vai encontrar fácil (e barato) 2 gravadores de DVD velhos e de quebra estará ajudando o planeta com sua reciclagem. E o retorno é muito gratificante, um brinquedo nerd pra levar na mão pra qualquer evento!

De antemão, agradeço fortemente à U.T.I do Computador por fornecer os drives para a produção dessa CNC. Fazendo um "jabazinho", eles tem laboratório próprio e uma bela loja às margens da Rodovia Anchieta, 1275. Desenvolvem software, fazem assistência a eletrônicos e mais um monte de brincadeiras. Se você é de São Paulo, capital, recomendo a loja. Se você gosta de falar no telefone ou no whatsapp, (11) 98333-2451 - ou estilo Gran Bell, (11) 2856-4201. Se preferir email, contato@utidocomputador.com.br. Seguindo.

CNC com drive de DVD

Isso não é nenhuma novidade, bem que gostaria de ser o criador da ideia, mas estou apenas reproduzindo algo que você já encontra em videos no YouTube. Esse modelo que estou fazendo é baseado no projeto da ChannelCreative (foi o que lí no video). Achei o mais legal de todos, mas não é exatamente um tutorial, pois não dispõe das medidas, biblioteca e como o video é DIY, não tem voz para explicar alguns detalhes importantes.

Qualquer drive de DVD serve?

Infelizmente não. Os drives mais novos são uma porcaria, uma das barras lisas foi substituida por uma peça de plástico; o drive fica mais barato, porém mais ordinário e já complica pra fazer a CNC (claro que não criaram o drive pensando em nerds reaproveitando peças, mas anyway).

Alguns motores tem um fio minúsculo, mais fino que um fio de cabelo nas saídas das bobinas e pra fazer solda é quase impossível. Alguns tem os terminadores mais sólidos, mas muito delicado.

Drive ideal

O drive ideal é o que possui 2 barrinhas de aço. Se você desmontar e for desse modelo, deu sorte. Eu também preferiria que o motor tivesse os 4 fios alinhados, é terrível soldar esse tipo de alinhamento, apesar de ter feito de primeira. Se você não tem muita prática com ferro de solda, tome bastante cuidado, pois a parte plástica dessas conexões do motor é muito sensível. E o problema pode ser maior se você for utilizar um ferro de solda comum invés de uma estação de solda.

Wiring do motor

Outro detalhe é que cada drive tem uma mecânica diferente e inclusive os pinos do motor podem ser alinhados em um, distribuidos em formação de quadrado em outros. Dos 3 drives que peguei, 2 puderam ser aproveitados. Em relação ao wiring, não teve segredo, mesmo não sendo pinos alinhados. O que fiz foi seguir as trilhas do flat cable para colocá-los em ordem. Se seu drive for desse jeito, sorte sua:

wiring_motor-179x300.webp

No primeiro teste do motor tive um percalço, mas foi relacionado ao shield CNC. Então como fiquei na dúvida dos pares do motor, resolvi fazer o teste para confirmar. Primeiro, tenha em mente que o motor bipolar tem duas bobinas, logo, dois pares de fios. Simplesmente identifique os pares colocando o multimetro em Ohms e teste para ver se gera alguma resistência. Se for par, algum valor aparecerá no multimetro.

coil-300x101.webp

Agora em relação à solda, tem que ser muito ninja. Eu nunca fiz uma solda tão pequena e por sorte tenho uma estação de solda com a ponta agulha. Mas não tenho uma lupa de bancada, então fiz a solda com meus olhos de águia, depois conferí com uma lupa de mão. Mas ainda não estava seguro, então resolvi olhar no microscópio USB. Apesar de parecer horrível, está uma obra de arte pra quem fez às cegas:

solda_motor-300x244.webp

Não sei se dá pra ter uma noção do quão pequeno é, mas você precisará de bons olhos e mãos cirúrgicas. Depois de soldar, coloquei uma cola quente pra garantir que os fios não fiquem chacoalhando e venham a quebrar a solda.

solda_no_motor_vg-300x225.webp

Montagem da "CNC de bolso"

Claro que é uma hipérbole, mas dá pra levar na mão sem desconforto algum. E o mais legal desse modelo é que você não coloca o papel sobre ela; você coloca a folha sob ela! Isso permite desenhar em qualquer superfície lisa que a caneta consiga pigmentar. Vamos começar o processo.

Desmontar o drive de DVD para o eixo Y

Eu realmente não faço video desse tipo de coisa, desmontar é muito mais fácil do que arrumar, tanto que provavelmente todos nós fizemos muito disso na infância. Desmonte o drive até que só sobre isso:

cnc-corpo-300x225.webp

Não adianta olhar muito, provavelmente os drives que você for utilizar tem outro mecanismo, mas basta que você chegue a esse ponto, deixando a parte central que é movida pela barra roscada e as duas barras laterais. Essa é a base que moverá o eixo Y.

Desmontar o segundo drive de DVD para o eixo X

Esse vai dar um pouquinho mais de trabalho. Dele, utilizamos apenas o motor, os 2 eixos e as canaletas por onde o laser corre. O problema é que essa parte central é sólida, então é necessário cortar. Acredito que dê pra fazer com um arco de serra, mas a peça é pequena e delicada. Eu fiz todos os cortes com uma micro-retífica. Você "deve" cortar o mais alinhado possível, porque depois será necessário colar essas partes juntas de forma a formar uma paralela estreita, como na imagem a seguir:

bandeja_eixo_X_ok-300x183.webp

Bandeja

A bandeja é a parte que se move para mudar de linha. Apesar de ela ser movida pelo eixo Y, o eixo X será preso sobre ela. Se quiser facilitar as coisas, vá a uma papelaria boa e compre papel Paraná. Ele é leve e forte o suficiente para servir de bandeja. Eu particularmente preferi cortar a caixa do leitor de DVD, que é uma boa lata e no final não teria outro propósito. Assim, fazemos o máximo de aproveitamento das peças.

Inicialmente tive que supor algumas medidas para iniciar o projeto e posteriormente consegui chegar a outras medidas através do programa de CAD que utilizo (QCad). Assistindo ao video, fui rascunhando:

bandeja-rascunho.webp

Então levei essas medidas ao QCad para resolver as medidas que faltavam:

cnc-bandeja-medidas-300x298.webp

Cheguei muito próximo do ideal. A minha CNC ficou um pouco mais curta  atrás, mas eu corrigi posteriormente no CAD, então você pode baixar o arquivo, o QCad, imprimir e colar sobre o material que irá recortar.

cnc-gabarito-300x225.webp

Suporte da barra roscada do eixo X

Eu não coloquei os furos porque eles pode variar de mecanismo para mecanismo, mas o comprimento da barra roscada é sempre o mesmo, então após colar as bordas do papel sobre a chapa, posicione o motor e marque os furos. Faça os furos, corte o retângulo correspondente ao motor. Para nivelar (porque o lado do motor é um pouco mais baixo do que o suporte da barra roscada), utilizei 2 palitos de sorvete grudados. Grudei os palitos sobre a plataforma e então grudei o suporte da barra roscada sobre os palitos. Fiz um furo extra do outro lado e o resultado foi esse:

bandeja-barra_roscada-300x225.webp

Ah, quanto ao recorte da chapa, também fiz com a micro-retífica a partir dessa tampa do drive de DVD:

cnc-tampa_do_drive-225x300.webp

Eu grudei o gabarito sobre a tampa, então cuidadosamente fiz o recorte. Na imagem mais acima você vê os parafusos, que removi posteriormente porque a base que toca a barra roscada também estava tocando a porca. Tem alguns drives de DVD que esse suporta que toca a barra roscada passa por cima dela e nesse caso os parafusos poderiam permanecer. De qualquer modo, essa mini CNC não faz esforço algum, somente a super cola já resolve. Se quiser dar um pouco mais de resistência à cola, jogue um pouco de bicarbonato de sódio na peça com a cola já distribuida, mas sem exageros.

Suporte das barras lisas do eixo X

Repare muito bem nas partes que serão necessárias. Elas devem ser cortadas com o máximo de cuidado para dar um bom alinhamento, senão já era sua CNC. E lembrando, essa peça eu dei a sorte de ser plástica, mas a base que eu mostrei lá em cima tem o corpo de metal, que é terrível pra cortar. Torça para seu drive ter "essa" peça em plástico.

cnc_suporte_barras_lisas_x-300x134.webp

Após ter as partes em mãos, o resultado deve ser algo assim:

juntas_do_eixo-300x225.webp

Outra coisa que preciso citar é que a borda restante à frente do eixo X pode não comportar esse conjunto mecânico. Não se preocupe, pois os eixos deverão estar sobre um calço também e isso será feito com palito de sorvete. Não vai ficar muito bonito o excesso para fora da bandeja, mas se você puder preparar as peças antes de fazer o recorte, poderá adicionar o tanto que faltar para um alinhamento perfeito. Não adianta também eu adicionar mais material no desenho porque cada drive terá uma canaleta maior ou menor.

Controle do eixo Z

Esqueça as outras versões do programa se você pretende utilizar servo motor e siga minha dica aqui.

O Eixo Z nessa mini CNC é feito com um servo motor. Desse modo, o controle é bem mais simples e a parte mecânica quase não dá trabalho. Eu nunca vi um video tão safado quanto o que me baseei para fazer esse artigo. Parecia tudo lindo e direto, mas absolutamente nada funcionou seguindo o video mudo com musiquinha de fundo. No video o cara mostrou uma fonte de 5V@1.5A, sendo que não funciona de forma alguma. Ele conectou o servo ao pino Z+ e então mostrou tudo funcionando magicamente. Mas não existe suporte a servo (ou pelo menos não existia) nativo no GRBL. Então após um monte de pesquisa, achei o video do "Eletrônica Hoje", onde o cara disponibiliza uma modificação que ele fez para suportar servo (não sei se ele que modificou porque vi outros videos da mesma versão e em outros idiomas, mas ele tem seus méritos de qualquer modo) - e utillizando justamente o pino Z+. Sugiro que veja o video, ele dá ótimas dicas para quem usa Windows e ele é muito claro em suas explicações. Pegue a biblioteca dele e, antes de subir no Arduino, troque a linha 152 do arquivo report.c para a linha original, senão o bCNC não vai conseguir se conectar de forma alguma. Substitua por essa linha:

printPgmString(PSTR("\r\nGrbl " GRBL_VERSION " ['$' for help]\r\n"));

A conexão passará a ser 115200 com essa versão do GRBL modificada para servo motor.

Conectando o servo motor

No conector do servo (estou usando um SG90, mas pode ser qualquer um de 5V) tem uma pequena palheta segurando o conector dos pinos. Levante-a com um estilete ou uma faca, então tire apenas o fio digital para fora dos conjunto (não é "cortar", é apenas desconectá-lo do conjunto). Depois, coloque-o em Z+ e conecte VCC e GND ao 5V e GND conforme a imagem:

20170924_203748-300x222.webp

A mecânica do eixo Z

Agora a parte mecânica do eixo Z. prenda o servo motor com cola quente (ou como desejar). A posição do servo motor deve ser  a seguinte; com M5 a posição mantém a caneta para cima. Com o comando M3 s50 o braço do servo motor deve descer, então a caneta poderá tocar a folha.

Trajeto da caneta

Eu coloquei a caneta em um tubinho que pode ser feito inclusive com folha de  sulfite. Pegue a caneta escolhida, enrole exatamente 1 volta de fita adesiva no diâmetro da caneta. Depois, corte uma tira de sulfite ou um material plástico, como aqueles separados de caderno universitário e enrole-o sobre a região que você colocou durex. Pode fazer umas 3 voltas se quiser, não importa. Então coloque uma fita adesiva para manter o tubo enrolado bem justinho (não "apertadão"). Daí remova o tubo recém criado puxando-o para baixo. Deve ser um pouquinho difícil tirá-lo, mas tenha paciência. Feito isso, remova o durex e experimente o tubo recém criado, que deve permitir que a caneta se desloque livremente na vertical, mas não deve ter folga para que não ocorram deslizamentos angulares da ponta. Eu tive diversos problemas com isso porque me preocupei primariamente com o peso que poderia ter essa caneta e no final tive que fazer um conjunto de gambiarras de dar inveja no Macgaiver.

Claro que o intuito era imprimir o logo do site, mas o desenho ficou grande, entre outros percalços e como eu já estava morrendo de pressa (vários projetos a serem entregues), resolvi fazer só o teste de funcionamento, imprimindo 2 retângulos, um dentro do outro, para ver se o alinhamento estava bom. Ainda não está ideal, ou seja, é fundamental trocar o sistema da caneta, mas deu pra mostrar o funcionamento da CNC e do script que fiz para converter o g-code para servo motor.

cnc_dvd_destaque-300x225.webp

CNC shield com Arduino Nano

Para controlar esse brinquedo, tentei utilizar esse CNC shield com esses controladores A4988. Esse shield é extremamente barato e na mesma proporção, ordinário.

cnc_final-300x225.webp

Esse controlador (A4988) é mais preciso que o EasyDriver, podendo controlar até 1/16 avos de passo contra 1/8 do EasyDriver. O próprio shield deveria auxiliar nesse controle, porque abaixo de cada um dos controladores estão dispostos 3 slots para jumpers e a combinação  deles te dá a velocidade final. No EasyDriver temos MS1 e MS2. No A4988 temos MS1, MS2 e MS3. Se estiver procurando um tutorial para o EasyDriver, recomendo esse artigo. Também, se não leu sobre a impressora matricial que fiz com ele, recomendo esse outro artigo.

Bem, utilizando um shield CNC com essa controladora, não precisamos nos preocupar com GPIO para esse controle, no final precisaremos apenas de alguns pinos por driver e com isso o Arduino UNO é mais que o suficiente.

Vi recomendações para entrar com 8V e 12V de mínima para alimentação dos motores, mas o datasheet não fala nada disso, apenas a máxima de 32V. Coloquei uma fonte de 5V@2A para os motores, que são motores de 5V, o eixo X funcionou bem, o eixo Y não funcionou. Passei muitos dias me debatendo com isso até que o Ewerton "Sibemol" (que estava fazendo o projeto em paralelo) falou que estava usando uma fonte de 12V. Como queimei um Nano rapidinho com a fonte de 12V no shield para Nano (não era pra ter acontecido, mas acompanhe a leitura), descartei a possibilidade de utilizar essa tensão e acabei ficando parado no mesmo lugar, até que eu já estava desistindo do projeto.

Para prender o CNC shield sobre a parte superior, usei bastante cola quente de modo a criar uma cama que isolasse o fundo da placa CNC da chapa do eixo X. Depois, coloquei o CNC shield suavemente sobre a cola, sem afundá-lo. Coloquei os conectores para as laterais porque senão um ficaria de frente com o motor do eixo X e não seria nada bom pra manipular. O cabo USB que vai conectado ao Arduino foi descascado de modo a não gerar peso nem resistência. Daí surgiu mais um problema, que relato mais adiante.

Primeiro teste do motor

Ao terminar a solda do primeiro motor, a conexão precisou ser testada. Um pequeno código para mover o eixo Y foi implementado, assim pude comprovar o funcionamento dos motores. Bobagem, de fato. Subindo o GRBL no Arduino e abrindo o bCNC, já é possível testar o funcionamento do motor imediatamente, sem digitar 1 linha de código sequer.

FAQ

Tive que escrever uma sessão a respeito, porque não foi fácil passar por esses problemas. Primeiro, já vou adiantar: Não compre o CNC shield para Arduino Nano!

Como faço pra parar de queimar meus Arduino nesse shield para Nano?

Arrebentou o diodo dos dois Arduino Nano. Nunca queimei uma MCU na vida, foi um espanto pra mim,  percebi algo que considero um erro de projeto; ligue primeiro a alimentação dos motores, depois o cabo USB. Não ligue o Arduino primeiro. Infelizmente ele chupa energia do Arduino e obviamente o Arduino não tem tensão e corrente o suficiente para alimentar motores de passo. E os problemas com esse shield não acabam por aqui.

Porque o movimento está espelhado?

Inverta os fios das bobinas na conexão com o shield. Se você encaixar na ordem certa, o motor rodará invertido nesse CNC shield para Arduino Nano. Por isso, pegue o primeiro par e inverta com o segundo par, se você já cometeu o erro de comprá-la.

Um canário canta, mas o motor não se move. E agora?

Ajuste o trimpot de corrente se o motor estiver "gemendo" invés de se mover. Garanta uma fonte de 12V@1.5A no mínimo. o trimpot tem menos de 360 graus de resolução, então não adianta usar uma parafusadeira porque se não der conta, o problema pode ser outro. Por exemplo, os fios das bobinas não estão com os pares certos. Veja mais acima como identificar os pares, caso tenha dúvidas.

Ainda em relação à tensão e corrente; realmente prefira uma fonte 12V que fique entre 1.5A ou no máximo, um pouco mais. Estou utilizando uma fonte chaveada 12V@20A porque a 12V pequena que eu tinha era de 1A e ela não conseguiu trabalhar os motores após ligar o servo motor.

Nesse ponto tive diversos problemas. Experimentei diversas fontes, até chegar ao ponto de colocar uma fonte chaveada de 24V e baixar a tensão com uma fonte step down pra garantir que não era falta de corrente. Não resolveu. Mudei o parâmetro $3 para 200, daí ocasionalmente o motor do eixo Y se movia. E algumas vezes, se movia na direção correta. Por algum motivo, parece que esse shield (para Nano) não consegue 'drivar' o pino direction.

Não consigo mudar o microstep. Que cor de jumper usar?

E não consegue mesmo. Os pinos para jumper deveriam levar a conexão ao VCC, mas está em GND e não causam nenhum efeito, então, com ou sem jumper, não tem funcionalidade.

Esse shield tem mais problemas além dos relatados?

Não quero colocar minha opinião pessoal com muita ênfase no artigo, mas sugiro que dê uma olhada nesses comentários.

Qual a melhor solução, já que esse shield é um desastre?

Você pode optar por uma RAMPS 1.4, mas para esse projeto é viável utilizar o CNC shield para Arduino UNO.

Então, esse shield existe por que se não funciona?

Olha, eu não posso dizer que não funciona, não sou especialista em circuito, nunca havia feito uma CNC, mas fiz a impressora matricial com EasyDriver. Já fiz vários projetos com circuitos montados e nunca consegui queimar nada. Pode ser que funcione, pode ser que funcione espetacularmente, mas comigo aconteceu tudo isso, então não vou te recomendar algo que só gerou problemas.

Algo sobre GRBL

Existe um padrão, mas cada um faz suas implementações sobre o protocolo, por isso cada firmware vai trabalhar de um jeito. Coloquei a versão GRBL 0.8, que era a supostamente 'oficial' para esse CNC shield, mas comportamentos anômalos ocorreram. Coloquei a versão mais atual e nessa consegui mudar o $3, porém a cada momento ele gravava um valor diferente. Eu coloquei 300us e ele gravou 184. Essa é uma variável de 8 bits, então o valor máximo da máscara é de 256 (para zerar), não entendi porque o valor acabou se tornando 184. Não sei se precisa ser um múltiplo especifico, pode até ser, mas juntando todos os problemas desse CNC shield, passei a considerar isso como mais um. Agora estou com a versão 0.8 mas tenho quase certeza que a versão mais atual funcionará sem problemas. Só que agora vou com a versão que está.

Software para CNC

Se você estiver utilizando servo motor, siga a dica descrita no controle do eixo Z e ignore essa parte abaixo. Experimentei primeiramente o o GRBL, que segue os padrões definidos pelo LinuxCNC, mas não funcionou de primeira. Se seu shield CNC for diferente, pode ser fundamental experimentá-lo. Faça o clone e copie-o para o diretório de bibliotecas do Arduino:

Em sua última versão, a comunicação serial está sendo feita em 115200. Nas versões anteriores à 0.9, a comunicação ocorre em 9600kbps.

Sendo a mesma CNC shield que tive a infelicidade de experimentar, pegue o firmware nesse link. Eu não gosto de fornecer links não oficiais, mas eu achei essa lib por acaso em algum link logo no começo de minhas pesquisas e sequer o havia utilizado até perceber que eu estava com problemas. Só que não tem um link oficial para esse firmware, procurei aos montes e nem o link de onde o baixei eu achei mais, portanto, preserve essa "mosca branca". A conexão serial nessa lib acontece em 9600. Pegue-a aqui.

CNC shield com Arduino UNO

Esse "é o cara". Alguns talvez não vejam como benéfico, mas prefiro bornes invés de jack para entrar com a alimentação. Mas como não tenho uma fonte com fio cortado, preferi utilizar uma fonte chaveada 5V@30A.  Não adianta tentar entrar com tensão menor que 8V, não importa a corrente.

A versão utilizada nesse artigo é a v3.00, tem também a versão v3.10, compatível com a GRBL v0.9+. Mas não se esqueça que para usar o servo motor devemos colocar a biblioteca modificada, descrita no controle do eixo Z, citada mais acima.

O documento (citado em outra parte do artigo) diz para colocar um jumper no pino EN/GND. Eu não coloquei e está funcionando bem.

A tensão especificada no shield está com entrada mínima de 12V à 36V, mas atente-se que o A4988 só vai até 32V. O driver DRV8825 vai até 36V e também até 1/32 avos de controle no microstep.

Pinout

Encontrei essa descrição da relação entre o shield e o Arduino. No Arduino a utilização dos pinos fica assim:

cnc_pinout_arduino-300x149.webp

Com o shield sobreposto nessa posição:

cnc_pinout_shield-300x146.webp

O slot vermelho é para clonar um eixo qualquer. Para tal, é necessário "jumpear" o eixo pretendido aqui:

clone.webp

Para o micro step, encontrei essa tabela. Estou utilizando jumper em todos, mas confesso que preciso experimentar sem os jumpers. Se me der vontade, farei em algum momento enquanto escrevo esse artigo e faço minhas anotações.

MS1MS2MS3Resolução
1 step
J1/2 step
J1/4 step
JJ1/8 step
JJJ1/16 step

Os pontos de parada (ou, "end stops", como "silkado" na placa") são para os sensores de fim e curso. Não utilizaremos nesse projeto, mas serve como referência. Esse shield não serviria para o projeto da impressora matricial por causa da biblioteca que escrevi especificamente para o Arduino Mega, mas se eu tivesse experimentado esse shield antes, com certeza teria escrito a biblioteca para ele.

Conexão dos jumpers e drivers

No shield, apenas coloque os jumpers e os drivers em suas respectivas posições (X e Y). Se baseando na imagem abaixo (já com os jumpers no X e Y, respectivamente), coloque os drivers com o trimpot voltado para baixo. Nesse documento do shield está recomendada a utilização de um jumper em Enable - o primeiro par de pinos na parte superior esquerda, próximo ao botão. Mais uma vez, repito, não coloquei o jumper.

jumpers_shield_cnc-300x225.webp

Empilhamento

Depois, encaixe-o sobre o Arduino UNO. As placas de circuito devem ficar alinhadas, ou seja, os pinos que sobrarão estarão em direção à porta USB (quanto 'ão', não?).

cnc_shield-empilhamento-300x136.webp

Bobinas do motor de passo

Em algum ponto mais atrás escrevi sobre como identificar os pares das bobinas. O pino 1 da primeira bobina fica do lado oposto ao trimpot do driver. Os pinos das bobinas ficam à direita de cada slot dos drivers. Em relação aos eixos, baseando-se na segunda imagem mais acima, o driver da esquerda corresponde ao eixo X e o driver da direita corresponde ao eixo Y.

Ajuste da corrente ideal para o motor de passo

Eu estava simplesmente girando o trimpot até que o motor de movesse, assim vi também em algum lugar. Funciona bem; se não exagerar na corrente, o motor aquecerá menos. Consultei um amigo (grande Italo Soares) e ele me passou um link importante que fala sobre o ajuste correto para o motor. Porém, para fazer esse ajuste é necessário saber a corrente por fase e para saber essa informação, é necessário ter as especificações do motor. Não achei facilmente, mas aqui está o datasheet.

O motor é 5V mesmo. Ele tem apenas 20 passos por volta, que dá aprimadamente 18 graus por passo. Porém, se entrar com menos de 12V@1A, provavelmente não vai funcionar.

Não manjo de eletrônica, mas o datasheet invés de dizer a corrente por fase, diz a resistência por fase. Então fui chutando  com a seguinte lei de Ohms até achar os 10 ohms:

R = V/I

Trocando em miúdos:

10 = 5/0.5

Coloquei então uma ponta do multímetro sobre o trimpot e a outra ponta sobre o ground, dessa vez com o motor desconectado. Então fui ajustando o trimpot e medindo até dar 0.5. Os motores de passo com 1.5A por fase se ajusta em 0.6, conforme encontrei em pesquisas, mas também encontrei o ajuste do Nema 17 colocando o trimpot no mínimo e aumentando gradativamente até o motor começar a se mover. Fiz desse modo na impressora matricial, mas como já a guardei, não vou confirmar a corrente utilizada nesse artigo.

Instalar a biblioteca

Se não for utilizar o servo motor para o eixo Z, pode seguir essa dica abaixo.

Primeiro, faça o download do github do projeto. Descomprima-a no diretório de bibliotecas do Arduino; por exemplo, ~/Arduino/libraries. Ou baixe através do github. A versão mais atual do GRBL é a 1.1. Nesse link da Protoneer eles declaram que a versão 3.10 do CNC shield para Arduino é compatível com a GRBL v0.9.

cd ~/Arduino/libraries
wget -c https://github.com/Protoneer/GRBL-Arduino-Library/archive/master.zip
unzip master.zip

Renomeie o diretório gerado na descompressão do arquivo para GRBL.

mv GRBL-Arduino-Library-master GRBL

Gravar o GRBL no Arduino

Agora abra a IDE do Arduino e suba o programa  abrindo File > GRBL > GRBLtoArduino.

Clique em Uploadou Use Ctrl+U.

Cada versão da biblioteca parece carregar um sketch de exemplo com nome diferente; GRBLtoArduinogrblUpload ou outra coisa. Não importa, simplesmente abra-o.

Teste inicial

Abra o terminal Serial e digite o símbolo de cifrão (chamado por alguns de 'dólar'. Esse símbolo -> $). O menu de ajuda será exibido. Se você ver isso, ok, seu Arduino está pronto para a brincadeira.

Ajuste do avanço por passo

Esse ajuste é um pouco complicado e não será necessário para começar a brincadeira, mas de qualquer modo só vou citar. Fui pesquisar o que era depois que recebi os conselhos do Italo Soares. Não é nada simples fazer essa configuração. Para isso, você vai precisar dos seguintes dados:

  • Quantos milímetros o motor anda por rotação. Isso depende diretamente  do diâmetro da barra roscada (2.4mm).
  • Passos por volta. Nesse motor é 20 passos (18 graus por passo).
  • Micro passo configurado. Com os 3 jumpers, full step (1).

Daí o cálculo:

steps_per_mm = (steps_per_revolution*microsteps)/mm_per_rev
#trocando em miúdos
steps_per_mm = (2.4*1)/X

Agora Xé o 'X' da questão. Ele avança 18 graus por passo em uma barra de 2.4mm. Eu não sei a conta certa e não pesquisei, por isso vou deixar para quando eu for obrigado a fazer esse ajuste (porque vou fazer uma CNC grande).

Programa para enviar G-code

Como não exige nenhuma programação, a coisa mais simples de se fazer com Arduino deveria ser uma CNC, não fossem os percalços técnicos. De qualquer modo, eu não tinha os conceitos necessários para saber como uma CNC funciona, então vou discorrer rapidamente, caso você não tenha conhecimento também.

O G-code é um conjunto de instruções implementados para cumprir as tarefas de uma CNC. Não é necessário conhecer o set de instruções para utilizar uma CNC, basta seguir as dicas e tudo estará funcionando no final, mas se desejar entender o mínimo de como o G-code funciona, esse é um bom link de entrada.

Você pode digitar diretamente comando a comando, o que é um processo improdutivo. O mais simples é gerar o G-code através de algum programa como por exemplo, o Inkscape, importando um SVG de um programa de precisão como o QCad. Ou a melhor das opções.

bCNC

Não tenha dúvidas, pegue o bCNC. Você conseguirá fazer interações manuais e também pode fazer mais do que mandar o G-code. você pode abrir um .dxf diretamente nele e por a CNC pra trabalhar. Logo, recomendo que você dedique alguns dias aprendendo CAD com o QCad, salve seu arquivo e abra-o no bCNC. Na imagem abaixo está um pouco estranho ainda porque o arquivo original está com quotas, mas basta fazer o desenho no QCad sem firulas.

bcnc_dxf_openning-300x210.webp

Vou recomendar um G-code sender multiplataforma para o caso de você estar utilizando Windows. Eu gostei dele e por ser em java, rodei tranquilamente no Linux. É prático e ajudou no começo:

Universal-G-Code-Sender

Agora discorro um pouco sobre o LinuxCNC e sua instalação, mas com tudo o que temos aqui já podemos começar a imprimir. Se está ansioso, siga para o tópico "****A primeira impressão é a que fica".

LinuxCNC

Essa é uma suite completa para CNC, mas ele tem suas instruções um pouco diferentes,  certamente não funciona nesse shield CNC para Nano, porém com o Debian Stretch sequer instalou. E graças a essa droga de implementação do systemd, que substitui o udev. De qualquer modo, se seu Linux não utiliza o systemd, você poderá experimentá-lo:

sudo su
apt-key adv --keyserver hkp://keys.gnupg.net --recv-key E0EE663E
apt-get update
apt-get install linuxcnc ou linuxcnc-sim

Para outros linux, pegue o repositório em LinuxCNC, lembrando sempre de adicionar previamente a chave supracitada.

Se depois das dicas anteriores você ainda por alguma razão pretender utilizar outro G-code sender, nesse link tem uma lista deles. Basicamente o G-code sender envia linha a linha do arquivo G-code, aguardando um retorno de carro como resposta para então enviar a próxima linha. Por isso, dá pra fazer um G-code sender com umas 10 linhas de Python.

Virtualizando um sistema com LinuxCNC

Outra opção pode ser experimentar uma VM. Pode tranquilamente ignorar essa sessão do artigo se consegui lhe convencer com os argumentos anteriores.

Para uma máquina virtual, primeiro será necessário instalar o VirtualBox (serve também para Windows) ou QEmu, precedido pela instalação do kernel-rt e os headers:

sudo su 
apt-get install linux-headers-4.9.0-3-rt-amd64 linux-image-rt-amd64

Será necessário um reboot. Se estiver usando Debian Stretch, provavelmente terá que resolver um bug horroroso:

sudo su
chown root:root /usr
chown root:root /usr/lib

Depois disso você já poderá rodar o virtualBox sem bugs. Abra o VirtualBox, então crie uma nova imagem assim:

vbox-img-300x227.webp

Faça suas configurações na GUI do aplicativo para instalar o sistema. Já, se for utilizar QEmu, instale os pacotes via apt-get e então execute:

qemu-system_x86_64 -boot d arquivo.iso

No VirtualBox, não esqueça de configurar a porta serial. Ainda, se a porta serial não estiver disponível no momento do boot, a máquina virtual não iniciará!

Após o boot da máquina virtual, será necessário escolher a a interface do aplicativo. Tem um belo discritivo na janela do aplicativo e no menu superior à direita da interface gráfica (XFCE) se encontra um menu chamado CNC.

linuxcnc

Escolhi a interface axis que é uma interface criada em Python. Antes de clicar em Ok, optei por criar um atalho no desktop.

linuxcnc.webp

Diversas outras interações serão necessárias, por isso recomendo que se desejar experimentar o LinuxCNC, procure um tutorial exclusivo a respeito. Talvez eu escreva um tão logo monte a próxima CNC para fazer meus circuitos.

Ajuste do servo motor

Se você baixou a biblioteca modificada para servo motor, provavelmente assistiu o video também. Para ajustar a posição do servo, encaixe o braço dele, então no bCNC vá ao terminal e digite M5. O M5 é para desligar o spindle, mas nessa versão modificada ele é utilizado para colocar o servo na posição considerada como UP. Para baixar, utilize o comando M3 seguido da posição (relativo a graus). 50 graus deve ser mais que suficiente:

M3 s50

A primeira impressão é a que fica

Até porque depois de imprimir, não tem mais como remover. Mas primeiro, mova os eixos X e Y e veja se tudo funciona. Utilizando o bCNC isso pode ser feito rapidamente habilitando os direcionais no menu Controle. Veja se as bobinas não estão invertidas; se quando clicar em uma direção o carro se mover na direção oposta, basta trocar os pares(fio 1 e 2 para a posição 3 e 4 respectivamente; fio 3 e 4 para a posição 1 e 2 respectivamente).

Modificação no gcode

Se você optou por utilizar o servo motor, talvez já deva ter percebido que o eixo Z não vai funcionar pelos meios tradicionais. Isso porque estamos utilizando o pino Z+ para controlar o servo e os comandos M3 e M5, que são os controles do spindle (ou, eram antes da modificação). Por isso, o gcode precisa ser modificado para também atender aos comandos corretos. Se você assistiu o video da "Eletrônica hoje", já sabe que ele fez (ou arrumou) um plugin para Inkscape que faz os "paranauês" no gcode. Mas eu estou utilizando o QCad para gerar o desenho e o QCad salva em .dxf. Nesse caso, invés utilizar o plugin eu preferi escrever um pequeno script shell para substituir os comandos dentro do gcode (e incluir também a pausa para a caneta), mas você precisa ter o gcode previamente, por isso deverá seguir os passos abaixo:

  • Abra o arquivo .dxf no bCNC.
  • Clique em "Salvar" e dê um nome qualquer seguido da extensão .gcode.
  • Execute o script a seguir para modificar o arquivo .gcode que você acabou de salvar.
  • Abra o arquivo .gcode modificado no programa bCNC.
  • Clique em Controle > Começar e desfrute da plotagem.

Script para G-code

Se você não usa Linux, siga o video do cara e faça com o Inkscape. Se você usa Linux, claro que poderá usar o Inkscape, mas tem essa possibilidade extra de modificar o gcode rapidinho.

Copie o código para um arquivo.sh(dê o nome que desejar para o arquivo), coloque um bit de execução nele (chmod 700 arquivo.sh) e execute-o (./arquivo.sh arquivo.gcode). Depois, reabra o seu arquivo.gcode no bCNC e clique em Controle > Começar.

#!/bin/sh

[ $# -eq 0 ] && {
    echo "Voce precisa passar o arquivo gcode de origem como argumento. Ex:"
    echo "$0 arquivo.gcode"
    echo "Saindo agora..."
    exit 0
}

[ -f $1 ] || {
    echo "Arquivo informado nao existe. Verifique e tente novamente. Saindo..."
    exit 0
}

sed -re 's/g1 z0(.*)/M3 s50\nG4 P1/g;s/g0 z3(.*)/M5\nG4 P1/g;s/G0 Z[[:digit:]]{1,}//' $1 >/tmp/temp.gcode
mv $1 $1\.bkp
mv /tmp/temp.gcode $1

echo "Feito."

Nesse script estou ajustando tempo de parada entre as transições do servo e ângulo de deslocamento, além de remover o posicionamento final do eixo Z. Parece que esse motor pode avançar com até 2000mm sem perder comando. Eu deixei no padrão 1200 mesmo, mas se desejar substituir a velocidade de avanço, substitua a linha do sed por essa:

sed -re 's/g1 z0(.*)/M3 s50\nG4 P1/g;s/g0 z3(.*)/M5\nG4 P1/g;s/G0 Z[[:digit:]]{1,}//;s/(g1 x[[:digit:]]{1,} y[[:digit:]]{1,} ).*/\1 f2000/' $1 >/tmp/temp.gcode

Vale lembrar que esse gcode é gerado pelo bCNC, então eu fiz o script para mudar os parâmetros baseado no formato que ele gera. Se você utilizar outro gerador de gcode, muito provavelmente esse script não vai funcionar, por isso recomendo que sempre salve um gcode no bCNC.

Duas linhas não estão sendo removidas; o primeiro M3 com f12000 (estou apagando manualmente, mas é fácil remover automático, no próximo artigo - bem mais curto, faço isso) e a outra é o Z20 no final do arquivo, mas vou remover também, apesar de que ele não afeta em nada o desenho.

A velocidade do deslocamento está em 1200 mas poderia ser até 2000, só que não estou com tempo pra fazer testes hoje e esse artigo já está gigantesco, então vou deixar um pouco de diversão pro próximo artigo relacionado.

O video mostra um pouquinho mais da CNC e a impressão simples, não fique decepcionado por não ter feito um desenho legal, prometo outro video com mais ajustes e mais impressões.

https://youtu.be/fHHYxtDUrSE

Dei uma atualizada no artigo pra mostrar todo o processo de impressão e alguns desenhos. Espero que goste.

https://youtu.be/-vBvvvRhhwg

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.