fbpx
Arduino

Como acionar motor de passo com Driver ULN2003 e Arduino

O motor de passo é um motor elétrico de corrente contínua cuja principal característica é que seu eixo gira em incrementos ou passos precisos, movendo-se por uma quantidade fixa de graus.  

Os motores de passo são muito úteis em projetos em que fatores como ângulo de rotação, velocidade, posição e sincronismo precisam ser controlados com precisão. Eles são usados em impressoras convencionais; impressoras 3D, scanners, câmeras de vídeo, máquinas CNCs e até mesmo na injeção eletrônica dos automóveis. 

Uma das maneiras de aprender mais sobre o motor de passo é usando os motores de passo 28BJY-48 (Figura 1).  

A imagem em questao mostra um motor de passo 28BYJ-48
Figura 1 – Motor de Passo 28BYJ-48

Geralmente o 28BYJ-48 é usando em conjunto com o Driver ULN2003 (Figura 2), que permite que você controle facilmente o motor de passo com um microcontrolador, como o Arduino. O CI ULN2003 é um dos controladores de motor mais comuns, consistindo em uma série de 7 pares de transistores Darlington, em que cada par é capaz de conduzir cargas de até 500mA.

O Driver ULN2003 possui um conector de encaixe para dos fios do motor de passo 28BYJ-48, o que facilita muito a ligação. Além disso, o driver possui quatro entradas de controle (IN1, IN2, IN3 e IN4), entrada de alimentação e 4 LEDs.

IMPORTANTE: Uma vez que o motor exige uma corrente mais alta do que a que pode ser fornecida pela placa UNO, o Driver ULN2003 se faz necessário

A imagem mostra um  Driver ULN2003 em sua forma fisica e real

Figura 2 – Driver ULN2003

A proposta deste projeto é acionar o motor de passo usando o driver ULN2003 e Arduino. O motor deverá se mover no sentido horário quando o usuário digitar A e no sentido anti-horário quando o usuário receber B no monitor serial.


MATERIAIS NECESSÁRIOS


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 3 utilizando o motor de passo e o driver ULN2003.

A imagem apresenta de maneira ilustrativa o circuito para projeto acionamento do motor de passo com Driver.


Figura 3 – Circuito para Projeto Acionamento do motor de passo com driver ULN2003.

Ao montar seu circuito na protoboard preste atenção nos seguintes pontos:

  • Encaixe o conector do motor de passo 28BYJ-48 ao driver ULN2003;
  • Conecte os pinos IN do driver ULN2003 aos pinos da placa UNO da seguinte maneira: IN1 = Pino digital 8; IN2 = Pino digital 9; IN3 = Pino digital 10; IN4 = Pino digital 11.
  • Conecte uma fonte de alimentação de 5V – 1A nos pinos de alimentação do driver ULN2003;
  • Conecte o aterramento GND da fonte de alimentação ao GND da placa UNO. Isso é importante para que possamos estabelecer a mesma referência de tensão.

OBSERVAÇÃO:

Apesar de haver inúmeros exemplos na internet em que o motor de passo é alimentado diretamente pela placa Arduino, esta prática não é recomendada. Além do alto consumo, o motor de passo pode induzir ruído elétrico em suas linhas de alimentação, o que pode danificar a sua placa.

ELABORANDO O CÓDIGO

Com o esquemático elétrico montado, vamos a programação do Sketch. A proposta deste projeto é acionar o motor de passo usando o driver ULN2003. Vamos entender a lógica de programação deste projeto a partir dos seguintes passos.

1. Incluir a biblioteca:
Neste projeto, usaremos a biblioteca stepper, que permite controlar motores de passo unipolares ou bipolares. Esta biblioteca já se encontra instalada no Arduino IDE e você pode encontrá-la por meio do seguinte caminho na Toolbar: Sketch > Incluir biblioteca > Stepper, conforme a Figura 4.

A imagem mostra um print retirado do softaware Arduino IDE e que busca mostar a inclusao da biblioteca steeper
Figura 4 – Inclusão da biblioteca Stepper.

2. Declarar as variáveis:
Em seguida, declaramos a variável passos para armazenar o número de passos para que o motor complete uma revolução, ou seja, uma volta completa. Em nosso caso, é 2048.

Declaramos também a variável sentido, do tipo char, para armazenar os caracteres digitados pelo usuário no monitor serial.

3. Instanciar a biblioteca e configurar os pinos:
Logo após, vamos instanciar o objeto myStepper, do tipo Stepper, passando como parâmetro a quantidade de passos para que o motor mova uma volta completa e os pinos de conexão do motor.

4. Inicializar a comunicação serial:
Dentro da função setup(), inicializamos a comunicação serial através da instrução: Serial.begin(9600);

5. Verificar, receber e armazenar um caractere pelo monitor serial:
Inicializaremos a função loop() testando se algum caractere foi enviado ao monitor serial por meio da instrução if (Serial.available()). Uma vez satisfeita essa condição, o caractere será lido e armazenado na variável sentido através da instrução sentido = Serial.read();.

6. Verificação do caractere da variável sentido:
Utilizaremos a estrutura de controle de fluxo de seleção switch…case para comparar o caractere armazenado na variável sentido aos caracteres especificados nos comandos cases. Quando o caractere armazenado for igual ao caractere ‘A’, a função horario() será executada. Mas se o caractere armazenado for igual a ‘B’, a função antihorario() será chamada.

7. Criar a função horario():
Na função horario(), usaremos a função setSpeed() para definir a velocidade que desejamos que o motor de passo se mova. Em nosso exemplo, definimos a velocidade de 10 rotações por minuto.

A função step()será utilizada para definir a quantidade de passos que o motor deverá girar. Deste modo, passamos como parâmetro a variável passos para que o motor gire uma volta completa no sentido horário.

8. Criar a função antihorario():
Na função antihorario() também adicionamos a função setSpeed(), definindo a velocidade de 10 rotações por minuto.

A função step()será usada para definir a quantidade de passos que o motor deverá girar. Ao contrário da função horário(), passamos como parâmetro a variável -passos para que o motor gire uma volta completa no sentido anti-horário.

Ao final, o código deste projeto terá a seguinte estrutura:

/*
  --- ACIONAR MOTOR DE PASSO COM DRIVE ULN2003   ---
  ==================================================
  == BLOG DA ROBOTICA - www.blogdarobotica.com ==
  ==================================================
  Autora: Carol Correia Viana
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  ==================================================
*/

#include <Stepper.h> //Biblioteca do motor
const int passos = 2048; //Número de passos para uma volta
char sentido; //Variável para armazenar o caractere digitado pelo usuário

Stepper myStepper(passos, 8, 10, 9, 11); //Inicia o motor utilizando os pinos 8, 10, 9, 11

void setup() {
  Serial.begin(9600); // Inicializa a comunicação serial
}

void loop() {
  if (Serial.available()) { // Se a serial receber algum caractere
    sentido = Serial.read(); // Lê o caractere e guarda na variável sentido
    Serial.println(sentido);// Imprime na serial o conteúdo de sentido
  }

  switch (sentido) {
    case 'A':
      horario(); // Chama a função para acionamento do motor no sentido horário
      break;
    case 'B':
      antihorario(); // Chama a função para acionamento do motor no sentido anti-horário
      break;
  }
}

// Função para acionamento do motor no sentido horário
void horario() {
  Serial.println("Girando no sentido Horário!");
  myStepper.setSpeed(10); // Velocidade de 10 rpm
  myStepper.step(passos); // Move 2048 passos, correspondentes a uma volta
}

// Função para acionamento do motor no sentido anti-horário
void antihorario() {
  Serial.println("Girando no sentido Anti-horário!");
  myStepper.setSpeed(10); // Velocidade de 10 rpm
  myStepper.step(-passos); // Move 2048 passos, correspondentes a uma volta
}

Espero ter ajudado,

Obrigada a todos e, em caso de dúvidas, deixe seu comentário abaixo!

Dúvidas? Deixe seu comentário

Carol Correia Viana

Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.