Boa tarde amigos ,estou fazendo um programa aonde ele move 2 motores de passo ate um sensor de home e zera a posição e  depois vai ate a posição final e guarda a posição total (numero de passos),guarda o valor numa variavel.nao estou conseguindo fazer funcionar...

ligo e nada acontece ,estou usando 02 easy drivers e usando os exemplos da lib estao funcionando

ok com as definições usadas neste software...Abaixo segue meu codigo.Obrigado antecipadamente a todos.

#include <AccelStepper.h> //carrega a biblioteca accelstepper

//===============================
AccelStepper motor1(1, 8, 7); //configura o Easy driver para o motor1
AccelStepper motor2(1, 12, 13); //configura o Easy driver para o motor2
//===============================
#define home1 2 // define o pino 2 como home1 - sensor de home
#define end1 4 // define o pino 4 como end1 - sensor de fim de curso
//===============================
byte iniciar=0; // variavel para inicializacao do motores
long rodamotor1;// variavel para girar o motor1
long rodamotor2;// variavel para girar o motor2
long posicaofinal1;
long posicaofinal2;
//=================

void setup()
{
pinMode(end1,INPUT); // configura o end1 como entrada
digitalWrite(end1,HIGH); //liga o pullUp
pinMode(home1,INPUT); //configura o home1 como entrada
digitalWrite(home1,HIGH); //liga o pullUp
motor1.setMaxSpeed(1000); //seta a maxima velocidade do motor1
motor1.setAcceleration(500.0);// seta a maxima aceleracao do motor1
motor2.setMaxSpeed(1000); // seta a maxima do motor2
motor2.setAcceleration(500.0);//seta a maxima acelercao do motor2
}

void loop()
{

if(iniciar==0) //se a variavel inicio for zero...
{
motor1.moveTo(10000); //configuara o quanto o motor1 vai andar
motor1.run(); //manda o motor1 andar

if(home1==0) // se o sensor de home1 for acionado...
{
motor1.setCurrentPosition(0); //carrega a posicao do motor1 como 0
motor1.moveTo(-10000); // configura o quanto o motor vai andar..
motor1.run(); //move o motor1 para -10000

}

if(end1==0) // se o sensor de end1 for acionado...
{
motor1.targetPosition(); //adquire a posicao atual do motor1
posicaofinal1=motor1.targetPosition();//carrega o valor na variavel posicaofinal
motor1.moveTo(-10); //configura o quanto o motor1 vai andar
motor1.run(); //manda o motor para -10
}

if(motor1.targetPosition() <= -10) // se o motor1 estiver na posição -10...
{
motor1.stop(); // para antes de bater no home1
iniciar = 1; // muda o valor da variavel iniciar para 1
}

}
}

Exibições: 1632

Responder esta

Respostas a este tópico

Ja dei uma mexida e agora o motor para quando aperto qualquer fim de curso...

#include <AccelStepper.h> //carrega a biblioteca accelstepper

//===============================
AccelStepper motor1(1, 8, 7); //configura o Easy driver para o motor1
AccelStepper motor2(1, 12, 13); //configura o Easy driver para o motor2
//===============================
#define home1 2 // define o pino 2 como home1 - sensor de home
#define end1 4 // define o pino 4 como end1 - sensor de fim de curso
//===============================
byte iniciar=0; // variavel para inicializacao do motores
long rodamotor1;// variavel para girar o motor1
long rodamotor2;// variavel para girar o motor2
long posicaofinal1;
long posicaofinal2;
//=================

void setup()
{
pinMode(end1,INPUT); // configura o end1 como entrada
digitalWrite(end1,HIGH); //liga o pullUp
pinMode(home1,INPUT); //configura o home1 como entrada
digitalWrite(home1,HIGH); //liga o pullUp
motor1.setMaxSpeed(600); //seta a maxima velocidade do motor1
motor1.setAcceleration(500.0);// seta a maxima aceleracao do motor1
motor2.setMaxSpeed(600); // seta a maxima do motor2
motor2.setAcceleration(500.0);//seta a maxima acelercao do motor2
}

void loop()
{

if(iniciar==0) //se a variavel inicio for zero...
{
motor1.moveTo(10000);//configuara o quanto o motor1 vai andar
motor1.run();//manda o motor1 andar

if(digitalRead(home1)==0) // se o sensor de home1 for acionado...
{
motor1.setCurrentPosition(0); //carrega a posicao do motor1 como 0
delay(20);
motor1.moveTo(-10000); // configura o quanto o motor vai andar..

}
motor1.run(); //move o motor1 para -10000


if(digitalRead(end1)==0) // se o sensor de end1 for acionado...
{
motor1.targetPosition(); //adquire a posicao atual do motor1
posicaofinal1=motor1.targetPosition();//carrega o valor na variavel posicaofinal
motor1.moveTo(-10); //configura o quanto o motor1 vai andar
motor1.run(); //manda o motor para -10
}

if(motor1.targetPosition() <= -10) // se o motor1 estiver na posição -10...
{
motor1.stop(); // para antes de bater no home1
iniciar = 1; // muda o valor da variavel iniciar para 1
}

}
}

Boa tarde.

Estou precisando de uma ajuda. Não estou conseguindo fazer nenhum dos motores funcionar.
Estou com duvida nos pinos de ligação entre o Easy driver e o arduino. Nesse caso estou utilizando o Galileo.
Alguem pode me ajudar?

Bem amigos consegui resolver o problema e deixo aqui o codigo de meu projeto para ajudar outros...

#include <AccelStepper.h> //carrega a biblioteca accelstepper

//=========================================================================
AccelStepper motor1(1, 8, 7); //configura o Easy driver para o motor1
AccelStepper motor2(1, 12, 13); //configura o Easy driver para o motor2
//=========================================================================
#define home1 2 // define o pino 2 como home1 - sensor de home
#define end1 4 // define o pino 4 como end1 - sensor de fim de curso
#define home2 10 // define o pino 2 como home1 - sensor de home
#define end2 11 // define o pino 4 como end1 - sensor de fim de curso
//=========================================================================
byte iniciar=0; // variavel para inicializacao do motores
long rodamotor1; // variavel para girar o motor1
long rodamotor2; // variavel para girar o motor2
long posicaofinal1; // carrega a posicao calculada no end1
long posicaofinal2; // carrega a posicao calculada no end2
byte finalizou1=0; // variavel de controle de fim de inicializacao motor1
byte finalizou2=0; // variavel de controle de fim de inicializacao motor2
//==========================================================================
void setup()
{
pinMode(end1,INPUT); // configura o end1 como entrada
digitalWrite(end1,HIGH); //liga o pullUp
pinMode(home1,INPUT); //configura o home1 como entrada
digitalWrite(home1,HIGH); //liga o pullUp
pinMode(end2,INPUT); // configura o end2 como entrada
digitalWrite(end2,HIGH); //liga o pullUp
pinMode(home2,INPUT); //configura o home2 como entrada
digitalWrite(home2,HIGH); //liga o pullUp
motor1.setMaxSpeed(100); //seta a maxima velocidade do motor1
motor1.setAcceleration(200);// seta a maxima aceleracao do motor1
motor2.setMaxSpeed(100); // seta a maxima do motor2
motor2.setAcceleration(200); //seta a maxima acelercao do motor2
motor1.moveTo(4800); //configuara o quanto o motor1 vai andar para procurar o home1
motor2.moveTo(4800); //configura o quanto o motor2 vai andar para achar o home2
}
//============================================================================
void loop()
{
motor1.run(); // manda girar o motor1
motor2.run(); // manda girar o motor2

if(iniciar==0) //se a variavel inicio for zero...
{
//=======================Sensor home1 ligado ao pino 2 e ao terra ============================

if(digitalRead(home1)==0) // Se o sensor home1 ativar...
{
motor1.setCurrentPosition(0); //carrega a posicao do motor1 como 0
motor1.moveTo(-4600); //carrega a distancia estimada para alcancar o end1
}

//========================= sensor end1 ligado pino 4 e ao terra ==============================

if(digitalRead(end1)==0) // se o sensor de end1 for acionado...
{
motor1.currentPosition(); //adquire a posicao atual do motor1
posicaofinal1=motor1.currentPosition();//carrega o valor na variavel posicaofinal
motor1.moveTo(posicaofinal1/2);//calcula o valor para o centro ( coloque a posicao que voce quiser aqui )...
motor1.runSpeed(); //manda o motor para o centro
finalizou1=1; //finaliza a inicializacao dos motores.
}
//=====================================================================================
//=======================Sensor home2 ligado ao pino 10 e ao terra ============================

if(digitalRead(home2)==0)
{
motor2.setCurrentPosition(0); //carrega a posicao do motor2 como 0
motor2.moveTo(-4600);
}

//========================= sensor ligado pino 10 ao terra ==============================

if(digitalRead(end2)==0) // se o sensor de end2 for acionado...
{
motor2.stop();
motor2.currentPosition(); //adquire a posicao atual do motor2
posicaofinal2=motor2.currentPosition();//carrega o valor na variavel posicaofinal2
motor2.moveTo(posicaofinal2 / 2);//calcula o valor para o centro ( coloque a posicao que voce quiser aqui )...
motor2.runSpeed(); //manda o motor para o centro
finalizou2 = 1; //finaliza a nicializacao dos motores
}
//=====================================================================================
if(finalizou1==1 && finalizou2==1)
{
iniciar=1;
}

}

}

show de bola!  funcionou e ajudou aqui!

estou tentando agora é mapear quantos centimetros tem um fuso e para dizer quanto o motor tem que girar até o ponto do fuso que eu quero.

Já viu algo parecido?

Tipo: sair do Home e ir para 3 cm de distância.

No seu caso foi até a metade.

abs

Me perdoe pela demora ,estive afastado por ,motivo de doença.

Bem vamos la...

no seu caso voce deve fazer uma regra de treis...Primeiramente voce coloca um valor por exemplo 400 e meça quanto o eixo se movimentou e depois faça uma relaçao do tipo quantos mm andou / 400 e voce tera a quantidade de passos por mm .

sabendo quantos passo por mm é so voce multiplicar distancia em mm * o fator achado.

Por exemplo 30mm x 200(passos) =6000 passos.

Ernando.

Valeu! Esse esquema da regra de 3 consegui fazer a um tempo atraz.

Estou conseguindo usar esse seu codigo isolado mas quando coloco junto aos meus, nada acontece. Creio que seja alguma incompatibilidade da Biblioteca de utilizar no mesmo codigo comando que movem os motores separados e comando que movem os motores conjuntamente.

de uma olhada

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço