Neste tutorial, vais aprender a controlar um motor de passo usando um comando IR. Os motores de passo são amplamente utilizados em várias aplicações, como robótica, máquinas CNC e impressoras 3D, devido ao seu controlo preciso e à capacidade de se moverem em pequenos incrementos. Ao combinar o motor de passo com um comando IR, podemos criar um sistema de controlo sem fios para os nossos projetos.
Vamos utilizar o ULN2003 módulo driver para ligar o motor de passo ao Arduino. O ULN2003 é um chip driver popular que simplifica o controlo de motores de passo, fornecendo a amplificação de corrente e a proteção necessárias. Permite-nos controlar o motor de passo usando apenas alguns pinos digitais do Arduino.
Para o motor de passo, usamos um 28byj-48 motor de passo. É muito acessível, compacto e funciona entre 5 e 12 Volts, o que facilita a integração com Arduinos e projetos alimentados por bateria.
No final deste tutorial, vais perceber claramente como ligar os componentes, escrever o código Arduino e controlar o motor de passo usando um comando IR. Especificamente, vamos conseguir controlar a velocidade e a direção do motor, e também teremos uma funcionalidade de pausa.
Vamos começar!
Componentes Necessários
Abaixo encontras os componentes necessários para este projeto. Se já tens um comando IR, não precisas do Kit de Recetor IR, apenas do Módulo Recetor IR. No entanto, nem todos os comandos IR serão adequados. Por outro lado, se comprares ou já tens o Kit, não precisas do Módulo Recetor IR, pois já faz parte do Kit.

Arduino Uno

Conjunto de Cabos Dupont

Breadboard

Cabo USB para Arduino UNO

Módulo Recetor IR

Kit de Recetor Remoto IR

Motor de Passo

Arduino IDE
Ligar os Componentes
Nesta secção vamos ligar os componentes ao Arduino. Vais precisar de ligar os pinos de saída do Arduino ao módulo driver, que por sua vez está ligado ao motor de passo. Como o motor de passo consome mais energia do que o Arduino pode fornecer, adicionamos uma breadboard com uma fonte de alimentação adicional. A breadboard também irá alimentar o sensor IR, que precisa de estar ligado à alimentação e a um pino de entrada do Arduino. A imagem abaixo mostra toda a cablagem completa.

Ligar o Motor de Passo e o Driver
Vamos começar por ligar o motor de passo à placa driver.
O motor de passo 28byj-48 normalmente vem com um conector que encaixa diretamente na tomada da placa driver. Basta ligar. Só encaixa numa orientação.

De seguida, ligamos os sinais de entrada do driver do motor aos pinos de saída da placa Arduino:

A tabela seguinte mostra os pinos correspondentes:
| Arduino | Módulo driver |
|---|---|
| Pino 12 | IN1 |
| Pino 11 | IN2 |
| Pino 10 | IN3 |
| Pino 9 | IN4 |
Terminamos a cablagem do driver ligando a alimentação da placa driver à breadboard. Certifica-te de que o fio vermelho liga a entrada positiva da placa driver ao rail positivo da breadboard (marcado por uma linha vermelha). O fio preto liga o lado negativo ao GND.

Ligar Fonte de Alimentação Adicional
Para alimentar um motor de passo normalmente precisas de mais energia do que a placa Arduino pode fornecer. Por isso, ligamos uma fonte de alimentação adicional (por exemplo, uma pilha de 9V) à breadboard. Vê o conector abaixo:

NÃO alimentes o motor de passo diretamente a partir da saída de 5V do Arduino! Podes danificar o regulador de tensão da tua placa.
Ligar o Sensor IR
Agora, vamos colocar o sensor infravermelhos (IR) na breadboard e ligá-lo. O pino negativo está marcado com um sinal (-). Usamos um fio preto para ligar este pino ao rail de terra da breadboard. Isto significa que o sensor e a placa driver usam a mesma massa.

O pino do meio do sensor é normalmente o positivo. Precisamos de o ligar à saída de 5V do Arduino. Abaixo vês o fio vermelho a sair do pino central do sensor IR para a saída de 5V da placa Arduino.

NÃO ligues o pino do meio do sensor ao rail positivo da breadboard, pois pode estar a uma tensão superior! Também não ligues os 5V do Arduino ao rail positivo da breadboard. .
No entanto, temos de garantir que o sensor e a placa driver partilham a mesma massa. Por isso, ligamos um fio preto do pino GND do Arduino ao rail negativo da breadboard (marcado por uma linha azul. Vê acima.
Por fim, ligamos o sinal de saída do sensor IR, que é o pino marcado com (S), ao pino 8 do Arduino usando um fio branco.
As duas coisas mais importantes a lembrar são (1), não ligar a alimentação do motor de passo diretamente ao Arduino. Mas (2), deves ligar a alimentação do sensor IR ao Arduino. E claro, confirma sempre a polaridade correta.
Escrever o Código Arduino
Nesta secção vamos escrever o código para controlar o motor de passo com um comando IR. Especificamente, queremos conseguir controlar a velocidade e a direção do motor de passo. Além disso, seria útil podermos parar e arrancar o motor com o pressionar de um botão.
O código abaixo faz tudo isso. Vamos dividi-lo em partes e explicar cada uma nas secções seguintes.
#include <IRremote.hpp>
#include <AccelStepper.h>
#define IR_RECEIVE_PIN 8
#define IN1_PIN 12
#define IN2_PIN 11
#define IN3_PIN 10
#define IN4_PIN 9
#define TYPE AccelStepper::HALF4WIRE
#define MAXSPEED 1000
#define MINSPEED 100
int currspeed = 500;
int prevspeed = 500;
int inc = 100;
int dir = +1;
// Note the pin order 1,3,2,4!
auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
stepper.setMaxSpeed(MAXSPEED);
}
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
prevspeed = currspeed;
currspeed = min(currspeed + inc, MAXSPEED);
} else if (command == 23) { // VOL-
prevspeed = currspeed;
currspeed = max(currspeed - inc, MINSPEED);
} else if (command == 21) { // MODE
dir = -dir;
delay(200);
} else if (command == 7) { // PLAY or PAUSE
currspeed = currspeed > 0 ? 0 : prevspeed;
delay(200);
}
IrReceiver.resume();
}
stepper.setSpeed(dir * currspeed);
stepper.runSpeed();
}
Instalar as Bibliotecas
Primeiro, precisamos de duas bibliotecas. IRremote, que é usada para ler e interpretar os sinais enviados pelo comando IR. E AccelStepper, que nos vai facilitar muito o controlo do motor de passo. Se ainda não tens estas duas bibliotecas instaladas, vais precisar de as instalar.
#include <IRremote.hpp> #include <AccelStepper.h>
Definir as Constantes
De seguida, definimos as constantes que vamos usar no resto do código. Primeiro, definimos os pinos para o sensor IR (PIN 8) e os quatro pinos de saída na placa Arduino que estão ligados aos pinos de entrada do driver do motor de passo (IN1_PIN, …, IN4_PIN)
#define IR_RECEIVE_PIN 8 #define IN1_PIN 12 #define IN2_PIN 11 #define IN3_PIN 10 #define IN4_PIN 9
Além disso, precisamos de informar a biblioteca do motor de passo sobre o tipo de motor que temos ligado (HALF4WIRE). Também queremos especificar uma velocidade máxima e mínima (1000…100). Para mais detalhes vê o nosso tutorial 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino.
#define TYPE AccelStepper::HALF4WIRE #define MAXSPEED 1000 #define MINSPEED 100
Definir as Variáveis
Como queremos conseguir controlar a velocidade do motor de passo, precisamos de algumas variáveis além das constantes acima. Especificamente, precisamos da velocidade atual (currspeed), da velocidade anterior do motor (lastspeed), e do incremento (inc) para acelerar ou abrandar o motor. Também temos uma variável dir, que pode ser +1 ou -1 e determina a direção da rotação.
int currspeed = 500; int prevspeed = 500; int inc = 100; int dir = +1;
Dica: se quiseres alterar a velocidade do motor mais rápido ou devagar, é a variável inc que deves ajustar.
Por fim, criamos o objeto do motor de passo (stepper), que precisamos para enviar comandos ao motor de passo.
auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);
Nota que as entradas estão NÃO em ordem sequencial, mas sim na ordem 1, 3, 2, 4. Isto é propositado!
A Função Setup
A função setup, onde inicializamos a placa, é muito simples. Apenas informamos a biblioteca do sensor sobre os pinos usados para o sensor IR e definimos a velocidade inicial do motor de passo para MAXSPEED.
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
stepper.setMaxSpeed(MAXSPEED);
}
A Função Loop
Toda a ação acontece no loop principal. Aqui, primeiro esperamos pelo recetor IR. Se receber um sinal para decifrar, deciframos e extraímos o comando específico enviado pelo comando IR. Dependendo do valor da variável command , aceleramos, abrandamos, mudamos de direção ou alternamos entre parar e arrancar.
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
prevspeed = currspeed;
currspeed = min(currspeed + inc, MAXSPEED);
} else if (command == 23) { // VOL-
prevspeed = currspeed;
currspeed = max(currspeed - inc, MINSPEED);
} else if (command == 21) { // MODE
dir = -dir;
delay(200);
} else if (command == 7) { // PLAY or PAUSE
currspeed = currspeed > 0 ? 0 : prevspeed;
delay(200);
}
IrReceiver.resume();
}
stepper.setSpeed(dir * currspeed);
stepper.runSpeed();
}
Os códigos de comando estão mapeados para teclas específicas (Vol+->31, Vol–>23, Mode->21, Play/Pause->7) no comando IR. Este mapeamento depende do comando IR que estás a usar! Para descobrires que teclas correspondem a que códigos de comando no teu comando, vê o nosso tutorial sobre How to use an IR receiver and remote with Arduino.
Há alguns detalhes interessantes no código. Primeiro, se acelerarmos, temos de evitar ultrapassar o MAXSPEED. A função min() garante isso. Da mesma forma, ao abrandar, usamos a função max() para garantir que não baixamos de MINSPEED.
Mudar de direção é fácil: sempre que carrego em MODE no meu comando, o recetor IR lê o código de comando 21, e simplesmente mudamos o sinal da variável dir . Nota que a variável dir é usada mais à frente no código quando a velocidade é definida via stepper.setSpeed(dir*currspeed), e determina a direção da rotação (+1 = sentido dos ponteiros do relógio, -1 = sentido contrário).
O último comando é alternar entre correr ou parar usando a tecla PLAY/PAUSE do meu comando. Usamos um ternary condition (c ? a : b) aqui para verificar se a velocidade atual é maior que zero. Se for o caso, significa que o motor está a funcionar e definimos a velocidade atual para zero para parar. Caso contrário, se o motor não estiver a funcionar (velocidade zero), definimos a velocidade para a última conhecida (prevspeed).
Aplicações
Há imenso que podes fazer com um motor de passo controlado por IR. Aqui ficam algumas ideias divertidas e possíveis aplicações:
Estores ou Cortinas Automatizadas
Usa o motor de passo para controlar a abertura e fecho de estores ou cortinas em resposta a comandos do comando IR. Pode ser uma adição prática a sistemas de automação doméstica.
Braço Robótico
Constrói um pequeno braço robótico que pode ser controlado com o comando IR. O motor de passo pode controlar o movimento do braço, permitindo-lhe apanhar e manipular objetos.
Comedouro Automático para Animais
Cria um comedouro automático que distribui comida em horários específicos ou em resposta a comandos do comando IR. O motor de passo pode controlar o mecanismo de libertação da comida.
Sistema de Rega Automática
Constrói um sistema que rega plantas automaticamente com base num horário ou comandos do comando IR. O motor de passo pode controlar o fluxo de água ou o movimento de um braço de rega.
Abertura de Porta de Garagem
Usa o motor de passo para controlar a abertura e fecho de uma porta de garagem em resposta a comandos do comando IR. Pode ser uma adição útil a um sistema de automação doméstica.
Aspirador Robótico
Cria um pequeno aspirador robótico que pode ser controlado com o comando IR. O motor de passo pode controlar o movimento do aspirador, permitindo-lhe navegar pela divisão.
Comedouro Automático para Peixes
Constrói um comedouro automático para peixes que distribui comida em horários específicos ou em resposta a comandos do comando IR. O motor de passo pode controlar o mecanismo de libertação da comida.
Fechadura Inteligente
Usa o motor de passo para controlar o trancar e destrancar de uma porta em resposta a comandos do comando IR. Pode ser uma adição prática a um sistema de automação doméstica.
Abertura Automática de Janelas
Cria um sistema que abre e fecha janelas automaticamente com base na temperatura ou em comandos do comando IR. O motor de passo pode controlar o movimento da janela.
Barman Robótico
Constrói um barman robótico que pode misturar e servir bebidas com base em comandos do comando IR. O motor de passo pode controlar o movimento do mecanismo de distribuição de bebidas.
Conclusões
Neste tutorial, aprendeste a controlar um motor de passo 28byj-48 usando um comando IR e um driver ULN2003 com a ajuda de uma placa Arduino. Seguindo os passos deste guia, já deves conseguir integrar estes componentes nos teus próprios projetos e criar movimentos precisos de motor.
Começámos por reunir as peças necessárias, incluindo o motor de passo 28byj-48, um comando IR, um driver ULN2003 e uma placa Arduino. Depois ligámos estes componentes, garantindo que a cablagem estava correta e segura.
De seguida, escrevemos o código Arduino para receber sinais do comando IR e traduzi-los em movimentos específicos do motor. Utilizando a biblioteca IRremote, conseguimos facilmente capturar e interpretar os sinais enviados pelo comando. Depois usámos o driver ULN2003 para controlar o motor de passo, fornecendo a energia e sinais necessários para mover o motor na direção e velocidade desejadas.
Em conclusão, controlar um motor de passo 28byj-48 com um comando IR usando um driver ULN2003 é um projeto divertido e prático que abre um mundo de possibilidades para automação e robótica. Seja para construir um slider de câmara, um braço robótico ou qualquer outro projeto que exija controlo preciso de motores, este tutorial deu-te o conhecimento e as competências necessárias para começares.
Esperamos que tenhas achado este tutorial útil e que te tenha inspirado a explorar ainda mais possibilidades com motores de passo e Arduino. Consulta a secção de Links para mais recursos e projetos relacionados com controlo de motores de passo. Boas criações!
Perguntas Frequentes
Aqui estão algumas perguntas frequentes sobre o controlo de um motor de passo 28byj-48 com um comando IR usando um driver ULN2003:
P: Posso usar um motor de passo diferente com esta configuração?
R: Sim, podes usar um motor de passo diferente desde que tenha especificações compatíveis. Certifica-te de verificar a tensão, corrente e passos por volta do motor para garantir a compatibilidade com o driver ULN2003. Vê os nossos tutoriais sobre alternativas driver boards and stepper motors.
P: Posso usar um driver diferente em vez do ULN2003?
R: Sim, podes usar um driver diferente como o A4988 ou o DRV8825. No entanto, terás de modificar o código para corresponder à configuração dos pinos e sinais de controlo do novo driver.
P: Posso controlar vários motores de passo com esta configuração?
R: Sim, podes controlar vários motores de passo ligando cada motor a um driver ULN2003 separado e usando pinos diferentes no Arduino para cada driver. Terás de modificar o código para controlar cada motor individualmente.
P: Posso usar outro microcontrolador em vez do Arduino?
R: Sim, podes usar outro microcontrolador como o ESP32 ou o Raspberry Pi. No entanto, terás de adaptar o código à linguagem de programação e à configuração de pinos do microcontrolador escolhido.
P: Como posso alimentar o motor de passo?
R: O motor de passo pode ser alimentado com uma fonte de alimentação externa. Certifica-te de ligar o terminal positivo da fonte ao pino VCC do driver ULN2003 e o terminal negativo ao pino GND. A tensão da fonte deve corresponder à tensão nominal do motor (5-12V).
P: Posso controlar o motor de passo sem fios?
R: Sim, podes controlar o motor de passo sem fios usando um módulo de comunicação sem fios como Bluetooth ou Wi-Fi. Terás de integrar o protocolo de comunicação adequado no teu código e estabelecer ligação entre o microcontrolador e o módulo sem fios.
Se tiveres outras dúvidas ou questões, deixa um comentário abaixo ou consulta os links fornecidos para mais informações.
Links
Aqui estão alguns links para tutoriais relacionados:
- 28BYJ-48 Stepper Motor with ULN2003 + Arduino
- Stepper Motor with DRV8825 and Arduino Tutorial
- TB6600 Stepper Motor Driver with Arduino Tutorial
- ESP32 And IR Remote Interface – A Complete Tutorial
- Stepper Motor with L298N and Arduino Tutorial
- TB6560 Stepper Motor Driver with Arduino Tutorial
- Stepper with Arduino Motor Shield Rev3 Tutorial
- IR Remote and Receiver with Arduino Tutorial
- Servo Motor Control with Remote
- Controlling a Servo with IR
- Controlling Servo Motor Using IR Remote Control
- Controlling Servo Motor With Ir Remote Using Arduino
- IR remote controlled DC servo motor using Arduino
- Controlling Servo Motor with IR Remote
- Control Servo motor using any Infrared Remote with Arduino

