Ir ao conteúdo
  • Cadastre-se

Arduino Projeto Mini CNC com Arduino


Posts recomendados

Bom, galera, sou muito iniciante na área de programação, pra falar a verdade sei menos do que o básico, então quero a ajuda de vocês que tem mais experiência. Estou tentando fazer uma Mini CNC via Arduino como projeto para faculdade. Estou me baseando nesse projeto: 

 

https://arduinobymyself.blogspot.com.br/2016/01/mini-cnc-arduino-plotter.html

 

Porém, estou usando um Shield L293D, onde irei ligar os dois motores de passo (driver de DVD) e o servo motor. Para isso funcionar, preciso fazer alterações nos códigos e incluir a biblioteca AFMotor:

 

https://github.com/adafruit/Adafruit-Motor-Shield-library

 

Inicialmente, eu precisaria alterar a seguinte linha:

 

Stepper myStepperX(stepsPerRevolution, 2,3,4,5);            
Stepper myStepperY(stepsPerRevolution, 8,9,10,11); 

Para:

AF_Stepper myStepperX(stepsPerRevolution, 1);            
AF_Stepper myStepperY(stepsPerRevolution, 2);  

Até aí tudo legal. Ao fazer somente essas alterações obtive um erro na compilação, e descobri que estava aqui:

 

  long dx = abs(x1-x0);
  long dy = abs(y1-y0);
  int sx = x0<x1 ? StepInc : -StepInc;
  int sy = y0<y1 ? StepInc : -StepInc;

  long i;
  long over = 0;

  if (dx > dy) {
    for (i=0; i<dx; ++i) {
      myStepperX.step(sx);
      over+=dy;
      if (over>=dx) {
        over-=dx;
        myStepperY.step(sy);
      }
      delay(StepDelay);
    }
  }
  else {
    for (i=0; i<dy; ++i) {
      myStepperY.step(sy);
      over+=dx;
      if (over>=dy) {
        over-=dy;
        myStepperX.step(sx);
      }
      delay(StepDelay);
    }    
  }

A biblioteca AFMotor exige que a função step tenha 3 parâmetros para funcionar, o primeiro no caso seria a quantidade de passos, o segundo a direção (FORWARD, BACKWARD) e o terceiro o tipo de passo (SINGLE, DOUBLE, MICROSTEP, INTERLEAVE), por exemplo:

 

motor1.step(passos, FORWARD, DOUBLE)

 

Eu não sei bem o que eu devo fazer aí, consegui passar pela compilação adicionando apenas o tipo de passo, no caso usei o DOUBLE que usa as duas bobinas dando mais torque, mas na hora de mandar algum arquivo GCODE para ela desenhar, chega a uma certa parte (logo no começo) em que um dos motores fica funcionando infinitamente, o restante dos comandos não é executado.

 

Tentei fazer o teste sem alterar nada (somente o pino onde o servo motor estava conectado), só pra ver se o procedimento de desenho executaria corretamente, e sim, tudo funcionou bem, o servo motor fez todas as funções, e o log mostrada que os comandos estavam sendo executados até o fim, mas os motores do eixo X e Y não funcionaram.

 

Eu percebi também que os motores rodam apenas para um lado ao fazer as alterações, talvez seja necessário definir manualmente quando ele deve girar para trás e para frente com os parâmetros FORWARD e BACKWARD, mas eu sou inexperiente com programação e não sei como proceder. Alguma luz?

Link para o comentário
Compartilhar em outros sites

Tutorial para Driver mais antigo (com a biblioteca velha e decrépita, segundo o desenvolvedor ^^ )

https://learn.adafruit.com/adafruit-motor-shield/overview

Tutorial para Driver mais recente (placa mais atual com forma de configurar e codificação)

https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/overview

 

De resto complicado ajudar porque se não for a biblioteca pode ser teu código que está empatando o funcionamento do motor... ou seja recomendaria ir testando vagarosamente cada paço que deve ser feito com muitos testes... mas antes tenha certeza qual é. No site ai em cima tem as bibliotecas V1 e V2.;

Link para o comentário
Compartilhar em outros sites

Obrigado pela resposta.

 

Como aparentemente o problema estava na parte de interpretação do GCODE, eu entrei no site ond explica como criar essa parte de interpretação, lá vi que o próprio cara recomenda o Shield L293D, e nos exemplos dele vi que ele não usa a função step, ele usa a onestep, de alguma forma ele consegue usa-la com apenas um parâmetro, aqui tive que usar dois, acho que porque ele define esses parâmetros em outros arquivos de código, eu dei uma olhada no link que ele deixou:

 

https://github.com/MarginallyClever/GcodeCNCDemo

 

Bom, para minha felicidade, ao alterar de step para onestep consegui completar todo o processo do GCODE, mas como eu estou testando apenas os motores (não montei a estrutura para fazer os desenhos já e tal), eu estou achando o movimento dos motores muito pequeno, eles deveriam andar bem mais do que isso. Talvez tenha que alterar a quantidade de passos por milimetro nos códigos, mas deveria funcionar com as configurações dos códigos originais, já que também estou usando motores de passo de um driver de DVD.

Link para o comentário
Compartilhar em outros sites

OK, hoje descobri que o problema de os motores estarem muito devagar era a falta de alimentação, eu estava usando apenas USB 2.0 que fornece 5V @500mA, agora consegui uma fonte de 9V @1A para ligar no Arduino e está funcionando legal.

 

Agora tenho que descobrir qual o melhor tipo de passo para os motores, acredito que por se tratar de uma CNC o melhor seja MICROSTEP, porém tenho a impressão de que algo não está certo, após concluir o trajeto inteiro os motores continuam ligados e fazendo as "sons robóticos" que também só ocorrem quando uso MICROSTEP. Ao usar DOUBLE ou SINGLE eu percebo que os movimentos são muito bruscos, não seria ideal para uma CNC.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...