ADS1115 – Módulo Conversor Analógico Digital (ADC)
MFRC522 – Módulo RFID 13,56 MHZ
Módulo Display 7 Segmentos TM167 Clock/Decimal
Controle Remoto IR com Arduino
Display LCD 16X2 com Módulo I2C
Ponte H L298N: Módulo de Controle de Motores DC
Matriz de LEDs 8X8 com MAX7219
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:
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?