Motor de passo 28BJY com motorshield

#1

Sou iniciante em Arduino. Mas Fiz um sketch para fazer 2 motores de passo girarem 360 graus e pararem através da motorshield L293D. Até aí eu consegui… Tenho umas dúvidas! Alguém saberia ajudar?

  1. Na programação, o motor 2 só executa sua volta de 360 graus após o motor 1. Há alguma forma de fazer o segundo motor começar sua volta ao mesmo tempo do primeiro? ou mesmo iniciar no meio da volta do outro? Há como alterar isso?
  2. É possível colocar um pushbutton para que execute a programação inicie? Ou seja…cada vez que eu de um toque no pushbutton ele inicie a programação que fiz? Como faria isso? Segue o sketch:

#include <AFMotor.h>

// Programa : Controlando 2 motores de passo 28BYJ-48 com
// Arduino Motor Shield L293D
// Autor : Arduino e Cia

// Carrega a biblioteca AFMotor
#include <AFMotor.h>

//Numero de passos para 1 rotacao total
double passos_total = 2048;

// Define as portas para os motores
// Valor 1 para motor em M1/M2 e 2 para motor em M3/M4
int porta_motor_1 = 1;
int porta_motor_2 = 2;

// Angulo de rotacao do eixo
int angulo = 360;

// Armazena o numero de passos que o motor vai girar
double numero_de_passos = 0;

// Define os parametros do motor 1
AF_Stepper motor_de_passo_1(passos_total, porta_motor_1);
// Define os parametros do motor 2
AF_Stepper motor_de_passo_2(passos_total, porta_motor_2);

void setup()
{
// Define a velocidade de rotacao do motor 1
motor_de_passo_1.setSpeed(10);
// Define a velocidade de rotacao do motor 2
motor_de_passo_2.setSpeed(10);
// Inicializa a serial
Serial.begin(9600);
//Calcula a quantidade de passos, baseado no angulo determinado
numero_de_passos = angulo / (360 / passos_total);

//Mostra no serial monitor o numero de passos calculados
Serial.print("Numero de passos : ");
Serial.println(numero_de_passos);

//Move o motor 1. Use FORWARD para sentido horario,
//BACKWARD para anti-horario
motor_de_passo_1.step(numero_de_passos, FORWARD, SINGLE);
motor_de_passo_1.release();

delay(0);

//Move o motor 1. Use FORWARD para sentido horario,
//BACKWARD para anti-horario
motor_de_passo_2.step(numero_de_passos, FORWARD, SINGLE);
motor_de_passo_2.release();

delay(0);
}

void loop()
{

}

0 Likes

#2

Sim , a ideia e que você esta fazendo em uma sequencia , o primeiro dai o segundo, nao sei sobre essa biblioteca mas tente intercalar os comandos

motor_de_passo_1.step(numero_de_passos/2, FORWARD, SINGLE);
motor_de_passo_1.release();

motor_de_passo_2.step(numero_de_passos/2, FORWARD, SINGLE);
motor_de_passo_2.release();

motor_de_passo_1.step(numero_de_passos/2, FORWARD, SINGLE);
motor_de_passo_1.release();

motor_de_passo_2.step(numero_de_passos/2, FORWARD, SINGLE);
motor_de_passo_2.release();

0 Likes

#3

caso isso nao seja ideal, faca com loops como

for (int x = 0 ; x < numero_de_passos/2;x++ ){ motor_de_passo_1.step(1, FORWARD, SINGLE); }

for (int x = 0 ; x < numero_de_passos/2;x++ ){ motor_de_passo_1.step(1, FORWARD, SINGLE);
motor_de_passo_2.step(1, FORWARD, SINGLE); }

for (int x = 0 ; x < numero_de_passos/2;x++ ){ motor_de_passo_2.step(1, FORWARD, SINGLE); }

0 Likes

#4

caso voce queira ainda mais flexibilidade, aprenda como o exemplo “blink without delay” funciona

0 Likes