O Motor de Passo 28BYJ-48 com Driver ULN2003 é um dispositivo muito prático desenvolvido a partir de um motor onde é possível ter o controle preciso da quantidade de voltas dadas. Comumente é muito utilizado em Scan DJ (equipamento para iluminação de festas), cortinas elétricas, ou até mesmo em alguns tipos de carrinho.
Uma característica sua é a menor velocidade desenvolvida com maior torque, ampliando sua aplicação. O Motor de Passo aqui apresentado possui uma redução, ou seja, enquanto o motor gira mais rápido internamente, um conjunto de engrenagens transforma a velocidade em força.
Ele é extremamente leve e contém hastes para fixação, para funcionamento vem acompanhado de um drive que tem a função de mandar para o motor uma corrente maior que o Arduino pode fornecer.
Teste prático Motor de Passo 28BYJ-48
Produtos Utilizados no Teste
- Arduino Mega ou Arduino Uno
- Motor de Passo com controlador
- Fonte de Alimentação
- Jumpers
Montagem Física
Para fazer as ligações é muito simples, basta seguir os passos da imagem abaixo:
Funcionamento do Código (Biblioteca)
Nosso software tem a função de fazer a sequência de pulsos aguardada pelo motor, e fazê-lo girar para um lado e para outro, onde através das variáveis no cabeçalho do código é possível alternar a velocidade do motor.
Download para programa para teste
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
/********************************* ***Autor: Leonardo Dalla Porta**** ***********19/07/2014************* *************Atenção************** ***O Codigo esta livre para uso,** *desde que seja mantida sua fonte* ********e seu autor.************** ********Faça um bom uso*********** ******Att. Equipe UsinaInfo******* *********************************/ int A = 4; //Entradas Motor int B = 5; int C = 6; int D = 7; // Velocidade do Motor int velocMotor = 1048; //Variavel de pulsos int cont = 0; // Numero de passos nescessaria para dar uma volta completa int passosPorRotacao = 512; //Definiçao da sequencia do motor int Sequencia[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); } void loop() { if(cont < passosPorRotacao ) sentidoHorario(); else if (cont == passosPorRotacao * 2) cont = 0; else sentidoAntiHorario(); cont++; } //Auxiliar para girar para sentido Anti Horario void sentidoAntiHorario() { for(int i = 0; i < 18; i++) { setOutput(i); delayMicroseconds(velocMotor); } } // Auxiliar para girar para sentido Horário void sentidoHorario() { for(int i = 17; i >= 0; i--) { setOutput(i); delayMicroseconds(velocMotor); } } // Ativa o motor void setOutput(int out) { digitalWrite(A, bitRead(Sequencia[out], 0)); digitalWrite(B, bitRead(Sequencia[out], 1)); digitalWrite(C, bitRead(Sequencia[out], 2)); digitalWrite(D, bitRead(Sequencia[out], 3)); } |
Conclusão
Após os teste é possível concluir que o Motor de Passo 28BYJ-48 com Driver ULN2003 além de ser um dispositivo pequeno e de grande utilidade para inúmeros fins, apresenta funcionamento adequado a sua proposta com rotações em velocidade reduzida, mas com maior torque, aproximadamente 2,2Kgf.cm. A utilização prática do vai depender da sua criativa e necessidade.
Autor: Leonardo Dalla Porta
Muito obrigado – fácil a usar.
Tem um erro no software: está contando entre 0 e 17 em vez de só 7. Deve ser:
for(int i = 0; i = 0; i–)
Eu também ajustei o código assim:
void loop()
{
if (cont < passosPorRotacao )
sentidoHorario();
else
sentidoAntiHorario();
cont++;
if (cont == passosPorRotacao * 2)
cont = 0;
}
Bom dia Glen!
Agradecemos pela dica, esperamos que seja útil também para os demais usuários, o projeto foi desenvolvido como base para inspirar nosso público e ficamos felizes em saber que isto está acontecendo.