28BYJ-48 – Motor de Passo com Driver ULN2003

28BYJ-48 é um motor de passo pequeno, barato, com ótimo torque e de 5 volts. Muito empregado para controlar persianas automatizadas, atuadores de fluxo de ar em dutos, palhetas em unidades de ar condicionado, câmeras de movimento e outros. 

Detalhes do Motor de Passo 28YBJ-48

Ângulo de Passo (sequência de 8 Passos): 5.625° (64 passos por revolução).
Ângulo de Passo (sequência de 4 Passos): 11,25° (32 passos por revolução).
Gear Relação de redução: 1/64 (Não é realmente exato, em torno de 63.68395:1).
Com isso, então, percebemos que
o Motor de Passo 28YBJ-48 tem:
– Em sequência de 8 passos → 64 * 64 = 4096 passos por volta do eixo de saída.
– Em sequência de 4 passos → 32 * 64 = 2048 passos por volta do eixo de saída.

Módulo Driver ULN2003 

O módulo ULN2003 permite facilmente o controle do motor de passo 28BYJ-48 através de um microcontrolador, por exemplo, Arduino. Um lado da placa tem um soquete de 5 fios onde o cabo do motor se conecta e 4 LEDs para indicar qual bobina está atualmente ligada. Do outro lado do UNL2003, você tem um jumper liga/desliga do motor o qual se deve manter ligado para ativar a energia do motor de passo. As opções de energia do Motor de Passo (5V – 12V) são os pinos abaixo dos quatro resistores. O ideal é utilizar uma fonte externa para alimentar o motor, pois o motor pode drenar mais corrente do que o microcontrolador pode manipular e, consequentemente, ocasionar um dano. No meio da placa, temos o chip ULN2003. Na parte inferior estão as 4 entradas de controle que devem ser conectadas aos quatro pinos digitais do Arduino.

 Montagem

Este exemplo de projeto é o mais simples para controle de um motor de passo 28YBJ-48.
Então, faça as conexões conforme o esquema abaixo:

28BYJ-48 - ULN2003 - Esquema

Código de operação do 28YBJ-48

Finalmente, conecte o Arduino ao seu PC, carregue o código e veja o funcionamento do 28YBJ-48:

 1 // Projeto - Controle basico de um motor de passo 28YBJ-48 com CI ULN2003APG com Stepper board
 2  
 3      /*  Detalhes do Motor 28YBJ-48 Stepper Motor
 4  
 5          Angulo de Passo (sequencia de 8 Passos: Motor Interno sozinho): 5.625 graus (64 passos por revolucao)
 6          Angulo de Passo ( sequencia de 4 Passos: Motor Interno sozinho): 11,25 graus (32 passos por revolucao)
 7          Gear Relacao de reducao: 1/64 (Nao e realmente exato: provavelmente 63.68395:1)
 8          Entao: leva (64 * 64 = 4096 passos por volta do eixo de saida. Em seqüencia de 8 passos.
 9          Entao: leva (32 * 64 = 2048 passos por volta do eixo de saida. Em sequencia de 4 passos.
10         NOTA: Arduino "Stepper Library" e executado em modo de 4 passos */
11  
12      #include <Stepper.h>
13  
14      #define STEPS 32 // Taxa de variacao de velocidade "Stepper Library" e executado em modo de 4 passos
15  
16      Stepper stepper(STEPS, 4, 5, 6, 7);   // crie um objeto stepper nos pinos 4, 5, 6 e 7
17  
18       /*Define os parametros de ligacao do motor de passo
19       IN1 --> Porta Digital 4 do Arduino
20       IN2 --> Porta Digital 6 do Arduino  --> Porta Digital 5 para a Biblioteca CustomStepper.h
21       IN3 --> Porta Digital 5 do Arduino  --> Porta Digital 6 para a Biblioteca CustomStepper.h
22       IN4 --> Porta Digital 7 do Arduino
23       */
24  
25      void setup()
26        {
27  
28        }
29  
30      void loop()
31        {
32  
33             stepper.setSpeed(700); /*  Maxima velocidade de rotacao do eixo  para esse exemplo e 700 passos por minuto, ou seja,
34                                                              700/64  = 10.94 RPM. Para esse motor qualquer valor acima de 700 a precisao fica comprometida.
35                                                              Deve-se testar a velocidade para cada moto com a rotacao para se chagar a um valor
36                                                              maximo(Cada motor tem uma valor diferente: uns mais e outros menos em torno de 14RPM).*/
37  
38             stepper.step(2048);    // 2048 passos para uma rotacao de 360 ( 32 * 64 = 2048 passos por volta do eixo de saida. Em sequencia de 4 passos)
39             delay(1000);
40             stepper.setSpeed(400);
41             stepper.step(-1024);  // Volta 1024 passos, ou seja, 180 no sentido contrario
42             delay(200);
43  
44       }

Programa bem simples  que permite um giro completo em um sentido e meio giro no sentido contrário com velocidades distintas.
A seguir, é apresentado um outro código com a biblioteca  “CustomStepper.h“:

 1   // Programa - Controle basico motor de passo 28BYJ-48 com Biblioteca CustomStepper.h
 2  
 3      #include <CustomStepper.h>
 4  
 5      /*Define os parametros de ligacao do motor de passo
 6       IN1 --> Porta Digital 4 do Arduino
 7       IN2 --> Porta Digital 5 do Arduino  --> Porta Digital 6 para a Biblioteca Stepper.h
 8       IN3 --> Porta Digital 6 do Arduino  --> Porta Digital 5 para a Biblioteca Stepper.h
 9       IN4 --> Porta Digital 7 do Arduino
10       */
11  
12      CustomStepper stepper(4, 5, 6, 7, (byte[ ]){8, B1000, B1100, B0100,
13      B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
14  
15      boolean rotate1 = false;
16  
17  
18      void setup()
19        {
20  
21            stepper.setRPM(12);     // Define a velocidade do motor
22  
23            stepper.setSPR(4075.7728395);  // Define o numero de passos por rotacao
24  
25            // (64 * 25792)/405 =  4075.7728395
26            // (32 * 25792)/405 =  2037.88642
27        }
28  
29      void loop()
30        {
31            if (stepper.isDone() && rotate1 == false)
32              {
33                  delay(1000);
34                  stepper.setDirection(CW);
35                  //stepper.rotateDegrees(360);    // Define o angulo que vai girar
36                  stepper.rotate(2);                       // Define o numero de rotacoes
37                  rotate1 = true;
38              }
39  
40            if (stepper.isDone() && rotate1 == true)
41              {
42                    delay(1000);
43                    stepper.setDirection(CCW);     //  Define o sentido de rotacao (CCW = Anti-horario)
44                    //stepper.rotateDegrees(180);      //  Define o Angulo que vai girar
45                    stepper.rotate(1);                         //  Define o numero de rotacoes
46                    rotate1 = false;
47              }
48  
49            stepper.run();                      //   Comando obrigatorio para funcionamento da biblioteca
50        }

Então, percebemos que a biblioteca  “CustomStepper.h” é um pouco mais rica em comandos em relação à “Stepper.h”. Isso permite mais facilidade no controle do motor de passo.
Então, para finalizar esse tópico de Motor de Passo com o Módulo ULN2003, é apresentado aqui um projeto alternativo de controle pelo Monitor Serial, onde a entrada é o ângulo desejado. Aconselha-se colocar um transferidor na base do motor para observar a precisão desse motor que é bem razoável.

 1    /* Programa - Controle basico motor de passo 28BYJ-48 com Biblioteca CustomStepper.h
 2  
 3        Este programa permite controlar  a velocidade(RPM) e Angulo(graus) de rotacao do motor de passos
 4        com entrada pelo Monitor Serial.   */
 5  
 6      #include <CustomStepper.h>
 7  
 8      /*Define os parametros de ligacao do motor de passo
 9       IN1 --> Porta Digital 4 do Arduino
10       IN2 --> Porta Digital 5 do Arduino  --> Porta Digital 6 para a Biblioteca Stepper.h
11       IN3 --> Porta Digital 6 do Arduino  --> Porta Digital 5 para a Biblioteca Stepper.h
12       IN4 --> Porta Digital 7 do Arduino
13       */
14  
15      CustomStepper stepper(4, 5, 6, 7, (byte[ ]){8, B1000, B1100, B0100, B0110,
16                                                    B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
17  
18     float veloc;
19     float ang;
20  
21      void setup()
22        {
23            while (!Serial);         // aguarde pela porta serial para se conectar
24            Serial.begin(9600);
25  
26            stepper.setSPR(4075.7728395);  // Define o numero de passos por rotacao
27  
28            /* A caixa tem varias engrenagens ( 31 dentes, 32 dentes, 26 dentes, 22 dentes / 11 dentes, 10 dentes, e mais duas com 9 dentes).
29              Para determinar com maior precissao a reducao:
30              (31*32*26*22)/(11*10*9*9) = 283712/4455 = 25792/405 = 63,68395
31              Na especificacao do fabricante, ele aproximou o valor para 64.
32  
33              Para calcular o numero de passos do motor interno  para girar uma volta do eixo externo(com reducao):
34              (64 * 25792)/405 =  4075,7728395 */
35  
36            Serial.println("Entre com a velocidade em RPM e Angulo em graus, respectivamente:  ");
37        }
38  
39      void loop()
40        {
41  
42          if(Serial.available())
43              {
44                  veloc = Serial.parseFloat();    // Retorna o primeiro numero de ponto flutuante valido do buffer de serie
45                  ang   = Serial.parseFloat();
46  
47                  if (stepper.isDone() && ang >= 0)
48                      {
49  
50                          stepper.setRPM(veloc);             // Define a velocidade do motor
51                          stepper.setDirection(CW);         // Define o sentido de rotacao (CW = Horario)
52                          stepper.rotateDegrees(ang);     // Define o Angulo que vai girar
53                      }
54  
55                  if (stepper.isDone() && ang < 0)
56                    {
57                          stepper.setRPM(veloc);           //  Define a velocidade do motor
58                          stepper.setDirection(CCW);     //  Define o sentido de rotacao (CCW = Anti-horario)
59                          stepper.rotateDegrees(-ang);  //  Define o angulo que vai girar
60                    }
61  
62                  Serial.print(ang);
63                  Serial.print(" graus com ");
64                  Serial.print(veloc);
65                  Serial.print(" RPM de velocidade ");
66                  Serial.println(" ");
67              }
68  
69            stepper.run();                      //   Comando obrigatorio para funcionamento da biblioteca
70        }

Onde comprar?

#VLADCONTROL SHOP