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

Mas usando apenas o programa, e usando outro motor de passo, fica facil alterar ali as voltas?   tenho um motor de passo maior. acho que tem 200 passos tambem

Testando o  terceiro exemplo : Controle do motor através de um potenciômetro:

Obs: nesse exemplo tive que também inverter a Fase 2 com a Fase 3. 

Esse exemplo foi interessante, pois consegui determinar através de testes, a rotação máxima do eixo do motor (com redução) . Foi de aproximadamente 10 RPMs. A rotação máxima é baixa devido a redução de 64:1 do motor. 

Sabendo-se que normalmente os motores de passo tem limitações nas rotações, eles não foram feitos para altas rotações.

Um detalhe - nesse modo de acionamento o passo foi completo (full step). Depois eu explicarei quais são os modos de avanço de passo. 

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

const int stepsPerRevolution = 4075;     // Para cada volta no eixo, são precisos 4075 passos
Stepper myStepper(stepsPerRevolution, 8,9,10,11);       // Configura Pinos digitais no Arduino

void setup()

{

int stepCount = 0; // Inicializa a contagem de passos
}


void loop()

{
int sensorReading = analogRead(A0);            // Mede a tensão no potenciometro - Pino A0

 // Converte tensão em RPM => máximo RPM = 10 
int motorSpeed = map(sensorReading, 0, 1023, 0, 10);              

if (motorSpeed > 0)

{
myStepper.setSpeed(motorSpeed);                   // Configura velocidade do motor em RPM
myStepper.step(stepsPerRevolution/64);           // Avança X passos do motor
}
}

Veja a sequencia de pulsos nas portas do Arduino : Frequência dos pulsos = 152,8 Hz 

Testando  segundo exemplo = controla-se o motor através do angulo:

José Antônio, para esse exemplo a montagem das conexões com o Arduino estava correta.

Não houve a necessidade de inversão da Fase 2 com  a Fase 3. 

Para poder usar esse programa, é necessário a instalação da Biblioteca CustomStepper.

http://playground.arduino.cc/Main/CustomStepper

(se ela já não estiver instalada) 

Procedimento para instalação de uma Biblioteca na IDE do Arduino (versão mais nova) :

https://www.arduino.cc/en/Guide/Libraries#toc2

Pesquisando na WEB, descobri essas informações importantes sobre o motor :

http://forum.arduino.cc/index.php?topic=71964.15

Para um giro do eixo externo do motor (com redução) são necessários 64 voltas no motor de passo interno. Para um giro completo do eixo externo são necessárias aproximadamente 4075 pulsos no motor de passo. 

 

Esse é o Sketch que eu testei (com algumas alterações):

// 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


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

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

void loop()
{
if (stepper.isDone())
{
delay(2000);                            //Intervalo entre acionamentos => 2 segundos
stepper.setDirection(CW);         //Define o sentido de rotação (CW = horário ou CCW = anti-horário)
stepper.rotateDegrees(180);      //Define o angulo de rotação
}
stepper.run();                          // esse comando faz o motor girar
}

José Antonio, já montei o primeiro circuito de teste - com dois botões para alterar o sentido da rotação. 

O motor girou no sentido do Relógio, mas no sentido anti-horário não. Quando eu pressionava o botão para o sentido anti-horário, o motor girava no sentido horário de uma forma irregular, com pequenas vibrações. Vou pesquisar o porquê desse problema. 

Você chegou a testar esse Sketch ?

Para entender como esses Sketches funcionam, é importante que consulte os arquivos fontes da Biblioteca Stepper da IDE do Arduino. 

Esses são os arquivos :

Stepper.h

https://github.com/arduino-libraries/Stepper/blob/master/src/Stepper.h

Stepper.cpp 

https://github.com/arduino-libraries/Stepper/blob/master/src/Steppe...

Fiz algumas alterações e adicionei comentários no seu programa :

#include <Stepper.h>          // Biblioteca de motor de passo
int pinobotao_ah = 3;          // Botão sentido anti-horário => pino D3
int pinobotao_h = 2;            // botão sentido horário => pino D2
int passos = 32;                 // número de passos
int leitura = 0;                    // variáveis de controle da rotação
int leitura2 = 0;

// Motor 28BYJ-48 precisa de 64 passos para completar uma volta 
const int stepsPerRevolution = 64;  

// Configura Pinos do Arduino => fases do Motor
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

void setup()
{
pinMode(pinobotao_h, INPUT);          // Configura pino D2 como entrada
pinMode(pinobotao_ah, INPUT);        // Configura pino D3 como entrada
myStepper.setSpeed(100);               // Configura a velocidade do motor em RPM
}

void loop()
{
leitura = digitalRead(pinobotao_h);     //Gira o motor no sentido horario
if (leitura != 0)
{
myStepper.step(passos);
}
leitura2 = digitalRead(pinobotao_ah);   //Gira o motor no sentido anti-horario
if (leitura2 != 0)
{
myStepper.step(-passos);
}
}

Matei a charada ! Duas fases do motor estavam invertidas !

Inverti a fase 2 com a fase 3. Isso deve ser devido à montagem do motor. 

Ou então o datasheet que eu vi não estava correto. 

Vejam a análise dos pulsos das Fases (foram capturados nas portas 8,9,10 e 11 do Arduino).

Essa sequência estava errada :

Quando eu inverti os fios da porta 9 (Fase 2 )  com o da porta 10 (Fase 3), ficou tudo OK !

Oi, pode me dizer por qual motivo o meu motorzinho só está rodando pra um lado? Independente do botão que aperte.

Fiz conforme seu código e conforme a o circuito.

Obrigado.

Para quem não esta acostumado com os diagramas do Fritizing, eu desenhei esse diagrama com as 

ligações básicas do Modulo ULN2003A conectado em um Arduino Uno. 

No caso da fonte de 5V, eu estou usando um carregador de bateria Nokia antigo (reciclar é bom) . 

http://labdegaragem.com/forum/topics/reciclando-componentes-eletr-n...

Opa estamos aqui para isto mesmo.

José no início meu motor também estava invertido. Apanhei um pouco com estes circuitos. Pode ser que o meu motor também esteja com a fiação invertida. Assim como foi desenhado aqui funciona normalmente.

Como ele possui uma redução muito boa, estou pensando em aplicar na porta de um armário (pequeno de ferramenta) abertura em 90º e sem nada de esforço, só o peso da porta em mdf. 

Mais tranquilo, achei interessante os comentários, acredito que possamos fazer em todos eles. 

Valeu José.

"Perigoso" isso não???

Quando estiver com pressa, segurar a porta e....vai detonar as engrenagens dentro do motor.

Segue dois projetos interessantes utilizando os motores de passo 28BYJ-48:

EggBot - desenhar em um ovo

estrutura para imprimir em impressora 3D: http://www.thingiverse.com/thing:20398

programa arduino: https://github.com/bertramt/cheap-spherebot

PCB plotter: mini cnc para plottar PCB

projeto e peças 3D para imprimir: https://github.com/dherrendoerfer/uCNC_controller

Sds,

Show de bola

Legal demais ! 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço