Pessoal,

como faço para acionar 3 motores de passo Nema23 simultaneamente, pausar 5 segundos
e depois acioná-los na direção contrária para a mesma posição inicial?
Durante essa pausa preciso acionar um Servo, abaixo tenho o código para acionar 2 motores com a
condição do loop:

#include <AccelStepper.h>


AccelStepper stepperX(1,6,7);
AccelStepper stepperY(1,9,10);

void setup()
{
// habilita os pinos de enable dos motores
   stepperX.setEnablePin(8);
   stepperY.setEnablePin(11);

// seta a a velocidade máxima dos motores
   stepperX.setMaxSpeed(2000);
   stepperY.setMaxSpeed(2000);
}

void loop()
{
    stepperX.moveTo(-2000);
    stepperX.setSpeed(1000);
    stepperY.moveTo(-2000);
    stepperY.setSpeed(1000);


while ((stepperX.currentPosition() != -2000) && (stepperY.currentPosition() != -2000))
{
stepperX.runSpeed();
stepperY.runSpeed();
}

// o código abaixo é análogo, só que gira na direção contrária, agora.

    stepperX.moveTo(2000);
    stepperX.setSpeed(1000);
    stepperY.moveTo(2000);
    stepperY.setSpeed(1000);

// move os motores até a posição -2000
while ((stepperX.currentPosition() != 2000) && (stepperY.currentPosition() != 2000))
{
    stepperX.runSpeed();
    stepperY.runSpeed();
}
}

Desde já agradeço a ajuda.

Exibições: 816

Responder esta

Respostas a este tópico

Bom dia Tarcízio,
Se deseja desenvolver o seu próprio programa para controle de um CNC ou Impressora 3D, recomendo que estude os projetos prontos, pois acho que são bem mais complexos.
Não dá para usar delay nesses casos.

Boa noite amigo José Gustavo,
eu consegui fazer com um delay, era uma coisa muito simples que eu confesso que quebrei a cabeça, achei a solução enquanto tomava um banho, rsrsrsrsrs, de vez em quando a gente não raciocina como deveria, a solução foi colocar o delay onde está este trecho:
"// o código abaixo é análogo, só que gira na direção contrária, agora."
Na verdade é um projeto de braço robótico que estou desenvolvendo e os movimentos devem ser sincronizados, desde já agradeço a sua atenção.

Tarcízio bom dia,

Veja esses tópicos sobre Multitarefa com Arduino.
Acho que podem ser úteis para o seu caso:

http://labdegaragem.com/forum/topics/multitarefa-para
http://labdegaragem.com/forum/topics/duvida-multitarefa-cooperativa...

Bom dia José Gustavo,

muito bom o material, eu vou precisar sim em outras aplicações no mesmo projeto, vou dar uma estudada e qualquer dúvida eu entro em contato, muito obrigado.

Desenvolvi uma biblioteca para controle de motores de passo, se quiser testar, pode ser baixada em:

https://fperrotti.wikispaces.com/Bibliotecas+para+Arduino

Veja se serve pra vc. A classe é a StepperMotorTm, vc teria que criar 3 instancias dela. Tem uma documentação básica em:

https://fperrotti.wikispaces.com/Classe+StepperMotorTm

Se tiver alguma dúvida sobre o uso dela eu posso tentar ajudar.

Amigo Francesco Artur,

eu estou estudando as suas bibliotecas e me parece que serão muito úteis para minha aplicação, andei lendo um pouco e vi que a "Classe StepperMotorTm" funciona com apenas um motor de passo, no momento estou usando a biblioteca StepperMotor onde não tem como usar a aceleração e desaceleração, eu gostaria muito usar essa mesma biblioteca mas controlando os movimentos sem que eles tenham trancos, você tem alguma biblioteca específica para me indicar?
Vou postar aqui um vídeo do funcionamento do meu projeto com a biblioteca StepperMotor que consegui até aqui.
No mais agradeço muito a ajuda de todos e vou obter um tempo para estudar o riquíssimo conteúdo que você me indicou, obrigado.

Tarcízio, vc pode usar a classe para controlar quantos motores vc quiser, basta criar uma instância da classe para cada motor. Isso é possível porque a classe não usa delays e nem funções bloqueantes.

O ideal mesmo seria criar uma classe descendente de StepperMotorTm porque assim vc seria avisado qdo o movimento é completado. Se quiser depois te mando um exemplo de como fazer isso.

Abaixo um exemplo de uso com 3 motores.

Francesco,

fiz um vídeo sem edição para ver como está o funcionamento dos motores usando a biblioteca StepperMotor do Arduino:

Me desculpe por informar errado a biblioteca usada, neste projeto abaixo é usada a biblioteca MultiStepper.

Aqui o exemplo:

Mais uma coisa, vale a pena ler a discussão sobre a classe StepperRobot, tem bastante informação ali sobre vibrações e trancos. Usar o modo meio-passo deixa o movimento mais suave.
Anexos

Vou tentar adaptar e posto aqui mais tarde, obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço