Tutorial Arduino - Motor de Passo 28BYJ-48 + driver ULN2003

Mais um Tutorial para os colegas do Lab de Garagem - Arduino controlando o motor de passo 

28BYJ-48 com o driver ULN2003.

Essa montagem, eu diria que é a mais simples para controle de um motor de passo (stepper motor). Nem por isso ela pode ser considerada ruim. Esse motorzinho tem uma redução interna que aumenta bem o torque, apesar do pequeno tamanho. O módulo de controle com o chip ULN2003 é bem pequeno também, o que pode facilitar a montagem em um seu projeto. 

As vantagens são a simplicidade na montagem , Sketch pode ser bem enxuto, o uso de tensão de 5V para alimentar o motor, etc. 

A desvantagens são que a rotação é baixa (devido a redução na caixa de engrenagens) ,  que  o motor unipolar é menos eficiente e o uso de quatro portas do Arduino. Alguns módulos de controle de motor de passo usam interfaces com duas portas apenas (por exemplo I2C). 

Favor interagir com o tutorial, somente assuntos relacionados com o mesmo. 

Se deseja esclarecer alguma outra dúvida, favor criar um novo tópico. 

Farei o Tutorial em partes. 

Para facilitar a pesquisa nos tópicos, criei esse índice :

A precisão de um motor de passo :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Informações sobre o Motor de Passo 28BYJ-48 :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Informações sobre o Módulo Driver ULN2003:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Diagrama de montagem do Modulo Driver + Motor com Arduino:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Primeiro exemplo - com dois botões para alterar o sentido da rotação:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...


Segundo exemplo - controla-se o motor através do angulo:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...


Terceiro exemplo - Controle do motor através de um potenciômetro:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...


Quarto exemplo - Três voltas no sentido horário e mais duas voltas no sentido ant-horário :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...


Quinto exemplo - Acionamento com duplo sentido :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Aplicações com o Motor + Driver - Impressora de Ovos e Ploter de PCB:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Aplicações com o Motor + Driver - Fotografia Time-lapse:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Motor de Passo - modos de operação :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Motor de Passo - Modo Passo completo com baixo torque ( Wave Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Motor de Passo - Modo Passo completo com alto torque ( Full Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

Motor de Passo - Modo Meio Passo ( Half Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...

E muito mais !!!

Espero que gostem.  

Exibições: 69212

Responder esta

Respostas a este tópico

O quarto circuito, temos o número de voltas:

 

#include <CustomStepper.h>

CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;

void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}

void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes (voltas)
stepper.rotate(3);
rotate1 = true;
}

if (stepper.isDone() && rotate1 == true)
{
delay(2000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes (voltas)
stepper.rotate(2);
rotate1 = false;
}

//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}

E o ultimo circuito, temos o acionamento com duplo sentido.   
 

#include <Stepper.h>

const int stepsPerRevolution = 64;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

void setup() {
myStepper.setSpeed(200);
}

void loop() {

for (int i = 0; i < 32; i++)
{
myStepper.step(64);
}
delay(1000);

for (int i = 0; i < 32; i++)
{
myStepper.step(-64);
}
delay(1000);
}

 

Boa montagem e bom divertimento, dá para ficar horas nestes experimentos e ir substituindo os valores para ver o que acontece.

Obs.: Como não domino a programação, alguém poderia comentar estes circuitos. Tenho a noção, mais não a nível de explicar aqui no tópico ok. 

Valeu,

José Antonio 

Maravilha José Antonio !

Valiosa contribuição. Eu estava tentando desenhar no Fritizing, mas estava com dificuldades, pois nunca tinha desenhado com esse programa,  

Muito obrigado.

Quinto exemplo - Acionamento com duplo sentido :

Referências da Biblioteca Stepper :

https://www.arduino.cc/en/Reference/Stepper

https://www.arduino.cc/en/Reference/StepperConstructor

https://www.arduino.cc/en/Reference/StepperSetSpeed

https://www.arduino.cc/en/Reference/StepperStep

Nesse exemplo,  houve a necessidade de inversão da Fase 2 com  a Fase 3. 

Nesse Sketch, o motor gira uma volta no sentido horário e uma volta para no sentido anti-horário com intervalos de um segundo entre as mudanças de sentidos. 

Uma coisa não ficou clara :

Como já sabido, para que o eixo gire uma volta são necessários 4075 passos.

Portanto para um giro completo 63,7 x 64 passos = 4075.

Mas no programa fiz somente 32 loops de 64 passos e não 63,7 loops  para girar uma volta. 

Não entendi. Irei pesquisar. 

#include <Stepper.h> // Biblioteca de motor de passo

const int stepsPerRevolution = 4075; // Motor precisa de 4075 passos para completar uma volta

// Configura Passos por volta e Pinos do Arduino => fases do Motor

Stepper myStepper(stepsPerRevolution, 8,9,10,11); 

void setup()

{
myStepper.setSpeed(10);     // Configura a velocidade do motor em RPM
}


void loop()
{
for (int i = 0; i < 32; i++)      // Incrementa contador até 32
{
myStepper.step(64);           // gira 64 passos no sentido Horário
}
delay(1000);                      // Atraso de um segundo

for (int i = 0; i < 32; i++)      // Incrementa contador até 32
{
myStepper.step(-64);          // gira 64 passos no sentido Anti-horário
}
delay(1000);                      // Atraso de um segundo
}

Carta de tempo do quinto exemplo :

Dados interessantes:

- a frequencia dos pulsos foi de 169,8 Hz. 

- foram gastos 3,012 segundos para girar uma volta na velocidade de 10 RPM do motor de passo. (não esta mostrado nessa carta) 

Conseguiu descobrir?

Eu hackeei esse motor para bipolar e usei uma "POLOLU A4498" e consegui fazer uma volta com 2.048 pulsos (aproximadamente)!!!

Não era para ser 4.096????

 

Como já informado, para que o eixo gire uma volta são necessários 4075 passos. Portanto para um giro completo 63,7 x 64 passos = 4075.

Mas no programa fiz somente 32 loops de 64 passos e não 63,7 loops  para girar uma volta. Deve ser alguma coisa na biblioteca. Eu não contei quantos passos ele dá em cada loop. Deve ser isso. 

Testando  quarto  exemplo = Três voltas no sentido horário e mais duas voltas no sentido ant-horário :

Nesse exemplo, não houve a necessidade de inversão da Fase 2 com  a Fase 3. 

// Essa Biblioteca deve ser instalada antes http://playground.arduino.cc/Main/CustomStepper

#include <CustomStepper.h>

// Define os parâmetros iniciais de ligação do motor de passo, sequência das fases
// número de passos para uma volta, RPM e sentido da rotação
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075, 10, CW);

// variáveis de controle da rotação
boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;

void setup()
{
stepper.setRPM(10);          // Define a velocidade do motor em RPM
stepper.setSPR(4075);       // Define o numero de passos para uma volta no eixo
}

void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(2000);                          // Atraso de 2 segundos
stepper.setDirection(CW);       // Define o sentido de rotação (CW = Horario)
stepper.rotate(3);                   // Define o numero de rotações (voltas)
rotate1 = true;
}

if (stepper.isDone() && rotate1 == true)
{
delay(2000);                          // Atraso de 2 segundos
stepper.setDirection(CCW);    // Define o sentido de rotação (CCW = Anti-horario)
stepper.rotate(2);                   // Define o numero de rotações (voltas)
rotate1 = false;
}
stepper.run();                        // esse comando faz o motor girar
}

Vendo esses codigo, não bastaria eu aumentar o numero de voltas? para 700? tenho esse motor de passo, e o chip. O que acha?

Esse motor é para baixa rotação. Por ter um mecanismo de redução, a velocidade é bem baixa. Esta querendo usar na bobinadora ?

Só se for em camera lenta , he he . 

O driver A4988 é mais adequado ( mas veja a especificação do motor antes, para saber se ele é compatível com o seu motor). 

Ok. obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço